如何使用工作表代号的数组和计数器?

时间:2016-02-18 17:41:15

标签: vba excel-vba excel

真的很感激可以提供的任何帮助! 我觉得这个问题是基本的,应该很容易搞清楚,但我很挣扎。我有一个Excel 2016工作簿,如果出现设置错误,则需要运行代码以将工作表的名称重置为“标准”。工作表位置(表格(1))不能使用,因为工作表位置可能会更改,并且不能使用可见工作表名称(表格(“名称”)),因为它不会是常量。这使用代号(Sheet1)作为适当的选项。 我设置了一个数组和简单的代码来重命名工作表,但它不会运行。

'WSName to define array of sheets by codename
'NewName to create reference to cell which contains new worksheet name

Dim WSName as Variant
Dim NewName as Variant
WSName = Array ("Sheet4","Sheet15","Sheet17","Sheet18")
NewName = Array("D15","D16","D17","D18")

'counter to cycle through arrays and rename the 4 worksheets

For Ncounter = 0 To 3
Sheets(WSName(Ncounter)).Name=Range(NewName(Ncounter)).Value
Next Ncounter

我可以用用户添加的工作表名称替换WSName数组,代码可以工作。我也尝试从代码中删除“Sheets”,因为我实际上是在说SheetsSheetX,但仍然没有。

我认为我错过了通过代号引用工作表的正确语法。任何帮助或建议将不胜感激,我很抱歉,我认为,这是一个新手,只是没有得到它的问题。

更新:根据Tim的回答,我这样做了:

'WSName to define array of sheets by codename
'NewName to create reference to cell which contains new worksheet name

Dim WSName, NewName as Variant

WSName = Array (Sheet4, Sheet15, Sheet17, Sheet18)
NewName = Array("D15","D16","D17","D18")

'counter to cycle through arrays and rename the 4 worksheets

For Ncounter = 0 To 3
WSName(Ncounter).Name=Range(NewName(Ncounter)).Value
Next Ncounter

此代码循环显示20页中的4页,并将这4位重命名为活动工作表中列出的值。 对于昏暗,我敢肯定,长而不是变体将工作正常(实际上更好),只需要在切换之前再多研究一下,所以我确信我对2之间的差异感到满意。 再次感谢所有回应......天使

1 个答案:

答案 0 :(得分:1)

您可以将表单直接放入数组中 - 不需要使用codeNames:

void some_algorithm(std::function<void ()> callback) {
   ...
   callback();
   ...
   callback();
   ...
}

class SomeClass {
  void foo() {}
};

int main() {
  SomeClass object;
  some_algorithm(std::bind(&SomeClass::foo, &object));
}

您需要指定哪个工作表包含您要重置的工作表名称。只需使用&#34; Range()&#34;将默认为ActiveSheet。

假设重命名的工作表与上面的代码在同一工作簿中。如果情况并非如此,那么请回到使用名称并使用下面链接中的JFC功能来获取每张纸的参考。

Fully reference a worksheet by codename

在循环中:

Dim arrWS, NewName, Ncounter As Long
arrWS = Array (Sheet4, Sheet15, Sheet17, Sheet18)
NewName = Array("D15","D16","D17","D18")

'counter to cycle through arrays and rename the 4 worksheets

For Ncounter = 0 To 3
    arrWS(Ncounter).Name = Range(NewName(Ncounter)).Value
Next Ncounter