VBA многократно копировать различные комбинации из 2 листов из одной основной книги в новые рабочие книги? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть одна рабочая книга со многими листами, которые мы назовем «тип A», и равное количество листов «типа B» в той же рабочей книге, которые соответствуют данному листу типа A.

Для простоты, скажем, мои листы уходят: красный, желтый, синий, темно-красный, темно-желтый, затем темно-синий.Я хочу скопировать оба красных листа в новую рабочую книгу, затем оба желтых в другую новую книгу и так далее.Я также хочу, чтобы имя нового файла рабочей книги было именем файла типа A (например, Red).Любая помощь будет принята с благодарностью.

Вот VBA, которая у меня есть.Я могу скопировать первый комбо в новую рабочую книгу (т. Е. Оба красных), но после этого я получаю сообщение об ошибке «424».Я использую цикл «i» и ссылаюсь на листы по их номеру для простоты / обобщения.

Sub export2sheets()
Dim twb As Workbook
Set twb = ThisWorkbook
Dim i As Integer
XPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 1 To 2
    twb.Activate
    Worksheets(Array(i, (i + 2))).Copy
    With ActiveWorkbook
         Application.ActiveWorkbook.SaveAs Filename:=XPath & "\" & xWs.Name & ".xlsx"
         Application.ActiveWorkbook.Close False
    End With
    Workbooks.Add
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

РЕДАКТИРОВАТЬ 1 : приведенный ниже код работает, но не называет файл и не закрывает его, как предполагалось, якобы потому, что для этого я удалил строки кода.

Sub export2sheets()
Dim twb As Workbook
Set twb = ThisWorkbook
Dim i As Integer
XPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 1 To 2
    twb.Activate
    Worksheets(Array(i, (i + 3))).Copy
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

РЕДАКТИРОВАТЬ 2 : самый последний код ниже.

  • Я использовал n для обобщения числа файлов / листов типа А.
  • Я удалил все, что связано с xPath.
  • У меня естьизменил xWs на Worksheets(i).
  • Я удалил Application.ActiveWorkbook.
  • Я изменил Close False на Close True, потому что я хочу закрыть файл, когда закончите.

Есть идеи , почему код дает мне код ошибки "52" при нажатии клавиши F8 в строке SaveAs?В настоящее время он выполняется до SaveAs, поэтому он не меняет имя файла и не закрывает файл.Кроме того, по некоторым причинам Save и Close False работают, но если используется SaveAs или Close True, он не работает.

Sub export2sheets()
    Dim twb As Workbook
    Set twb = ThisWorkbook
    Dim i As Integer
    Dim n As Integer
    n = 3 'set n = the number of type A files
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For i = 1 To n
        twb.Worksheets(Array(i, (i + n))).Copy
        SaveAs Filename:=Worksheets(i).Name & ".xlsx"
        Close True
    Next i
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...