Excel VBA中Sub无法识别带标签的列

Excel VBA中Sub无法识别带标签的列,excel,vba,loops,label,Excel,Vba,Loops,Label,我已在Excel工作簿中命名了列。然后,我编写了VBA脚本来分析数据,并开始标记命名列(下面的示例1中的Game、Hole和Dte)。然后对数据运行for和if循环。当我在main Sub中运行循环时(如例1所示),它工作得很好。但是,当我在自己的子循环(下面的示例2)中运行循环时,我会得到一个“应用程序定义的或对象定义的错误”,因为它无法识别我的列“洞”。“洞”列是Excel工作表中的第六列,因此,当我将示例2中的代码更改为“如果工作表(“37轮堆叠”)。单元格(I,6)

我已在Excel工作簿中命名了列。然后,我编写了VBA脚本来分析数据,并开始标记命名列(下面的示例1中的Game、Hole和Dte)。然后对数据运行for和if循环。当我在main Sub中运行循环时(如例1所示),它工作得很好。但是,当我在自己的子循环(下面的示例2)中运行循环时,我会得到一个“应用程序定义的或对象定义的错误”,因为它无法识别我的列“洞”。“洞”列是Excel工作表中的第六列,因此,当我将示例2中的代码更改为“如果工作表(“37轮堆叠”)。单元格(I,6)<4”时,它确实起作用,因此一旦我在未定义列的子项中有循环,它显然会丢失我对列的标签

有人能帮我理解为什么以及如何修复它吗

示例1:

Sub DRVE()
Game = Range("Round").Column
Hole = Range("Hole").Column
Dte = Range("Date").Column

Dim x As Long
x = 0
For i = 2 To 739
    If Sheets("37 Rounds Stacked").Cells(i, Hole) < 4 Then
            x = x + 1
    End If
Next i

End Sub
Sub DRVE()
Game = Range("Round").Column
Hole = Range("Hole").Column
Dte = Range("Date").Column

End Sub

Sub DRVE2()

Dim x As Long
x = 0
For i = 2 To 739
    If Sheets("37 Rounds Stacked").Cells(i, Hole) < 4 Then
            x = x + 1
    End If
Next i

End Sub
Sub-DRVE()
游戏=范围(“回合”)。栏
孔=范围(“孔”)。列
Dte=范围(“日期”)。列
暗x等长
x=0
对于i=2到739
如果板材(“37轮堆叠”)。单元(i,孔)<4,则
x=x+1
如果结束
接下来我
端接头
示例2:

Sub DRVE()
Game = Range("Round").Column
Hole = Range("Hole").Column
Dte = Range("Date").Column

Dim x As Long
x = 0
For i = 2 To 739
    If Sheets("37 Rounds Stacked").Cells(i, Hole) < 4 Then
            x = x + 1
    End If
Next i

End Sub
Sub DRVE()
Game = Range("Round").Column
Hole = Range("Hole").Column
Dte = Range("Date").Column

End Sub

Sub DRVE2()

Dim x As Long
x = 0
For i = 2 To 739
    If Sheets("37 Rounds Stacked").Cells(i, Hole) < 4 Then
            x = x + 1
    End If
Next i

End Sub
Sub-DRVE()
游戏=范围(“回合”)。栏
孔=范围(“孔”)。列
Dte=范围(“日期”)。列
端接头
副DRVE2()
暗x等长
x=0
对于i=2到739
如果板材(“37轮堆叠”)。单元(i,孔)<4,则
x=x+1
如果结束
接下来我
端接头

这是一个范围问题
DRVE2
DRVE
中的
Hole
一无所知。你可以从阅读开始。您还应该在模块顶部添加
Option Explicit
,并声明所有变量。@BigBen非常感谢,我通读了一遍,在模块的最开始添加了Option Explicit并声明为字符串。它仍然不适用于我,然后我甚至尝试将示例2中的代码更改为以下代码,但仍然得到相同的错误。同样,如果我使用6而不是孔,它也会起作用。这与使用变量作为列标识符有关吗?代码更改为:Dim x As Long Dim i As Long Dim Hole As String Hole=Range(“Hole”)。对于i=2到738的表格(“37轮堆叠”)。单元格(i,Hole)<18则如果下一个i则x=x+1结束,如果您尝试使用它,则立即窗口中的值是多少?另外,
应该是
长的
@BigBen谢谢你的帮助。当我将其更改为Dim Hole时,只要在模块的最开始,它就可以完美地工作。即时窗口中的值是6,我猜这是您期望的(或希望的!)。知道我把它定义为字符串时为什么不起作用吗?因为你传递给它的字符串看起来像一个数字,而不是一个实际的数字。