首页 > 解决方案 > 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

标签: vbaexcel

解决方案


您不能在通话中传递string所有工作表名称。Array()

您可以做的是创建一个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

推荐阅读