2011-03-08 83 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