Столбец с меткой, не распознанный подразделом в VBA

#excel #vba #loops #label

#excel #vba #циклы #метка

Вопрос:

Я назвал столбцы в своей книге Excel. Затем я написал скрипт VBA для анализа данных, и я начинаю с маркировки именованных столбцов (Game, Hole и Dte в примере 1 ниже). Затем я запускаю цикл for и if для данных. Когда я запускаю цикл в главном подразделении, как в примере 1, он работает нормально. Однако, когда я запускаю цикл в своем собственном подразделе (пример 2 ниже) Я получаю «определяемую приложением или объектом ошибку», потому что он не распознает «Дыру» в моем столбце. Столбец ‘Hole’ является шестым в таблице Excel, поэтому, когда я изменяю код в примере 2, чтобы ссылаться на » If Sheets («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
  

Пример 2:

 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
  

Комментарии:

1. Это проблема области видимости. DRVE2 ничего не знает о Hole in DRVE . Возможно, вы захотите начать с чтения этого . Вы также должны добавить Option Explicit в начало модуля и объявить все переменные.

2. @BigBen большое спасибо, я прочитал это, добавил опцию Explicit и объявил отверстие как строку в самом начале модуля. У меня это все равно не сработало, а затем я даже попытался изменить код в примере 2 на следующий и все равно получил ту же ошибку. Опять же, это работает, если я использую 6 вместо отверстия. Это как-то связано с использованием переменной в качестве идентификатора столбца? Код изменен на: Dim x As Long Dim i As Long Dim Hole As String Hole = Range("Hole").Column x = 0 For i = 2 To 738 If Sheets("37 Rounds Stacked").Cells(i, Hole) < 18 Then x = x 1 End If Next i

3. Какое значение в немедленном окне, если вы Debug.Print Hole перед попыткой его использовать? Кроме того, Hole должен быть a Long .

4. @BigBen большое спасибо за помощь. Когда я меняю его на Dim Hole as Long в самом начале модуля, он работает отлично. Значение в немедленном окне было 6, что, я думаю, вы ожидали (или надеялись!). Есть идеи, почему это не сработало, когда я определил его как String?

5. Потому что вы передавали ему строку, которая выглядела как число, а не фактическое число.