powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / заиметь полное имя любого файла в переменной (VBA Excel)
7 сообщений из 32, страница 2 из 2
заиметь полное имя любого файла в переменной (VBA Excel)
    #37203344
Learning_Oracle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за помощь!
...
Рейтинг: 0 / 0
заиметь полное имя любого файла в переменной (VBA Excel)
    #37203831
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristP.S. А FSO все же медленный в работе. И для инфо: Ваш код не будет работать в версии офиса младше 2003. Т.к. метод Application.FileDialog появился именно в 2003. Как ни прискорбно, но многие все еще работают на 2000...

Честно скажу, что не вдавался в эти различия версий. И вообще человек, задающий вопрос по данной тематике (Microsoft Office), должен указать, какой версией Офиса он пользуется. Я-то начинал VBA c 2003-го (сам Офис - с 97).
Ну а по поводу "медленный". Конкретно, какие примеры, сравнения? Просто хочу выяснить, почему он медленный. Заранее благодарен за ответ! :)
...
Рейтинг: 0 / 0
заиметь полное имя любого файла в переменной (VBA Excel)
    #37203937
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yudzhin,

Пример попозже постараюсь состряпать, т.к. косяки FSO в медленности на одной операции не покажешшь. А если брать теорию и логику: всё что подключается пользователем в ссылках работает через COM. Отсюда вывод: Требуется время на обработку интерфейсов. И это обращение к COM идет каждый раз при обращении к функциям, свойствам и методам объекта.

Если не прав - поправьте.

А вообще, даже в Вашем коде FSO лишний(здесь VBA без него управится польностью):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Function GetJustName() As String
    ' Select file.
    With Application.FileDialog(msoFileDialogFilePicker)
    ' Clear pre-defined filters to select any file.
    .Filters.Clear
    ' If user selected nothing, exit sub.
    If .Show = False Then Exit Function
    ' Get file name with extension.
    GetJustName = "Полный путь: " & .SelectedItems( 1 ) & "; имя файла: " & Dir(.SelectedItems( 1 ), vbDirectory)
    End With
End Function
...
Рейтинг: 0 / 0
заиметь полное имя любого файла в переменной (VBA Excel)
    #37204111
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте вот так протестировать на скорость:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Sub Go_Test()
    With Application.FileDialog(msoFileDialogFilePicker)
        .Filters.Clear
        If .Show = False Then Exit Sub
        Test .SelectedItems( 1 )
    End With
End Sub
Function Test(oFl)
    Dim li As Long, iTmr As Double, sFileName As String
    'Стандартный метод
    iTmr = Timer
    For li =  1  To  1000 
        sFileName = Dir(oFl, vbDirectory)
    Next li
    MsgBox "Встроенный метод: " & Timer - iTmr
    'Через File System Object
    iTmr = Timer
    Dim fso As New FileSystemObject
    For li =  1  To  1000 
        sFileName = fso.GetFile(oFl).Name
    Next li
    MsgBox "Через File System Object: " & Timer - iTmr
End Function
...
Рейтинг: 0 / 0
заиметь полное имя любого файла в переменной (VBA Excel)
    #37204179
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,

Отчёт. :-) В папке - 1513 файлов.

Стандартный метод - 0,05.
FileSystemObject - 0,16.

В три раза быстрее. :-) Но эта разница не ощутима даже при таком огромном количестве файлов. :-)
...
Рейтинг: 0 / 0
заиметь полное имя любого файла в переменной (VBA Excel)
    #37204202
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yudzhin,

А причем здесь кол-во файлов, если мы анализируем лишь один(первый) - .SelectedItems(1) ? :-)

Да и к тому же - все зависит еще и от конфигурации компьютера. Не у всех установлены даже Core2Duo(бывает намного хуже...). А на слабых машинах Ваши миллисекунды могут обратиться в секунды и даже минуты, в зависимости от выполняемых задач.
...
Рейтинг: 0 / 0
заиметь полное имя любого файла в переменной (VBA Excel)
    #37204264
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,

Мой метод:
Код: plaintext
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.
Sub IntrinsicFsoCompare()

    Dim fso As New FileSystemObject
    Dim dTmr As Double
    Dim aFile As File
    Dim sFileName As String
    Dim sFolder As String

    sFolder = "E:\Images\wallpapers\18\"

    ' Стандартный метод.
    dTmr = Timer
    sFileName = Dir(sFolder)
    While sFileName <> ""
        sFileName = Dir()
    Wend

    MsgBox "Встроенный метод: " & Timer - dTmr


    ' Через FileSystemObject.
    dTmr = Timer

    For Each aFile In fso.GetFolder(sFolder).Files
        sFileName = aFile.Name
    Next

    MsgBox "Через File System Object: " & Timer - dTmr

End Sub

Отчёт. :-) В папке - 1513 файлов.

Стандартный метод - 0,007.
FileSystemObject - 0,28.

Разница ощутима. :-)
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / заиметь полное имя любого файла в переменной (VBA Excel)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]