Добрый вечер, не могу понять, как выбрать файл для дальнейшей обработки
У меня есть два кода(два первых в примере ниже), которые выдают путь к файлу, а мне нужно только имя файла, без пути
[vba]
Код
Sub AttachFile_test() ' пример использования Filename$ = GetFilePath() If Filename$ = "" Then Exit Sub MsgBox "Выбран файл: " & Filename$ End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:\", _ Optional ByVal FilterDescription As String = "Файлы счетов", _ Optional ByVal FilterExtention As String = "*.*") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1)
folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With End Function Sub fffff()
Dim wb2 As Workbook Dim myPath2 As String Dim myFile2 As String Dim myExtension2 As String
Set wb_ = GetObject(Filename$) ' сюда хочу передать название имени выбранного файла, чтобы в условный файл Вася.xlxx из него заполнились данные With wb_.Sheets("Лист1")
Это мне нужно, чтобы в sub fffff я смог проставить значение из этого выбранного файла.
Кто - нибудь может мне помочь? Ибо массово из прописанной или руками указанной папки через Do While Loop я могу использовать все файлы, а вот однократное целеуказание на работу с одним из этих файлов как сделать, не могу понять... Подскажите, пожалуйста, как это сделать.
Добрый вечер, не могу понять, как выбрать файл для дальнейшей обработки
У меня есть два кода(два первых в примере ниже), которые выдают путь к файлу, а мне нужно только имя файла, без пути
[vba]
Код
Sub AttachFile_test() ' пример использования Filename$ = GetFilePath() If Filename$ = "" Then Exit Sub MsgBox "Выбран файл: " & Filename$ End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:\", _ Optional ByVal FilterDescription As String = "Файлы счетов", _ Optional ByVal FilterExtention As String = "*.*") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1)
folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With End Function Sub fffff()
Dim wb2 As Workbook Dim myPath2 As String Dim myFile2 As String Dim myExtension2 As String
Set wb_ = GetObject(Filename$) ' сюда хочу передать название имени выбранного файла, чтобы в условный файл Вася.xlxx из него заполнились данные With wb_.Sheets("Лист1")
Это мне нужно, чтобы в sub fffff я смог проставить значение из этого выбранного файла.
Кто - нибудь может мне помочь? Ибо массово из прописанной или руками указанной папки через Do While Loop я могу использовать все файлы, а вот однократное целеуказание на работу с одним из этих файлов как сделать, не могу понять... Подскажите, пожалуйста, как это сделать.ant6729
Сообщение отредактировал ant6729 - Суббота, 18.11.2017, 18:44
Dim GetFilePath As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Sub GetFilePath = .SelectedItems(1) folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With
Filename$ = GetFilePath
If Filename$ = "" Then Exit Sub MsgBox "Выбран файл: " & Filename$
myPath2 = "G:\" myExtension2 = "Название файла, в который парсим.xlsx" myFile2 = Dir(myPath2 & myExtension2)
Set wb = Workbooks.Open(Filename:=myPath2 & myFile2)
Dim wb_ As Workbook Dim lc As Variant
fn_ = Dir(Filename$, vbNormal) On Error Resume Next Set wb_ = GetObject(fn_) On Error Resume Next
With wb_.Sheets("Название листа книги, с которого парсим")
Dim GetFilePath As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Sub GetFilePath = .SelectedItems(1) folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With
Filename$ = GetFilePath
If Filename$ = "" Then Exit Sub MsgBox "Выбран файл: " & Filename$
myPath2 = "G:\" myExtension2 = "Название файла, в который парсим.xlsx" myFile2 = Dir(myPath2 & myExtension2)
Set wb = Workbooks.Open(Filename:=myPath2 & myFile2)
Dim wb_ As Workbook Dim lc As Variant
fn_ = Dir(Filename$, vbNormal) On Error Resume Next Set wb_ = GetObject(fn_) On Error Resume Next
With wb_.Sheets("Название листа книги, с которого парсим")
Просмотрел и предыдущие посты и этот и чё то, сложно понять что надо то. Набросал наугад короткий пример, а тут уже и собственное решение появилось. Ну для примера и дальнейшего развития сброшу. [vba]
Код
Sub WWWWW() Dim iFail$, iPath$, iRash$, X Application.ScreenUpdating = 0 iPath = "D:\000\" 'Указываем свой путь 'iPath = ThisWorkbook.Path & "\" 'если рабочий файл в этой же папке iFail = "111" 'имя файла. можно взять из ячейки - iFail = range("A1") iRash = ".xls" Application.Workbooks.Open Filename:=iPath & iFail & iRash 'открываем найденный файл With Workbooks(iFail).Sheets(1) 'берем данные из него всеми известными способами X = Range("B1") ' данные End With Workbooks(iFail).Close 'закрываем найденный файл Range("B1") = X 'пишем данные в рабочий файл Application.ScreenUpdating = 1 End Sub
[/vba]
Просмотрел и предыдущие посты и этот и чё то, сложно понять что надо то. Набросал наугад короткий пример, а тут уже и собственное решение появилось. Ну для примера и дальнейшего развития сброшу. [vba]
Код
Sub WWWWW() Dim iFail$, iPath$, iRash$, X Application.ScreenUpdating = 0 iPath = "D:\000\" 'Указываем свой путь 'iPath = ThisWorkbook.Path & "\" 'если рабочий файл в этой же папке iFail = "111" 'имя файла. можно взять из ячейки - iFail = range("A1") iRash = ".xls" Application.Workbooks.Open Filename:=iPath & iFail & iRash 'открываем найденный файл With Workbooks(iFail).Sheets(1) 'берем данные из него всеми известными способами X = Range("B1") ' данные End With Workbooks(iFail).Close 'закрываем найденный файл Range("B1") = X 'пишем данные в рабочий файл Application.ScreenUpdating = 1 End Sub
Но в этой конкретной ситуации я хотел "динамичный" код, на случай, если запрашиваемый файл предварительно будет каждый день формироваться в разные папки, то и адрес к нему придется постоянно прописывать в коде... а не хотелось бы... поэтому я подумал, что лучше с выбором
Равно, как и имя файла будет требоваться всегда разное и его тоже придется прописывать.
У меня остался последний рубикон: как из папки с многими файлами выбрать n ое количество и данные из них по очереди записывать в один и тот же файл. То есть с длинными очередями я решил(когда сразу все файлы из директории пишутся по очереди в файл) Помогли тут, спасибо. Решил короткими очередями, когда один из многих Сейчас хочу понять, как несколько из многих. Но это потом. Спасибо за Ваш вариант!
Ну, да... у Вас поменьше кода...конечно
Но в этой конкретной ситуации я хотел "динамичный" код, на случай, если запрашиваемый файл предварительно будет каждый день формироваться в разные папки, то и адрес к нему придется постоянно прописывать в коде... а не хотелось бы... поэтому я подумал, что лучше с выбором
Равно, как и имя файла будет требоваться всегда разное и его тоже придется прописывать.
У меня остался последний рубикон: как из папки с многими файлами выбрать n ое количество и данные из них по очереди записывать в один и тот же файл. То есть с длинными очередями я решил(когда сразу все файлы из директории пишутся по очереди в файл) Помогли тут, спасибо. Решил короткими очередями, когда один из многих Сейчас хочу понять, как несколько из многих. Но это потом. Спасибо за Ваш вариант!ant6729
Как-то Вы всё усложняете... Вот совершенно Вам не нужно имя файла (отдельно), если Вы его выбирает в диалоге, чтоб потом открыть. А чтоб "как несколько из многих" - совсем чуть осталось доработать: [vba]
Код
Sub AttachFile_test() ' пример использования Filenames = GetFilePath() End Sub
Private Sub test(s) MsgBox "Выбран файл: " & s End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:\", _ Optional ByVal FilterDescription As String = "Файлы счетов", _ Optional ByVal FilterExtention As String = "*.*") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention .AllowMultiSelect = True
If .Show <> -1 Then Exit Function For Each vrtSelectedItem In .SelectedItems Call test(vrtSelectedItem) Next vrtSelectedItem
folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With End Function
[/vba]
Выбирайте в диалоге сколько нужно файлов (только сперва для теста пару тройку, не больше )
Как-то Вы всё усложняете... Вот совершенно Вам не нужно имя файла (отдельно), если Вы его выбирает в диалоге, чтоб потом открыть. А чтоб "как несколько из многих" - совсем чуть осталось доработать: [vba]
Код
Sub AttachFile_test() ' пример использования Filenames = GetFilePath() End Sub
Private Sub test(s) MsgBox "Выбран файл: " & s End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:\", _ Optional ByVal FilterDescription As String = "Файлы счетов", _ Optional ByVal FilterExtention As String = "*.*") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention .AllowMultiSelect = True
If .Show <> -1 Then Exit Function For Each vrtSelectedItem In .SelectedItems Call test(vrtSelectedItem) Next vrtSelectedItem
folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With End Function
[/vba]
Выбирайте в диалоге сколько нужно файлов (только сперва для теста пару тройку, не больше )Hugo
Ну, я думаю, еще один из вариантов - создать на листе список папок, если известно в какие из них будут сброшены запрашиваемые файлы. Выбрав папку из списка, создать макросом список файлов этой папки. Отметить нужный файл для обработки (или несколько файлов), тискаем кнопку и вуаля. Если такой вариант заинтересует, набросаю пример.
Ну, я думаю, еще один из вариантов - создать на листе список папок, если известно в какие из них будут сброшены запрашиваемые файлы. Выбрав папку из списка, создать макросом список файлов этой папки. Отметить нужный файл для обработки (или несколько файлов), тискаем кнопку и вуаля. Если такой вариант заинтересует, набросаю пример. Wasilich
Сообщение отредактировал Wasilich - Суббота, 18.11.2017, 23:34
Не, ну, тогда их надо туда парсить... это тоже отдельный код выводить список папок на лист из директории Но, конечно, интересно было бы посмотреть методов клика Hugo Только этот кусочек [vba]
Код
If .Show <> -1 Then Exit Function For Each vrtSelectedItem In .SelectedItems Call test(vrtSelectedItem) Next vrtSelectedItem
Не, ну, тогда их надо туда парсить... это тоже отдельный код выводить список папок на лист из директории Но, конечно, интересно было бы посмотреть методов клика Hugo Только этот кусочек [vba]
Код
If .Show <> -1 Then Exit Function For Each vrtSelectedItem In .SelectedItems Call test(vrtSelectedItem) Next vrtSelectedItem
отдельный код выводить список папок на лист из директории
Вот не понятно мне: - Файлы формируются каждый день в разные папки. А разные папки, тоже, что ли, формируются каждый день новые? А как же вы определяете, какой/какие файлы в какой папке надо обработать? Я надеялся что папки постоянны. В таком случае их список можно создать вручную. Что то типа так. Пример для развития.
отдельный код выводить список папок на лист из директории
Вот не понятно мне: - Файлы формируются каждый день в разные папки. А разные папки, тоже, что ли, формируются каждый день новые? А как же вы определяете, какой/какие файлы в какой папке надо обработать? Я надеялся что папки постоянны. В таком случае их список можно создать вручную. Что то типа так. Пример для развития.Wasilich