vba:未在activeCell中定义的变量

时间:2017-05-14 11:36:25

标签: excel vba excel-vba

我是vba的新手,所以我正在学习。我很难理解为什么这在Excel 2016中失败了,而我的研究却是空白。我有以下代码

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

我不明白区别是什么以及如何修复错误。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

由于您发布了其余代码,因此您错误显然是因为您未在currentRow语句中声明Dim。可能option Explicit不在您的工作表模块中,因此没有错误。

无论如何,请转到Tools ► Options ► Editor ► Code Settings并选择Require Variable Declaration它将在未来节省大量的调试时间。也许在您的工作表模块中,您没有Option Explicit

我会将其声明为Long

哦,在VBA中,将数据类型声明为Integer没有任何优势(并且有一些缺点)。无论如何,他们在内部被转换为Longs;并且可以分配的值是有限的。检查各种限制的数据类型的VBA规范。