VBA - 将工作表添加到变量并移动到新工作簿



我正在尝试编写一个最多可以创建 3 个新工作表的宏,最后将这些工作表移动到新工作簿中。这些工作表中的一些、全部或全部都可以创建,我正在努力移动它们。我尝试将它们的名称添加到字符串和数组中(如果我手动键入要移动的工作表的名称,则带有和不带有引号来模仿(。

这就是我目前所拥有的,但它返回运行时错误"9":下标超出范围。如果我只移动其中一张纸,这工作正常,但是一旦有多张纸,它就会停止工作。请问有人可以建议吗?

Dim SheetNames As String  
if x is True Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "a"
SheetNames = Worksheet.Name
End if
if y is True Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "b"
If SheetNames = "" Then
SheetNames = Worksheet.Name
Else
SheetNames = sheetNames & Worksheet.Name
End if
End if
if z is True Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "c"
If SheetNames = "" Then
SheetNames = Worksheet.Name
Else
SheetNames = sheetNames & Worksheet.Name
End if
End if
Sheets(Array(SheetNames)).Move

不能传递包含Array()调用中所有工作表名称的string

您可以做的是创建一个array来保存要移动的工作表的名称,然后调用move方法:

Sub example()
Dim x As Boolean, y As Boolean, z As Boolean
Dim SheetNamesArr() As String
Dim ArrSize As Integer
x = True
y = True
z = True
ArrSize = 0
ReDim Preserve SheetNamesArr(ArrSize)
If x Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "a"
ReDim Preserve SheetNamesArr(0 To ArrSize)
SheetNamesArr(ArrSize) = ActiveSheet.Name
ArrSize = ArrSize + 1
End If
If y Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "b"
ReDim Preserve SheetNamesArr(0 To ArrSize)
SheetNamesArr(ArrSize) = ActiveSheet.Name
ArrSize = ArrSize + 1
End If
If z Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "c"
ReDim Preserve SheetNamesArr(0 To ArrSize)
SheetNamesArr(ArrSize) = ActiveSheet.Name
ArrSize = ArrSize + 1
End If
Sheets(SheetNamesArr).Move
End Sub

最新更新