2017-02-13 4 views
0

Я ищу способ открыть существующую книгу, а затем, чтобы мой код мог работать в той же книге.Открытие книги Excel через VBA

У меня нет больших знаний по VBA, и я надеялся, что кто-то сможет помочь. Благодаря моим исследованиям я знаю, что вы можете открыть книгу и запустить свой код в той же книге, если сопоставление с файлом будет вставлено в макрокод. Я хочу иметь возможность использовать открытое диалоговое окно, чтобы выбрать его. Этот код:

Option Explicit 
Private Sub CommandButton1_Click() 

Dim directory As String, fileName As String, sheet As Worksheet, total As Integer, fd As Office.FileDialog 

Set fd = Application.FileDialog(msoFileDialogFilePicker) 

With fd 

.AllowMultiSelect = False 

.Title = "Please select the file." 

.Filters.Clear 
.Filters.Add "Excel 2003", "*.xls?" 

If .Show = True Then 
fileName = Dir(.SelectedItems(1)) 

End If 
End With 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

Workbooks.Open (fileName) 

For Each sheet In Workbooks(fileName).Worksheets 
total = Workbooks("import-sheets.xlsm").Worksheets.Count 
Workbooks(fileName).Worksheets(sheet.Name).Copy _ 
after:=Workbooks("import-sheets.xlsm").Worksheets(total) 
Next sheet 

Workbooks(fileName).Close 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 

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

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

ответ

0

Синтаксис выглядит неправильно, но я удивлен, что он не генерирует сообщение об ошибке. Попробуйте назначить вновь открытую книгу на переменную, а затем ссылаться на него через это, как это, например:

Dim ImportBook as Workbook 
Dim ExportBook as Workbook 

Set ImportBook = Workbooks.Open (fileName) 
Set ExportBook = Workbooks.Open ("import-sheets.xlsm") 

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

Может ли метод Workbook.SaveAs быть более уместным?