我是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
我不明白区别是什么以及如何修复错误。
任何帮助都将不胜感激。
答案 0 :(得分:2)
由于您发布了其余代码,因此您错误显然是因为您未在currentRow
语句中声明Dim
。可能option Explicit
不在您的工作表模块中,因此没有错误。
无论如何,请转到Tools ► Options ► Editor ► Code Settings
并选择Require Variable Declaration
它将在未来节省大量的调试时间。也许在您的工作表模块中,您没有Option Explicit
我会将其声明为Long
哦,在VBA中,将数据类型声明为Integer
没有任何优势(并且有一些缺点)。无论如何,他们在内部被转换为Longs;并且可以分配的值是有限的。检查各种限制的数据类型的VBA规范。