vba:variables未在activeCell中定义

我是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编辑器并将其input到“Microsoft Excel对象”工作表中,则不会收到错误消息。 但是,如果我作为“模块”命名我的模块为“m_End”我得到一个错误抛出说

 Compile Error Variable not defined 

它在vba编辑器中突出显示的variables是第一个“If条件”行中的“currentRow”:

 currentRow = ActiveCell.Row 

我不明白有什么区别,以及如何解决这个错误。

任何帮助,将不胜感激。

由于您发布了代码的其余部分,显然这个错误是因为您没有在Dim语句中声明currentRow 。 可能option Explicit不在你的表单模块中,所以没有错误。

无论如何,请转至Tools ► Options ► Editor ► Code Settings然后selectRequire Variable Declaration将来可以节省大量的debugging时间。 也许在你的表单模块中没有Option Explicit

我会把它声明为一个Long

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