【发布时间】:2019-10-22 22:21:13
【问题描述】:
背景:
我正在尝试从给定工作表名称的Array 中遍历工作簿中的一系列工作表。
代码
而不是更传统的:
Sub test()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
Debug.Print ws.Name
Next ws
End Sub
我使用了一种不同的方法,可以更轻松地将数组扩展到 10 个工作表,或者从另一个数字开始,如下所示:
Sub test()
Dim ws As Worksheet
Dim arr As Variant: arr = ["Sheet"&ROW(1:3)]
For Each ws In ThisWorkbook.Sheets(arr)
Debug.Print ws.Name
Next ws
End Sub
问题:
但是["Sheet"&ROW(1:3)] 将创建一个二维数组,该数组将在For each... 循环的开头抛出一个Error 13,因为该数组需要一个一维数组。
我可以使用简单的TRANSPOSE 来解决这个问题,例如:
Sub test()
Dim ws As Worksheet
Dim arr As Variant: arr = [TRANSPOSE("Sheet"&ROW(1:3))]
For Each ws In ThisWorkbook.Sheets(arr)
Debug.Print ws.Name
Next ws
End Sub
问题:
也许我的大脑很累,但现在我不明白为什么["Sheet"&ROW(1:3)] 不会创建一维数组。有人知道吗?
恐怕答案很简单,我会经历那种“啊哈”的时刻。
【问题讨论】:
-
ROW(1:3)是范围,范围是值的二维数组。 -
添加到 Scott 的评论中,
Row(1:3)类似于Range(Cells(1,"A"),Cells(3,"XFD"))。 -
@ScottCraner,这就像“ABC”一样简单,我现在觉得很愚蠢,真的有一个“Ahaaaa”时刻=)。愿意回答以下问题吗?
-
@JvdV 问题格式看起来不错……我发誓我在某处看到过,哈哈。我们都有这样的时刻!
-
@JvdV 开了个玩笑,因为它也符合我的所有问题,并且有一次我正在讨论 meta 为 SO 提供更标准化的格式以帮助确保有每个“背景”、“问题”、“问题”和“相关代码”都有一个空间,最终的答案是它可能看起来适合 SO,但不是 SE 中的所有站点,所以不会发生......每个每当我看到类似部分结构良好的帖子时,它只会让我微笑。