Как использовать Excel VBA для копирования листа из книги, выбранной с помощью файлового браузера?

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

По сути, все, что я хочу сделать, - это скопировать лист из другой книги (тот, что со вчерашним отчетом) в мою активную книгу (ту, что с сегодняшним отчетом), используя файловый браузер.

Метод Application.GetOpenFilename открывает файловый браузер, как я хочу, но я не могу понять, как использовать строку каталога, которую он возвращает, для копирования на рабочем листе, который я хочу.

Вот код, который я использовал:

Sub Macro5()

Dim todayWBName As String
Dim yesterdayWB As Workbook
Set todayWB = ActiveWorkbook
todayWBName = todayWB.Name

'open file from last business day
    yesterdayWBName = Application.GetOpenFilename( _
                      Title:="Select backorder file from last business day", _
                      MultiSelect:=False)
    If yesterdayWBName = False Then
        Exit Sub
    Else
        End If
    Workbooks.Open yesterdayWBName
    Set yesterdayWB = ActiveWorkbook
    todayWB.Activate

'copy in yesterday's info
    yesterdayWB(1).Copy After:=todayWB.Sheets(1)
    yesterdayWB.Close
    Sheets("Sheet 1 (2)").Name = "YesterdayResolution"
    Sheets(1).Activate

End Sub

Если бы кто-нибудь мог сказать мне, что я делаю здесь неправильно, я был бы очень благодарен.

Заранее спасибо.

1 ответ

Решение

Попробуй это. Используйте строковый результат из GetOpenFileName и передать его непосредственно Workbooks.Open метод, обрабатывающий возвращаемое значение как объект (рабочую книгу), который присваивается yesterdayWB объект.

Также у вас есть ошибка:

yesterdayWB(1).Copy After:=todayWB.Sheets(1)

Объект книги не является подписным, что вы имели в виду (я думаю) yesterdayWB.Worksheets(1).Copy ...

Sub Macro5()

    Dim yesterdayWB As Workbook
    Dim yesterdayWBName As String
    Dim todayWB As Workbook

    Set todayWB = ActiveWorkbook

    'open file from last business day
    yesterdayWBName = Application.GetOpenFilename( _
                      Title:="Select backorder file from last business day", _
                      MultiSelect:=False)
    If yesterdayWBName = False Then
        Exit Sub
    End If
    Set yesterdayWB = Workbooks.Open(yesterdayWBName)

    'copy in yesterday's info
    yesterdayWB.Worksheets(1).Copy After:=todayWB.Sheets(1)
    yesterdayWB.Close
    ' the sheet you copied is at index "2" because you put it after Sheets(1)
    todayWB.Sheets(2).Name = "YesterdayResolution"
    todayWB.Sheets(1).Activate

End Sub
Другие вопросы по тегам