【发布时间】:2014-07-16 12:26:22
【问题描述】:
我编写了下面的程序来复制用户创建的工作表中的值(直到 100 张)并粘贴到同一个名为“Ergebnisse”的工作簿上的另一个选项卡中 我没有按名称引用工作表,因为用户可以根据自己的意愿重命名。 问题是如果用户没有创建确切的 100 张,则会出现运行错误 2147352565(8002000b)。
有人知道我可以在程序中插入哪个条件来避免这个错误吗? 例如,用户只创建了 30 张工作表,因此程序忽略/跳过从第 35 行到第 104 行的复制和粘贴。
这可能是一个非常愚蠢的问题,但我对 VBA 非常陌生,所以如果有人可以帮助我,我将不胜感激!
'
'Insert Results
'
Sub Ergebnisse()
'Bauteilbewertung 100 Blätter
Sheets(4).[H3:W3].Copy Sheets(3).[H10:W10]
Sheets(5).[H3:W3].Copy Sheets(3).[H11:W11]
Sheets(6).[H3:W3].Copy Sheets(3).[H12:W12]
Sheets(7).[H3:W3].Copy Sheets(3).[H13:W13]
Sheets(8).[H3:W3].Copy Sheets(3).[H14:W14]
Sheets(9).[H3:W3].Copy Sheets(3).[H15:W15]
Sheets(10).[H3:W3].Copy Sheets(3).[H16:W16]
......... Till:
Sheets(104).[H3:W3].Copy Sheets(3).[H110:W110]
End Sub
我插入了,但没有用:
Sub Ergebnisse()
Dim ws As Worksheet
For Each ws In Worksheets
ws = Worksheet.Active
Do
'(Code above)
Loop Until ws = Sheets(Sheets.Count).Active
Next ws
End Sub
【问题讨论】:
-
您是否考虑过使用仅到达
Sheets.Count的循环? -
我插入了,但是没有用:Sub Ergebnisse() Dim ws As Worksheet For Each ws In Worksheets ws = Worksheet.Active Do Code above Loop until ws = Sheets(Sheets.Count).Active下一个 ws 结束子
-
这不是有效的语法。在 VBA 中使用
for循环搜索;我已经为你指明了你需要去的方向,但你需要花 60 多秒的时间才能到达那里。当您不知道工作表是否存在时,您显然不能使用ws = WorkSheet.Active。循环的全部目的是仅使用实际存在的那些,因此在 检查它是否存在之前尝试使用它是没有意义的。 -
总是从
sheet4开始吗? -
谢谢大家的帮助!