2017-05-14 88 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