Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
2 / 3 / 0
Регистрация: 17.02.2016
Сообщений: 75
1

Создание списка всех файлов каталога

04.03.2020, 15:12. Показов 798. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время всем!
Прошу помочь советом:

Как сделать макрос, который бы создавал список всех файлов каталога рабстола(C:\Users\xxxx\Desktop) в документе ВОРДа примерно в таком формате:

Изображение_значка_файла1 имя_файла1
Изображение_значка_файла2 имя_файла2
……………….. 
Изображение_значка_файлаN имя_файлаN

Можно и табличной форме.
Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2020, 15:12
Ответы с готовыми решениями:

Открытие по очереди всех файлов из каталога
Здравствуйте, подскажите как правильно написать строку Application.Workbooks.Open...

Открытие по очереди всех текстовых файлов из каталога
Доброго времени суток! Надо сделать перебор всех текстовых файлов в указанной папке. Я сделал так:...

Открытие по очереди всех текстовых файлов из каталога
Доброго времени суток! Надо сделать перебор всех текстовых файлов в указанной папке. Я сделал так:...

Вывод списка всех файлов данного каталога
Составить программу по работе с файловой системой, которая обеспечивает ввод с клавиатуры названия...

11
841 / 472 / 79
Регистрация: 18.05.2016
Сообщений: 1,255
Записей в блоге: 4
04.03.2020, 15:20 2
ухты. изображение значка загружается через WinAPI с нехилой такой функцией. оно точно вам надо?
а просто список файлов можно получить с помощью vbs:
Visual Basic
1
2
3
4
5
6
7
8
9
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = FSO.getfolder(SourceFolderName) 
For Each FileItem In SourceFolder.Files
        debug.print FileItem.Name
        debug.print FileItem.Path
        debug.print FileItem.Size
        debug.print FileItem.DateCreated
        debug.print FileItem.DateLastModified
Next FileItem
0
oh my god
1454 / 793 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
04.03.2020, 17:05 3
А ведь можно и папку указать программно

Создание списка всех файлов каталога


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Sub Создание_списка_всех_файлов_каталога()
    '
    '
    '
    Dim v, i&
 
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Обзор"
        .ButtonName = "Выбрать папку"
        .Filters.Clear
        .InitialFileName = ""
        'При отмене выход из программы
        If .Show = 0 Then Exit Sub
        
        'Удаление прежних записей
        Range(Cells([a1].End(xlDown).Row, 1), Cells(1, [a1].End(xlToRight).Column)).ClearContents
    
        'Создание новых
        For Each v In Split("Имя файла\Размер\Тип файла\Полный путь", "\")
            i = i + 1: Cells(1, i) = v
        Next
        i = 1
        For Each v In CreateObject("Scripting.FileSystemObject").getfolder(.SelectedItems(1)).Files
            i = i + 1
            Cells(i, 1) = v.Name
            Cells(i, 2) = v.Size
            Cells(i, 3) = v.Type
            Cells(i, 4) = v.Path
        Next
    End With
 
End Sub
0
2 / 3 / 0
Регистрация: 17.02.2016
Сообщений: 75
04.03.2020, 17:42  [ТС] 4
------> / amd48
\ fever brain

Спасибо за участие, но это совсем не то что мне надо!
Мне вот именно надо, что бы были КАРТИНКИ ЗНАЧКОВ файлов+имя_файла !
0
841 / 472 / 79
Регистрация: 18.05.2016
Сообщений: 1,255
Записей в блоге: 4
05.03.2020, 07:06 5
Цитата Сообщение от TransGet Посмотреть сообщение
совсем не то что мне надо!
как получать список файлов, тебе показали. это уже половина, а не СОВСЕМ НЕ ТО
а насчёт иконок погугли например функцию
Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
0
2739 / 1714 / 778
Регистрация: 23.03.2015
Сообщений: 5,430
05.03.2020, 08:09 6
TransGet,

Сделай 2 строки в файле как пример и вышли....
0
109 / 60 / 27
Регистрация: 22.02.2018
Сообщений: 189
05.03.2020, 09:11 7
TransGet, как вариант сделать "свои" иконки и подставлять их в зависимости от расширения файла
0
2 / 3 / 0
Регистрация: 17.02.2016
Сообщений: 75
05.03.2020, 15:57  [ТС] 8
спасибо!
0
oh my god
1454 / 793 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
06.03.2020, 12:51 9
Немного погуглив, нашел похожее решение на vb-6, после нескольких доработок приспособил этот пример к vba
дело в том что у встроенных контролов офиса нет такого свойства hDC тоесть контекста рисования
эту проблему можно решить с помощью функции GetDC - естественно контрол при этом должен быть унаследованным

итак. вот этот пример:
накидываем на новую userform новый listbox и закидываем следующий код:
Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Option Explicit
Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Const HKEY_CLASSES_ROOT = &H80000000
Dim fls$(), file$, idx&
 
 
Private Sub ListBox1_Click()
    Dim hWndDC&, DC&, icn&
    On Error GoTo IconErr
    file = Left$(fls(ListBox1.ListIndex), InStr(fls(ListBox1.ListIndex), ",") - 1)
    idx = Val(Mid$(fls(ListBox1.ListIndex), InStr(fls(ListBox1.ListIndex), ",") + 1))
    icn = ExtractIcon(Application.Hinstance, file, idx)
 
    hWndDC = ListBox1.[_GethWnd]
    DC = GetDC(hWndDC)
 
    Debug.Print file, idx, icn, ListBox1.[_GethWnd]
 
    Call DrawIconEx(DC, 0, 0, icn, 32, 32, 0, 0, 3)
IconErr:
    ReleaseDC hWndDC, DC
End Sub
 
Private Sub UserForm_Initialize()
    Dim tp$, nm$, rc&, fnd&
    idx = 1
    fnd = 1
    tp = Space(255)
    'Перечисление всех расширений
    Do While RegEnumKey(HKEY_CLASSES_ROOT, idx, ByVal tp, 255) = 0
        If Left(tp, 1) <> "." Then
        Else
            'Сохранение информации об иконке
            ReDim Preserve fls(idx - 1)
            tp = Left(tp, InStr(tp, Chr(0)) - 1)
            'Получить имя расширения, (к примеру - .zip = WinZip)
            If RegOpenKey(HKEY_CLASSES_ROOT, ByVal tp, rc) = 0 Then
                nm = Space(255)
                Call RegQueryValueEx(rc, ByVal "", 0&, 1, ByVal nm, 255)
                If InStr(nm, Chr(0)) Then nm = Left(nm, InStr(nm, Chr(0)) - 1)
                Call RegCloseKey(rc)
                If Len(Trim(nm)) Then
                    'Поиск иконки по умолчанию для расширения
                    If RegOpenKey(HKEY_CLASSES_ROOT, nm & "\DefaultIcon\", rc) = 0 Then
                        file = Space(255)
                        Call RegQueryValueEx(rc, ByVal "", 0&, 1, ByVal file, 255)
                        If InStr(file, Chr(0)) Then file = Left(file, InStr(file, Chr(0)) - 1)
                        Call RegCloseKey(rc)
                        fls(fnd - 1) = file
                    End If
                End If
            
            End If
            ListBox1.AddItem Left(tp & Space(10), 10) & " - " & nm
            fnd = fnd + 1
        End If
        tp = Space(255)
        idx = idx + 1
    Loop
End Sub


В итоге должны вывестись ассоциации файлов в списке и их иконки, тоесть так-же как они зареганны в системе

Создание списка всех файлов каталога


тоесть у меня есть эта зарегестрированная программа которая отображенна в левом углу и которая ассоциируется с этим типом файла
2
oh my god
1454 / 793 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
06.03.2020, 13:25 10
Как уже писал Narimanych, сделай свои 2 строчки, вышли и посмотрим что будет получаться
0
2 / 3 / 0
Регистрация: 17.02.2016
Сообщений: 75
07.03.2020, 13:35  [ТС] 11
---->fever brain:
спасибо!!!
буду разбираться!
Напишу!

Добавлено через 23 минуты
------> fever brain
P.S.
“Немного погуглив, нашел похожее решение на vb-6…”, плз., если не жалко можно
взглянуть и на версию VB6 ?
0
oh my god
1454 / 793 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
16.03.2020, 20:17 12
Цитата Сообщение от TransGet Посмотреть сообщение
если не жалко можно
взглянуть и на версию VB6 ?
мне жалко
0
16.03.2020, 20:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2020, 20:17
Помогаю со студенческими работами здесь

Вывод списка имен всех файлов из указанного каталога
Написать программу вывода списка имен всех файлов из указанного каталога и всех вложенных в...

Создание файла с имя_размер всех файлов каталога
find . -mindepth 2 -type f -type s -printf &quot;%f&quot;'_'&quot;%sh\n&quot; &gt;&gt; newfile.txt Что здесь неправильно?

Создание отчёта о размерах одноимённых файлов из всех подкаталогов текущего каталога в виде CSV-таблицы
добрый вечер! У меня есть 207 папок с одинаковыми файлами (отличие в размере файлов)....

Создание каталога, копирование файлов, архивирование содержимого каталога, запись результата работы в файл
Написать командный файл, выполняющий следующие действия: создать каталог с названием dir&lt;дата&gt;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru