2016-11-21 225 views
-4

爲什麼這不起作用?運行時錯誤91?VBA運行時錯誤91:對象變量未設置?

Dim fornameCurr As String 
Dim surnameCurr As String 
Dim rowCurr As Long 

rowCurr = 13 
fornameCurr = Activesheet.Cells(rowCurr, 1) << ERROR HERE 
surnameCurr = Activesheet.Cells(rowCurr, 2) 
+2

該代碼是如何被調用的?從Excel或其他應用程序?它是否來自加載項? (如果是從Excel,而不是從一個外接,那麼這段代碼應該工作) –

+0

我得到任何問題與你給的代碼。 –

+0

A13的值是多少?這是一個錯誤嗎? – Vityata

回答

9

運行時錯誤91表明ActiveSheet Is Nothing(因爲ActiveSheet是唯一的推測對象在代碼的幾行您提供的,肯定只有對象於提高錯誤的行)。

幾種情況,我能想到的可能有助於此:

  1. 代碼正在從一個外接程序調用,Excel或其他應用程序,並且沒有Excel工作簿打開。在這種情況下,沒有ActiveWorkbook,也沒有ActiveSheet
  2. 代碼正在從其他應用程序(如Outlook, 訪問,的Word,PowerPoint等)執行的,但你使用Excel內置 ActiveSheet這不會在其他應用程序存在。
  3. 您已將內置的ActiveSheetDim Activesheet As Worksheet連爲一體,忽略將工作表對象分配給該變量,因此默認爲Nothing

分辨率:

  1. 添加邏輯以檢查工作簿對象的存在等
  2. 聲明一個Worksheet對象變量和分配給它。
  3. 傾向於避免隱藏現有內置名稱,確保分配給對象變量
+3

我的猜測是#2 - 但我們真的不應該猜測。 OP需要提供更多細節。 –

+0

好像他正在試圖通過一個位置參考爲一個字符串,這讓我覺得這就是問題。 fornameCurr = Activesheet.Cells(rowCurr,1)<> Dim fornameCurr As String。奇怪他沒有得到一個數據類型不匹配的錯誤? –

+0

@DougCoats我不遵循你所說的......'ActiveSheet.Cells(rowCurr,1)'從該單元格返回'.Value',它可以轉換爲字符串數據類型,除非它是一個錯誤反而會引起錯配)。 –

相關問題