Как использовать 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