我正在开发一个项目,要求我根据数组中位置的值选择工作表。我已使用值填充desArr()
(类型为String),desArr(0)
包含我要引用的工作表的名称。为了避免用户更改选项卡名称和搞乱代码的问题,我试图引用工作表的CodeName。
通常,我可以这样做:
ThisWorkbook.Worksheets(Import.Name)
其中Import
在VB编辑器的(Name)
属性下指定。但是,我现在想要根据desArr(0)
的值在输入中可变地引用该名称。我尝试了以下但无济于事:
ThisWorkbook.Worksheets(desArr(0).Name)
ThisWorkbook.Worksheets(desArr(0) & ".Name")
有没有人知道如何解决这个问题?
答案 0 :(得分:2)
只需使用:
Import
这是引用工作表对象而无需知道其Name
属性的方法。只需使用其变量/对象名称。上述内容相当于,但比其复杂得多,
ThisWorkbook.Worksheets(Import.Name)
您所指的" CodeName"以及(Name)
"属性"不是财产。它只是对象变量的名称。根据我的问题推断,您的工作表对象称为Import
,所以只需使用它。
编辑:
很难理解你在问什么;澄清一下:
如果我理解正确,你有一张叫做#34;导入"的表,你希望能够防范这种情况:
好的,有些用户认为重命名工作表是个好主意。请注意,这会将表格对象的Name
属性值更改为"User-input crap"
。 Name
属性和选项卡中写的内容始终相同;他们是一回事;他们一对一地联系在一起。
但是,工作表对象本身仍称为Import
,或者之前的任何内容。 (默认情况下它是Sheet1
,但您可能在“属性”窗口中更改了它。)请参阅:
无论用户输入废话,我仍然可以说,例如:
Import.Cells(1, 1).Value = "frog"
我也可以这样说,这是无用的复杂但完全等同的:
ThisWorkbook.Worksheets(Import.Name).Cells(1, 1).Value = "frog"
我可以也这样说:
ThisWorkbook.Worksheets("User-input crap").Cells(1, 1).Value = "frog"
但为此,我必须知道用户在工作表标签中输入的内容,我不知道。