VBA - добавить листы в переменную и перейти к новой книге - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь написать макрос, который может создать до 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

1 Ответ

0 голосов
/ 28 августа 2018

Вы не можете передать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...