在对象名中为WITH语句使用变量

时间:2019-02-04 09:36:17

标签: excel vba

我有一个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 :(得分:2)

可以通过4种方式引用工作表:

  • 及其索引;
  • 选项卡上的名称;
  • CodeName,默认情况下与标签的名称相同,除非更改了标签的名称;
  • 带有变量;

前段时间,我在这里写下了这个答案-https://stackoverflow.com/a/52721327/5448626


当您编写With Blad2时,Blad2是工作表的代号。例如,这里的一个:

enter image description here

因此,它已经是一个变量,并且Excel可以识别它。另一方面,With ("Blad" & bld)是字符串,而不是工作表变量。

要使其正常工作,请使用With Worksheets("Blad" & bld),并使用工作表的工作表名称。

答案 1 :(得分:2)

您要使用的是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