![](/img/trans.png)
[英]Excel VBA Beginner - Getting Run time error '9' Subscript out of range
[英]Excel VBA “Subscript out of range” Run Error '9'
我試圖實現以下代碼,以便可以讀取一個單元格值,然后將該值放入同一工作表上的另一個單元格中。
工作表具有以下名稱:TestUserGuidance(無空格)代碼如下:
Sub GuideTest()
Dim dblPower, dblMass, dblRatedSpeed, dblRefLength, dblAwot, dblEngineSpeed, dblRoadSpeed As Double
Dim dblPMR As Double
dblPower = Worksheets("TestUserGuidance").Cell("B1").Value
Worksheets("TestUserGuidance").Cell("E1") = dblPower
End Sub
誰能告訴我我要去哪里錯了嗎?
謝謝
我認為vba找不到TestUserGuidance表。 如果在立即窗口中運行以下命令,則會出現“對象不支持此屬性或方法”錯誤:
?worksheets(1).cell("A1")
如果運行此命令,則會收到錯誤消息,提示您“下標超出范圍”:
?worksheets("non-existent sheet").cell("A1")
這向我表明活動的工作簿是不正確的,因為如果vba能夠找到工作表,則將出現另一個錯誤。 您可以嘗試添加ThisWorkbook(並同時使用范圍)嗎?
dblPower = ThisWorkbook.Worksheets("TestUserGuidance").Range("B1").Value
ThisWorkbook.Worksheets("TestUserGuidance").Range("E1") = dblPower
另一個選擇是重命名工作表:
這樣,您就不必擔心活動的工作簿(也可以提高智能):
shtTestUserGuidance.Range("E1") = shtTestUserGuidance.Range("B1")
另外,我建議您進行其他人建議的所有更正。 否則,您可能還會遇到其他問題。
最后,如果工作表就像模板,結構不會改變,那么最好只使用一個公式(即E1的公式:= B1)。 即使存在條件邏輯,也可能更容易將其維護為公式而不是vba代碼。
以下是一些故障排除步驟:
通過單擊左側的灰色區域,在設置dblPower的行上切換斷點:
運行代碼時,它應在斷點處暫停。 現在您可以檢查范圍。 嘗試在立即窗口中鍵入以下內容,然后按Enter:
?Worksheets("TestUserGuidance").Name
要么
?ActiveWorkbook.Name
請注意,當光標位於子例程內的某個位置時,也可以通過按F8鍵逐行瀏覽代碼。 底線是您可能需要逐行檢查代碼以弄清楚這一點。
這是使代碼正常工作的方式:
Sub GuideTest()
Dim dblPower, dblEngineSpeed, dblRoadSpeed As Double ' first two are of variant type
Dim dblPMR As Double
dblPower = Worksheets(1).Range("B1").Value
Worksheets(1).Range("E1") = dblPower
End Sub
使用“ E1”或“ B1”時,應使用Range
而不是Cells。 在我的回答中, Worksheets(1)
是指Worksheets("TestUserGuidance")
。
僅dblRoadSpeed
被聲明為double。 要解決此問題,請將所有變量聲明為單獨變量,在vba中,您可以通過兩種方式進行操作。
Dim dblPower As Double, dblMass As Double
要么
Dim dblPower As Double
Dim dblMass As Double
另外,您無需聲明任何變量即可執行操作。 您可以一步一步復制該值。
Worksheets("TestUserGuidance").Range("E1").Value = Worksheets("TestUserGuidance").Range("B1").Value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.