#vba #select #directory
#vba #выберите #каталог
Вопрос:
Пытаясь заставить этот VBA в Excel открыть определенную папку, чтобы выбрать файлы Excel для объединения, я, кажется, хожу по кругу, как обычно…..
Sub mergeFiles()
'Merges all files in a folder to a main file.
'Define variables:
Dim numberOfFilesChosen, i As Integer
Dim tempFileDialog As fileDialog
Dim mainWorkbook, sourceWorkbook As Workbook
Dim tempWorkSheet As Worksheet
Set mainWorkbook = Application.ActiveWorkbook
Set tempFileDialog = Application.fileDialog(msoFileDialogFilePicker)
'Allow the user to select multiple workbooks
tempFileDialog.AllowMultiSelect = True
numberOfFilesChosen = tempFileDialog.Show
'Loop through all selected workbooks
For i = 1 To tempFileDialog.SelectedItems.Count
'Open each workbook
Workbooks.Open tempFileDialog.SelectedItems(i)
Set sourceWorkbook = ActiveWorkbook
'Copy each worksheet to the end of the main workbook
For Each tempWorkSheet In sourceWorkbook.Worksheets
tempWorkSheet.Copy after:=mainWorkbook.Sheets(mainWorkbook.Worksheets.Count)
Next tempWorkSheet
'Close the source workbook
sourceWorkbook.Close
Next i
End Sub
Любые идеи о том, как изменить код, чтобы использовать определенный путь для папки, были бы высоко оценены.
Вот надеюсь
Ответ №1:
Пожалуйста, попробуйте следующий код:
Sub mergeFilesBis()
'Define variables:
Dim i As Integer, tempFileDialog As FileDialog
Dim mainWorkbook, sourceWorkbook As Workbook, tempWorkSheet As Worksheet
Dim initialFolder As String
initialFolder = "C:"
Set mainWorkbook = Application.ActiveWorkbook
Set tempFileDialog = Application.FileDialog(msoFileDialogFilePicker)
'Allow the user to select multiple workbooks
With tempFileDialog
.AllowMultiSelect = True
.InitialFileName = initialFolder
If Not .Show = -1 Then Exit Sub
End With
'Loop through all selected workbooks
For i = 1 To tempFileDialog.SelectedItems.count
Set sourceWorkbook = Workbooks.Open(tempFileDialog.SelectedItems(i))
'Copy each worksheet to the end of the main workbook
For Each tempWorkSheet In sourceWorkbook.Worksheets
tempWorkSheet.Copy After:=mainWorkbook.sheets(mainWorkbook.Worksheets.count)
Next tempWorkSheet
'Close the source workbook
sourceWorkbook.Close
Next i
End Sub
Комментарии:
1. Привет, спасибо за ваш вклад, но это все равно приводит к открытию окна просмотра в последней открытой папке, а не в конкретной папке, которую я хочу, чтобы окно отображалось.
2. @Eric the Viking: Но где в вашем коде вы пытаетесь установить начальную папку открытой? Можете ли вы лучше объяснить (на словах), в чем ваша проблема, на самом деле? Вам нужно, чтобы диалоговое окно открывалось в определенной папке? Если да, то в каком? VBA не может читать ваши мысли… Предполагалось, что вы будете просматривать, чтобы найти соответствующую папку.
3. Просто чтобы убедиться, что мой вопрос ясен, я импортирую серию отдельных книг в основную книгу. Отдельные книги были экспортированы из access в определенную папку, которая также содержит основную книгу. Что я хочу, чтобы VBA делал, это всегда открывал папку с экспортированными файлами в ней, вместо того, чтобы переходить к последнему открытию папки и ожидать, что пользователь затем перейдет в нужную папку.
4. Я ценю, что я не сказал VBA перейти к этой конкретной папке, мне нужен правильный код, чтобы сообщить об этом, если вы понимаете, что я имею в виду.
5. @Eric the Viking: Я адаптировал код для открытия диалогового окна в определенной папке. Но вы должны «указать» коду, который является путем к этой папке , правильно заполнив переменную
initialFolder
. Убедитесь, что путь к папке заканчивается на «». Пожалуйста, протестируйте код и отправьте отзыв.