2011-03-08 94 views
0

非常简单,只需有人知道这个VBA函数有什么问题吗?

Function GetMonthRange(sheetMonth) As Range 
GetMonthRange = ActiveCell.Range("A1:AB1") 
End Function 

但Excel中保持点亮它在我身上时,我尝试使用“对象变量丢失”的错误运行我的电子表格。编号91.

我已经隔离了代码,它仍然点亮。我不会问,但我已经花了一个小时了,并且每次调试器开始时重新启动Excel(因为显然微软从来没有想过,有时候我们想在一个bug后重新开始操作)会把我拉上墙。

另外我很确定Excel是维护自己的剪贴板。

我要出去踢一只小狗。

P.S. 如果有真正的VBA程序员想要笑,那么这里是整个文件的链接。在这里完全入场;我吮吸Excel。

https://github.com/okamura1967/Directors_project_sheet/blob/master/project-sheet-for-directors.vbs

+1

正如@craig所回答的那样,当你给一个变量赋予一个变量以外的变量,比如integer,string,double等时,需要使用Set。在上面的例子中,你返回一个'Range '是一个对象变量的实例。为了赋值给这个变量,你需要'Set'。 – shahkalpesh 2011-03-08 07:00:38

+1

另外,使用'Range(“A1:AB1”)''或'ActiveSheet.Range(“A1:AB1”)'而不是'ActiveCell.Range(“A1:AB1”)''。虽然两者应该一样,但前者更好。 – shahkalpesh 2011-03-08 07:02:27

+2

是的,我知道那个VBA函数有什么问题。 – 2011-03-08 17:16:36

回答

3

你的函数有几个错误。 1.如果你想返回一个范围,你必须使用Set,因为Range是一个对象。 2.不使用参数sheetMonth 3.该函数将返回不同的结果,具体取决于函数执行时活动单元的情况。 4.如果这是一个UDF,只要A1:B1中的任何内容发生变化,就不会重新计算,因为A1:B1不是参数。

你究竟在做什么?

+0

谢谢查尔斯!我正在为我自己和我公司的其他几个人制作一张简单的Gannt图表,以跟踪我们正在进行的项目。你可以在我的P.S.上面发布的github链接上查看完整的代码。如果你想。实际的代码目前已被注释掉,所以我可以找出问题所在;上面代码片段中的代码实际上与项目没有关系;但它与真实代码一样失败,我不想通过包含注释部分来混淆人。 – StormShadow 2011-03-08 10:53:19

1

我改变你的函数:

Function GetMonthRange() As Range 
    Set GetMonthRange = ActiveSheet.Range("A1:AB1") 
End Function 

这似乎为我现在的工作。

+0

谢谢 - 是的,如果你在你的机器上试过它,它将不起作用,因为没有调用参数。所以你把它拿出来,它的工作。但我必须提供该参数。无论如何,即使我把它拿出来,它也不适用于我的文档。顺便说一句,我也在2003年。这可能是相关的。 – StormShadow 2011-03-08 07:02:51

+1

@StormShaddow Craig的答案是从ActiveCell到ActiveSheet的变化 – 2011-03-08 07:35:37

+0

不能这样做。我需要选择相对于活动单元格。 – StormShadow 2011-03-08 10:41:42