2017-05-14 80 views
2

我是vba新手,所以在學習。我很努力地理解爲什麼這在Excel 2016中失敗了,我的研究一片空白。我有以下代碼vba:變量未在activeCell中定義

Option Explicit 

Sub Range_End_Method() 

Dim lRow As Long 
Dim lCol As Long 
Dim i As Integer 
Dim rng As Range 

Set rng = ActiveCell 

lRow = Cells(Rows.Count, 1).End(xlUp).Row 

lCol = Cells(1, Columns.Count).End(xlToLeft).Column 

    Do While rng.Value <> Empty 
     If InStr(rng.Value, "Petrol") = 0 Then 
      currentRow = ActiveCell.Row 
      Worksheets("MySheet").Cells(currentRow, 5) = "Shopping" 
      Set rng = rng.Offset(1) 
      rng.Select 
     Else 
      currentRow = ActiveCell.Row 
      Worksheets("MySheet").Cells(currentRow, 9) = "Not Found" 
      Set rng = rng.Offset(1) 
      rng.Select 
     End If 
    Loop 

End Sub 

如果我打開vba編輯器並將其輸入到「Microsoft Excel Objects」表中,我不會收到錯誤消息。但是,如果我跑的「模塊」命名我的模塊「m_End」我拋出了一個錯誤,說

Compile Error 

Variable not defined 

它強調在VBA編輯器中的變量是在第一個「如果條件來自行「currentRow」 「:

currentRow = ActiveCell.Row 

我不明白有什麼區別,以及如何解決錯誤。

任何幫助,將不勝感激。

+0

您在代碼的開頭缺少一個*** Sub ***語句。 –

+0

在你的代碼的開始,你應該有'Option Explicit',接着是'Sub yourSubName()'。既然如此,你從不聲明'currentRow'是一個變量。如果您在開始時沒有Option Explicit,請進入「工具►選項►編輯器►代碼設置」並選擇「需要變量聲明」,這將爲您節省大量時間。也許在你的sheet模塊中,你沒有'Option Explicit' –

+0

對不起,我剛剛編輯了我的代碼 - 我錯誤地忘了複製選項和子語句。運行代碼時,他們也在那裏。這仍然給出了同樣的錯誤。我應該如何聲明變量?謝謝 – Dan

回答

2

由於您發佈了其他代碼,因此您的聲明中沒有聲明currentRow,這個錯誤很明顯。可能option Explicit不在您的工作表模塊中,因此沒有錯誤。

無論如何,請轉至Tools ► Options ► Editor ► Code Settings並選擇Require Variable Declaration它將爲您節省大量調試時間。也許你的表模塊中你沒有Option Explicit

我將宣佈它作爲一個Long

哦,在VBA沒有優勢(也有一些缺點)來聲明一個數據類型作爲Integer。無論如何,他們都會在內部轉換成長褲。並且可以分配的值受到限制。檢查各種限制的數據類型的VBA規範。

+0

太棒了,就是這樣。我剛剛檢查,你是對的,我的其他代碼沒有「選項顯式」標籤。我只是像你提到的那樣去除污漬,它起作用!雖然字段沒有設置,但我會嘗試調試。謝謝 – Dan