2011-04-12 140 views
3

運行以下代碼時,出現「對象變量或塊變量未設置」錯誤消息。它在Access中並引用一個Excel電子表格。代碼有什麼問題?vba錯誤:對象變量或未設置塊變量

wsTest.Range("A11").Activate  

Do Until IsEmpty(ActiveCell) 
    intX = intX + wsTest.Cells(ActiveCell.Row, "L") 'error occurs on this line 
    intY = intY + wsTest.Cells(ActiveCell.Row, "I") 
    ActiveCell.Offset(1, 0).Select ' Step down 1 row to the next cell. 
Loop 

代碼運行第一次,沒有錯誤,只有第二次。關閉並重新打開Access「修復」問題。這與代碼有什麼關係?

+0

錯誤發生在哪條線上? – mwolfe02 2011-04-12 19:45:41

+0

我使用該信息更新了上面的代碼。 – LFurness 2011-04-12 19:55:59

+3

ActiveCell是指Excel對象,因此您可能應該使用XL應用程序參考來限定它。例如:xlApp.Activecell – 2011-04-13 00:21:56

回答

1

,我相信你試圖做一個無效的總和。也許wsTest.Cells(oCell.Row, "L")返回的值不是整數,或者您應該使用wsTest.Cells(oCell.Row, "L").Value來代替。

添加msgbox來檢查單元格值會更容易找出問題的根源,正如我在下面添加的那樣。

無論哪種方式,我建議你避免使用對ActiveCell的引用,因爲它們不可靠。也許這段代碼有助於避免這個錯誤(簡單地用適當的單元對象替換ActiveCell)。

Dim oCell as excel.range 

set oCell = wsTest.Range("A11") 

Do Until Len(oCell.Value) = 0 
    msgbox(wsTest.Cells(oCell.Row, "L")) 
    intX = intX + wsTest.Cells(oCell.Row, "L") 'error occurs on this line 
    intY = intY + wsTest.Cells(oCell.Row, "I") 
    Set oCell = oCell.Offset(1, 0) ' Step down 1 row to the next cell. 
Loop 
+0

這是一個整數 - ActiveCell是問題。搞砸的事情是[Microsoft在他們的文檔中使用ActiveCell](http://support.microsoft.com/kb/141762)。非常感謝您的理解! – LFurness 2011-04-13 15:17:57

+0

太好了,@LCountee!很高興知道它的工作。 – 2011-04-13 16:12:53

0

嘗試改變

wsTest.Range("A11").Activate 

wsTest.Range("A11").Select 
+0

不,沒有工作。同樣的錯誤。 – LFurness 2011-04-12 20:20:05

+1

嘗試在'intX ='行之前添加'Debug.Print ActiveCell.Address'。結果是什麼? – mwolfe02 2011-04-12 20:53:57

+0

第一次運行代碼時,如果沒有發生錯誤,結果是$ A $ 11,這是正確的,因爲我測試的文件只有一行數據。但是,第二次運行代碼時,錯誤發生在'do直到isempty(activecell)'行並且'debug.print'從不運行。所以這很有趣,錯誤發生在第二次代碼運行時,在任何第一次嘗試訪問活動單元格的行上。嗯。 – LFurness 2011-04-13 14:17:19

1

您需要定義紙張,像這樣:由於在突出顯示的行發生錯誤

Dim wsTest As Worksheet 

Set wsTest = Sheets("Sheet1") 
+0

難道它不會錯誤的行「wsTest.Range(」A11「)。激活」如果這是問題? – 2011-04-13 01:04:48

+0

@Doug,這是我實現他的代碼時發生的錯誤,所以我添加了這些行並解決了問題。 – 2011-04-13 05:20:42

相關問題