2014-06-06 65 views
2

我正在处理一个项目,该项目要求我根据数组中某个位置的值选择工作表。我用值填充了desArr()(String类型),desArr(0)包含了我想要引用的表的名称。为了避免用户更改标签名称和弄乱代码的问题,我试图引用工作表的CodeName。使用数组引用名称属性

通常情况下,我能做到这一点:其中被列在VB编辑器的(Name)属性指定Import

ThisWorkbook.Worksheets(Import.Name) 

。但是,现在我想要根据desArr(0)的值输入输入名称。我试图做以下但无济于事:

ThisWorkbook.Worksheets(desArr(0).Name) 

ThisWorkbook.Worksheets(desArr(0) & ".Name") 

有没有人有任何想法如何解决这个问题?

+0

ThisWorkbook.Worksheets(desArr(0))? – dee

+0

感谢您的回复!但是,这只会引用工作表的标签名称。因此,如果工作簿中的某个选项卡是“导出”并且desArr(0)包含“导出”,那么它将起作用。我想要实现的是调用工作表的名称属性,该属性可能与选项卡名称相同也可能不同。有任何想法吗? – user3715632

+1

也许收集工作表对象而不是他们的名字会更容易?如果在数组中有工作表对象而不是名称,则可以调用desArr(0).Name请注意,如果您已适当设置工作表,则不需要“ThisWorkbook.WorkSheets”部分。 – CodeJockey

回答

2

只需使用:

Import 

这是引用一个表对象,而不需要知道它的Name财产的方式。只需使用其变量/对象名称即可。以上是相当于,但远低于错综复杂,

ThisWorkbook.Worksheets(Import.Name) 

你指的“代号”和(Name)“属性”什么不是属性。这只是对象变量的名称。从我的问题中可以推断出,你的工作表对象被称为Import,所以就使用它。


编辑:

很难理解你的要求;澄清一点:

如果我理解正确的话,你有一个名为“导入”表,并且希望能够防止这种情况:

enter image description here

好,一些用户决定了它重命名工作表是一个好主意。请注意,这将表单对象的Name属性值更改为"User-input crap"Name属性和标签上写的东西都是总是一样的;他们是同一件事;他们被链接到一对一。

但是,表单对象本身仍然被称为Import,或者其他任何东西。 (默认情况下它是Sheet1,但也许你在属性窗口中改变了它。)请参阅:

enter image description here 不管用户输入的废话,我仍然可以说,例如:

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" 

但为此,我不得不知道什么用户在工作表选项卡中键入,我不知道。

+0

感谢您的回应!但我想引用Name属性,因为如果有人更改工作表选项卡名称,我的代码将失败。使用Name属性,用户无需先通过VB编辑器对其进行更改即可轻松更改。另外,我知道每个工作表的名称属性,但我不知道名称未输入时的语法,但存储在数组desArr(0)中。有什么想法吗? – user3715632

+0

上面应该明确回答你的问题。 –

+0

只是为了澄清,这将是什么张贴在标签名称,可以改变吗?所以在这个例子中,导入将是该选项卡的名称,但不一定是该表的名称属性? – user3715632