Используйте переменную в Objectname для оператора WITH - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть макрос Excel, который читает содержимое из определенного столбца на другом листе.Я хочу использовать переменную в имени листа в операторе WITH, но продолжаю получать сообщение об ошибке «Ошибка во время выполнения, требуется объект» в строке For Each

Я уже искал, как использовать переменные в именах объектов ипробовал, но безрезультатно.

Этот код работает

With Blad2
strData = Range(id & "1") & vbLf & vbLf
    For Each c In .Range(id & "2:" & id & "10")
        If c.Value <> "" Then
            strData = strData & " - " & c.Value & vbLf
        End If
    Next c
End With

Этот код не работает.Я точно знаю, что переменная bld имеет числовое значение, проверял это с помощью MsgBox

With ("Blad" & bld)
strData = Range(id & "1") & vbLf & vbLf
    For Each c In .Range(id & "2:" & id & "10")
        If c.Value <> "" Then
            strData = strData & " - " & c.Value & vbLf
        End If
    Next c
End With

Любые подсказки, как мне заставить это работать?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вы пытаетесь использовать Variable Variable для имени SheetCode.Вы не можете сделать это так.Чтобы добиться того, что вы хотите, попробуйте это ...

Dim bld As Long: bld = 2
Dim shtCode As String

shtCode = "Blad" & bld

With Sheets(ThisWorkbook.VBProject.VBComponents(shtCode).Properties("Name").Value)
    Debug.Print .Name
End With
0 голосов
/ 04 февраля 2019

На рабочий лист можно ссылаться 4 способами:

  • с его индексом;
  • с его именем на вкладке;
  • с его CodeName, который по умолчанию совпадает с именем вкладки, если только последняя не изменена;
  • с переменной;

Некоторое время назад я написал этот ответ здесь - https://stackoverflow.com/a/52721327/5448626


Когда вы пишете With Blad2, тогда Blad2 является кодовым именем рабочего листа.Например, здесь:

enter image description here

Таким образом, это уже переменная, и Excel распознает ее.С другой стороны, With ("Blad" & bld) - это строка, а не переменная листа.

Чтобы заставить его работать, используйте With Worksheets("Blad" & bld), используя имя рабочего листа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...