Выбор названия файлов в листбокс в процедуре
ant6729
Дата: Среда, 10.10.2018, 15:52 |
Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация:
2
±
Замечаний:
40% ±
Excel 2010
Всем привет! Подскажите, пожалуйста, как сделать, чтобы при мультиселекте файлов они добавлялись в листбокс, а потом программно выбирались?
Всем привет! Подскажите, пожалуйста, как сделать, чтобы при мультиселекте файлов они добавлялись в листбокс, а потом программно выбирались? ant6729
К сообщению приложен файл:
25.xlsm
(21.0 Kb)
Ответить
Сообщение Всем привет! Подскажите, пожалуйста, как сделать, чтобы при мультиселекте файлов они добавлялись в листбокс, а потом программно выбирались? Автор - ant6729 Дата добавления - 10.10.2018 в 15:52
Roman777
Дата: Среда, 10.10.2018, 16:25 |
Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация:
127
±
Замечаний:
0% ±
Excel 2007, Excel 2013
ant6729 , думаю, что при использовании Application.FileDialog это врят ли у Вас выйдет. Зато всегда можно поставить фильтр и попробовать отображать только те файлы, которые Вас интересуют.
ant6729 , думаю, что при использовании Application.FileDialog это врят ли у Вас выйдет. Зато всегда можно поставить фильтр и попробовать отображать только те файлы, которые Вас интересуют.Roman777
Много чего не знаю!!!!
Ответить
Сообщение ant6729 , думаю, что при использовании Application.FileDialog это врят ли у Вас выйдет. Зато всегда можно поставить фильтр и попробовать отображать только те файлы, которые Вас интересуют.Автор - Roman777 Дата добавления - 10.10.2018 в 16:25
ant6729
Дата: Среда, 10.10.2018, 16:59 |
Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация:
2
±
Замечаний:
40% ±
Excel 2010
Вообще в идеале хочу понять как зайти в папку выбрать нужные файлы Они втянулись бы как проставленные А остальные подтянулись бы туда же как не проставленные
Вообще в идеале хочу понять как зайти в папку выбрать нужные файлы Они втянулись бы как проставленные А остальные подтянулись бы туда же как не проставленные ant6729
Ответить
Сообщение Вообще в идеале хочу понять как зайти в папку выбрать нужные файлы Они втянулись бы как проставленные А остальные подтянулись бы туда же как не проставленные Автор - ant6729 Дата добавления - 10.10.2018 в 16:59
Roman777
Дата: Среда, 10.10.2018, 17:12 |
Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация:
127
±
Замечаний:
0% ±
Excel 2007, Excel 2013
ant6729 , Как Вариант: Всё так же пользуетесь FileDialog-ом. Выбираете необходимые файлики. Уже знаете путь до корневой выбранной папки. Пробегаем по папке с файлами (возможно с помощью ф-ии Dir) - получим массив файлов (возможно и папок). Этот массив фильтруем (избавляемся от ненужных элементов). Получаем общий список необходимых файлов. Сравниваем SelectedItem и исключаем их из найденного общего массива. Ну а далее - SelectedItem расставляет птички, а оставшиеся элементы массива - остальные элементы без проставленной птички. Быстро, с ходу Ваш подход исправить не смогу сейчас. Но на мысль, мб навёл, надеюсь)
ant6729 , Как Вариант: Всё так же пользуетесь FileDialog-ом. Выбираете необходимые файлики. Уже знаете путь до корневой выбранной папки. Пробегаем по папке с файлами (возможно с помощью ф-ии Dir) - получим массив файлов (возможно и папок). Этот массив фильтруем (избавляемся от ненужных элементов). Получаем общий список необходимых файлов. Сравниваем SelectedItem и исключаем их из найденного общего массива. Ну а далее - SelectedItem расставляет птички, а оставшиеся элементы массива - остальные элементы без проставленной птички. Быстро, с ходу Ваш подход исправить не смогу сейчас. Но на мысль, мб навёл, надеюсь)Roman777
Много чего не знаю!!!!
Ответить
Сообщение ant6729 , Как Вариант: Всё так же пользуетесь FileDialog-ом. Выбираете необходимые файлики. Уже знаете путь до корневой выбранной папки. Пробегаем по папке с файлами (возможно с помощью ф-ии Dir) - получим массив файлов (возможно и папок). Этот массив фильтруем (избавляемся от ненужных элементов). Получаем общий список необходимых файлов. Сравниваем SelectedItem и исключаем их из найденного общего массива. Ну а далее - SelectedItem расставляет птички, а оставшиеся элементы массива - остальные элементы без проставленной птички. Быстро, с ходу Ваш подход исправить не смогу сейчас. Но на мысль, мб навёл, надеюсь)Автор - Roman777 Дата добавления - 10.10.2018 в 17:12
ant6729
Дата: Среда, 10.10.2018, 20:33 |
Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация:
2
±
Замечаний:
40% ±
Excel 2010
Кажется, в том направлении я делал (закомментировал) : добавляя в коллекции названия файлов, а потом сравнивал их, но как поставить птицы автоматически, я так и не понял. Потому что если бы я понял синтаксис, как ставить, то тогда в условии на сравнение я бы, возможно, прописал это. Но здесь затык.
Кажется, в том направлении я делал (закомментировал) : добавляя в коллекции названия файлов, а потом сравнивал их, но как поставить птицы автоматически, я так и не понял. Потому что если бы я понял синтаксис, как ставить, то тогда в условии на сравнение я бы, возможно, прописал это. Но здесь затык. ant6729
Ответить
Сообщение Кажется, в том направлении я делал (закомментировал) : добавляя в коллекции названия файлов, а потом сравнивал их, но как поставить птицы автоматически, я так и не понял. Потому что если бы я понял синтаксис, как ставить, то тогда в условии на сравнение я бы, возможно, прописал это. Но здесь затык. Автор - ant6729 Дата добавления - 10.10.2018 в 20:33
ant6729
Дата: Среда, 10.10.2018, 20:56 |
Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация:
2
±
Замечаний:
40% ±
Excel 2010
[vba]Код
Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_ Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim coll As New Collection, coll2 As New Collection Set coll = New Collection Set coll2 = New Collection strPath = "H:\Ìàñòåð îò÷åòîâ\Îò÷åò — êîïèÿ\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) coll.Add Dir(fn_) Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files Me.lstFiles.AddItem fsoFile.Name coll2.Add fsoFile.Name Next End With End Sub
[/vba] Почти так, как надо, но дублирует вывод
[vba]Код
Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_ Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim coll As New Collection, coll2 As New Collection Set coll = New Collection Set coll2 = New Collection strPath = "H:\Ìàñòåð îò÷åòîâ\Îò÷åò — êîïèÿ\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) coll.Add Dir(fn_) Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files Me.lstFiles.AddItem fsoFile.Name coll2.Add fsoFile.Name Next End With End Sub
[/vba] Почти так, как надо, но дублирует вывод ant6729
Сообщение отредактировал ant6729 - Среда, 10.10.2018, 22:03
Ответить
Сообщение [vba]Код
Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_ Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim coll As New Collection, coll2 As New Collection Set coll = New Collection Set coll2 = New Collection strPath = "H:\Ìàñòåð îò÷åòîâ\Îò÷åò — êîïèÿ\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) coll.Add Dir(fn_) Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files Me.lstFiles.AddItem fsoFile.Name coll2.Add fsoFile.Name Next End With End Sub
[/vba] Почти так, как надо, но дублирует вывод Автор - ant6729 Дата добавления - 10.10.2018 в 20:56
RAN
Дата: Среда, 10.10.2018, 21:21 |
Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Как беее без блинов и FSO [vba]Код
Private Sub UserForm_Activate() With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) Next End With For i = 0 To Me.lstFiles.ListCount - 1 Me.lstFiles.Selected(i) = True Next End Sub
[/vba]
Как беее без блинов и FSO [vba]Код
Private Sub UserForm_Activate() With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) Next End With For i = 0 To Me.lstFiles.ListCount - 1 Me.lstFiles.Selected(i) = True Next End Sub
[/vba] RAN
Быть или не быть, вот в чем загвоздка!
Ответить
Сообщение Как беее без блинов и FSO [vba]Код
Private Sub UserForm_Activate() With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) Next End With For i = 0 To Me.lstFiles.ListCount - 1 Me.lstFiles.Selected(i) = True Next End Sub
[/vba] Автор - RAN Дата добавления - 10.10.2018 в 21:21
ant6729
Дата: Среда, 10.10.2018, 22:19 |
Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация:
2
±
Замечаний:
40% ±
Excel 2010
.
Сообщение отредактировал ant6729 - Четверг, 11.10.2018, 00:04
Ответить
Сообщение . Автор - ant6729 Дата добавления - 10.10.2018 в 22:19
ant6729
Дата: Четверг, 11.10.2018, 00:03 |
Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация:
2
±
Замечаний:
40% ±
Excel 2010
[vba]Код
Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_, i, k Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim coll As New Collection, coll2 As New Collection Set coll = New Collection Set coll2 = New Collection strPath = "H:\Ìàñòåð îò÷åòîâ\Îò÷åò — êîïèÿ\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) coll.Add Dir(fn_) Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files coll2.Add fsoFile.Name Next fsoFile For k = 1 To coll2.Count For i = 1 To coll.Count On Error Resume Next Debug.Print coll2(k) & " " & coll(i) If coll(i) <> coll2(k) Then Me.lstFiles.AddItem coll2(k) Next i Next k End With End Sub
[/vba] Логики на одно i хватит на два и более выбранных документов нужно что-то другое
[vba]Код
Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_, i, k Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim coll As New Collection, coll2 As New Collection Set coll = New Collection Set coll2 = New Collection strPath = "H:\Ìàñòåð îò÷åòîâ\Îò÷åò — êîïèÿ\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) coll.Add Dir(fn_) Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files coll2.Add fsoFile.Name Next fsoFile For k = 1 To coll2.Count For i = 1 To coll.Count On Error Resume Next Debug.Print coll2(k) & " " & coll(i) If coll(i) <> coll2(k) Then Me.lstFiles.AddItem coll2(k) Next i Next k End With End Sub
[/vba] Логики на одно i хватит на два и более выбранных документов нужно что-то другое ant6729
Ответить
Сообщение [vba]Код
Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_, i, k Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim coll As New Collection, coll2 As New Collection Set coll = New Collection Set coll2 = New Collection strPath = "H:\Ìàñòåð îò÷åòîâ\Îò÷åò — êîïèÿ\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) coll.Add Dir(fn_) Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files coll2.Add fsoFile.Name Next fsoFile For k = 1 To coll2.Count For i = 1 To coll.Count On Error Resume Next Debug.Print coll2(k) & " " & coll(i) If coll(i) <> coll2(k) Then Me.lstFiles.AddItem coll2(k) Next i Next k End With End Sub
[/vba] Логики на одно i хватит на два и более выбранных документов нужно что-то другое Автор - ant6729 Дата добавления - 11.10.2018 в 00:03
ant6729
Дата: Четверг, 11.10.2018, 12:06 |
Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация:
2
±
Замечаний:
40% ±
Excel 2010
Да, я сделал это. Шчасцю нет предела. Ура. Спасибо всем, кто не подсказал) Совершенно искренне говорю. [vba]Код
[code][code] Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_ Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim dict As Scripting.Dictionary Set dict = New Scripting.Dictionary strPath = "H:\ааа\Отчет\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files With dict If Not .Exists(fsoFile.Name) Then Me.lstFiles.AddItem fsoFile.Name End With Next fsoFile End With End Sub
[/code][/code][/vba] Словари оказались богаче на методы...
Да, я сделал это. Шчасцю нет предела. Ура. Спасибо всем, кто не подсказал) Совершенно искренне говорю. [vba]Код
[code][code] Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_ Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim dict As Scripting.Dictionary Set dict = New Scripting.Dictionary strPath = "H:\ааа\Отчет\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files With dict If Not .Exists(fsoFile.Name) Then Me.lstFiles.AddItem fsoFile.Name End With Next fsoFile End With End Sub
[/code][/code][/vba] Словари оказались богаче на методы... ant6729
Сообщение отредактировал ant6729 - Четверг, 11.10.2018, 12:14
Ответить
Сообщение Да, я сделал это. Шчасцю нет предела. Ура. Спасибо всем, кто не подсказал) Совершенно искренне говорю. [vba]Код
[code][code] Option Explicit Private Sub btnBrowse_Click() Call GetFilesList End Sub Sub GetFilesList() Dim strPath, x, fn_ Dim fso As New FileSystemObject, fsoFolder As Folder, fsoFile As File Dim dict As Scripting.Dictionary Set dict = New Scripting.Dictionary strPath = "H:\ааа\Отчет\" Set fsoFolder = fso.GetFolder(strPath) Me.lstFiles.Clear With Application.FileDialog(msoFileDialogFilePicker) .Show For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next For Each fsoFile In fsoFolder.Files With dict If Not .Exists(fsoFile.Name) Then Me.lstFiles.AddItem fsoFile.Name End With Next fsoFile End With End Sub
[/code][/code][/vba] Словари оказались богаче на методы... Автор - ant6729 Дата добавления - 11.10.2018 в 12:06
Roman777
Дата: Четверг, 11.10.2018, 12:15 |
Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация:
127
±
Замечаний:
0% ±
Excel 2007, Excel 2013
ant6729 , я бы тоже словарями делал))), не понимаю, зачем Вы 2 раза гоняете цикл? [vba]Код
For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next
[/vba] если можно сразу: [vba]Код
For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Me.lstFiles.Selected(Me.lstFiles.ListCount - 1) = True Next
[/vba]
ant6729 , я бы тоже словарями делал))), не понимаю, зачем Вы 2 раза гоняете цикл? [vba]Код
For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next
[/vba] если можно сразу: [vba]Код
For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Me.lstFiles.Selected(Me.lstFiles.ListCount - 1) = True Next
[/vba]Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Четверг, 11.10.2018, 12:18
Ответить
Сообщение ant6729 , я бы тоже словарями делал))), не понимаю, зачем Вы 2 раза гоняете цикл? [vba]Код
For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Next For x = 0 To lstFiles.ListCount - 1 If lstFiles.Selected(x) = False Then lstFiles.Selected(x) = True Next
[/vba] если можно сразу: [vba]Код
For Each fn_ In .SelectedItems Me.lstFiles.AddItem Dir(fn_) dict.Add Dir(fn_), 0 Me.lstFiles.Selected(Me.lstFiles.ListCount - 1) = True Next
[/vba]Автор - Roman777 Дата добавления - 11.10.2018 в 12:15