Используйте переменную в Objectname для С заявлением

Обновить

April 2019

Просмотры

32 раз

1

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

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

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

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

Этот код не удается. Я знаю наверняка, переменная зд имеет числовое значение, испытано, что с 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 ответы

2

A worksheet could be referred to in 4 ways:

  • with its index;
  • with its Name on the tab;
  • with its CodeName, which is by default the same as the name of the tab, unless the latter is changed;
  • with a variable;

Some time ago I have written this answer here - https://stackoverflow.com/a/52721327/5448626


When you write With Blad2, then Blad2 is the codename of the worksheet. E.g., the one here:

enter image description here

Thus, it is already a variable and Excel recognizes it. On the other hand, With ("Blad" & bld) is a string and not a worksheet variable.

To make it work, use With Worksheets("Blad" & bld), using the worksheet name of the worksheet.

2

What you are trying is to use Variable Variable for SheetCode Name. You cannot do it like that. To achieve what you want, try this...

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