对工作表的字符串引用有效,但字符串变量不起作用

时间:2019-12-16 17:31:23

标签: arrays excel vba

我要将工作表从一个工作簿复制到另一个工作簿。如果我分别复制它们,则单元格将引用外部复制的工作簿。如果我同时复制它们,则单元格引用将引用新工作簿中的工作表。

如果我对外部工作簿中的工作表列表进行硬编码,则一切正常。

$pdo->exec("SET SESSION sql_mode = concat(@@sql_mode, ',ANSI_QUOTES')");
$stmt = $pdo->prepare('
    UPDATE Guests SET
      "Profile is Subscribed ?" = :subscribed,
      "Private ?" = :private 
    WHERE intID = 123
');
$stmt->execute(['subscribed' => 1, 'private' => 0]);

如果我将工作表列表放在一个变量中并使用它,它就会死掉。

closedBook.Worksheets("dog", "cat", "cow").Copy after:=ThisWorkbook.Sheets(3)

有人知道我在做什么错吗?

2 个答案:

答案 0 :(得分:0)

这样的事情怎么样?

dim T(1 to 3) as string

T(1) = "dog"
T(2) = "cat"
T(3) = "cow"

for x = 1 to 3
closedBook.Worksheets(x).Copy after:=ThisWorkbook.Sheets(3)
Next x

顺便说一句:在您的代码中,您似乎已经忘记了第二个“仅次于猫”。

答案 1 :(得分:0)

strSheets = "dog", "cat", "cow"

您正在将3个字符串文字分配给1个标识符,这是非法的。

没有String可以容纳多个字符串值:您需要一个字符串的 array ,并且可以将其包装到Variant中:

Dim sheeNames As Variant

并使用Array函数将其分配给数组:

sheetNames = Array("dog", "cat", "cow")

现在您可以按预期使用工作表名称的变体数组:

closedBook.Worksheets(sheetNames).Copy  ...

请注意,没有str前缀(有关系统匈牙利符号中最后的棺材,请参见Making Wrong Code Look Wrong)和复数名称。

也可以内联:

closedBook.Worksheets(Array("dog", "cat", "cow")).Copy  ...