Базовый макрос, который я написал, открывает две рабочие книги (одну названную и сохраненную как положено, одну пустую) - почему? - PullRequest
0 голосов
/ 23 января 2019

Я написал базовый макрос (очень новый для VBA), который извлекает два столбца из рабочей книги и помещает их в новую рабочую книгу, которую я называю и сохраняю. Это работает нормально, но когда я запускаю его, он открывает и сохраняет один как предполагалось (например, «Портфель здравоохранения») и открывает (но не называет / не сохраняет) вторую пустую книгу (со стандартным именем «Книга №»). Ниже приведен фрагмент моего кода. Может ли кто-нибудь указать, почему это происходит? Спасибо

Sub CreateHealthcare()

Sheets("Health Care").Select

    With Application
        .SheetsInNewWorkbook = 1
        .Workbooks.Add
            With Workbooks.Add

                Workbooks("TVL Portfolio Creator.xlsm").Sheets("Health Care").Range("D:D").Copy
                .Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues

                Workbooks("TVL Portfolio Creator.xlsm").Sheets("Health Care").Range("E:E").Copy
                .Sheets(1).Range("B1").PasteSpecial Paste:=xlPasteValues

                .Sheets(1).Name = "Health Care Portfolio"

            End With

        ActiveWorkbook.SaveAs Filename:="C:\Users\example\Health Care Portfolio" & Format(Now(), " DDMMMYY") _
, FileFormat:=xlCSV, CreateBackup:=False

    End With

End Sub

1 Ответ

0 голосов
/ 23 января 2019

Мне кажется, вы намереваетесь создать и сохранить только 1 новую книгу.Ваш код содержит оператор workbooks.add дважды.Итак, первое решение должно решить вашу проблему.

Если это не сработает, я бы рекомендовал объявить Workbook object и сослаться на это.

Кроме того, строка Sheets("Health Care").Select на самом деле ничего не делает, так как ваши операторы копирования содержат явную ссылку.

Ваш код будет выглядеть примерно так:

Sub CreateHealthcare()
Dim NewBook as Workbook

    Application.SheetsInNewWorkbook = 1

    Set NewBook = Workbooks.Add

            With NewBook

                Workbooks("TVL Portfolio Creator.xlsm").Sheets("Health Care").Range("D:D").Copy
                .Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues

                Workbooks("TVL Portfolio Creator.xlsm").Sheets("Health Care").Range("E:E").Copy
                .Sheets(1).Range("B1").PasteSpecial Paste:=xlPasteValues

                .Sheets(1).Name = "Health Care Portfolio"

            End With

        NewBook.SaveAs Filename:="C:\Users\example\Health Care Portfolio" & Format(Now(), " DDMMMYY") _
, FileFormat:=xlCSV, CreateBackup:=False

    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...