Как создать новые рабочие листы с помощью «Делать циклы» и копировать / вставлять между различными рабочими книгами? - PullRequest
0 голосов
/ 29 марта 2019

Мне нужно создать новый рабочий лист в Workbook1 и назвать его в соответствии со значением ячейки. Затем мне нужно скопировать и вставить значение из Workbook1 в Workbook2, чтобы запустить модель. Затем мне нужно скопировать и вставить выходные данные Workbook2 в новый рабочий лист, который я только что создал в Workbook1. Затем мне нужно повторить эту задачу, пока я не просмотрю все записи в моем списке в Workbook1.

По пути я продолжаю сталкиваться с множеством проблем.

Основная проблема, с которой я столкнулся, заключается в том, что у макроса возникают проблемы при выборе значения для копирования и вставки. Я продолжаю получать ошибку времени выполнения 9 и не могу ее устранить.

Я создал цикл Do, чтобы попытаться выполнить все шаги, перечисленные выше.

Я также создал Do Loop внутри Do Loop для создания нового рабочего листа. Это создает вкладку, но поместил лист в обе книги после моих попыток исправить ошибку.

Я также не знаю, как ссылаться на новую вкладку, которую я создал в последующем коде, поэтому написал заполнитель под названием «NEW TAB», чтобы обозначить это

Диапазон выходных данных, создаваемых Workbook2, отличается при каждом запуске модели, поэтому я пытаюсь каждый раз копировать и вставлять 500 000 строк данных между рабочими книгами. Произошла ошибка 1004 о том, что это слишком много строк.

' Variable Declaration

Dim Ws As Worksheet
Set Ws = Sheets("Universe")
Dim WorksheetNumber As Integer
WorksheetNumber = 1

'Open Workbook2
Workbooks.Open "Workbook2"

' Create Do Loop
    ' Create New Worksheet in Workbook1
ThisWorkbook.Activate
Ws.Range("B11").Select
Do While ActiveCell.Value <> ""
    intTimes = intTimes + 1

    If ActiveCell.Value > 0 Then

        ' Create Output Sheet
        With ThisWorkbook.Sheets.Add(, ActiveSheet)
            Do
                .Name = WorksheetNumber
                If Err = 1004 Then
                    WorksheetNumber = WorksheetNumber + 1
                    Err.Clear
                Else
                    Exit Do
                End If
                DoEvents
            Loop
        End With

        ' Enter Value into Workbook2 from Workbook1
        ThisWorkbook.Sheets("Universe").Range("O11").Copy Destination:=Workbooks("Workbook2").Sheets("Model").Range("E9")

        ' Copy and Paste Column D from Workbook2 to Workbook1
        Workbooks("Workbook2").Worksheets("Model").Range("D14:D500000").Copy
        Workbooks("ThisWorkbook").Worksheets("NEW TAB").Range("D2").PasteSpecial Paste:=xlPasteValues

        'Copy and Paste Column G from Workbook 2 to Workbook1
        Workbooks("Workbook2").Worksheets("Model").Range("G14:G500000").Copy
        Workbooks("ThisWorkbook").Worksheets("NEW TAB").Range("E2").PasteSpecial Paste:=xlPasteValues

        'Copy and Paste Remaining Details from Workbook2 to Workbook1
        Workbooks("Workbook2").Worksheets("Model").Range("L14:U500000").Copy
        Workbooks("ThisWorkbook").Worksheets("NEW TAB").Range("F2").PasteSpecial Paste:=xlPasteValues

    End If

    ActiveCell.Offset(1, 0).Select

    If ActiveCell.Value = "" Then
        intTimes = 0

    End If

Loop

Ожидаемый результат заключается в том, что при каждом запуске модели будет создаваться новая вкладка, в которую каждый раз вставляются выходные данные модели. Будет создано до 500 новых вкладок (которые затем необходимо будет объединить в одну вкладку).

...