Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 37

Вопрос по файловой системе в VBA

25.09.2011, 21:01. Показов 3449. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно произвести сканирование папки и в отдельные ячейки столбца А произвести вставку имен файлов содержащихся в этой папке?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2011, 21:01
Ответы с готовыми решениями:

Скрипт по файловой системе
Люди может кто знает как реализовать скрипт. Необходимо что бы мне выводило путь к файлу/имя файла/размер файла и что бы всё был...

Ошибки в файловой системе
При попытке сохранить файл система не реагирует ни на что, переключаюсь в консоль, команды тоже не вводятся, даже не удается войти под...

Доступ к файловой системе
Доброго времени суток. Существует следующая ситуация. Есть ПК под управлением Windows (7, 8.1). Есть устройство, с WindowsCE 5 на борту....

16
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
26.09.2011, 06:07
5 дней назад не Вы задавли вопрос?
http://relib.com/forums/topic.asp?id=875423
0
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 37
26.09.2011, 23:25  [ТС]
Набираю этот код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Primer ()
r = 0
' Получение имени первого файла
f = Dir ('С:Work ')
' ввожу имя своей папки  
Do while f <> ''
r = r + 1
Cells (r, 1) = f
' Получение имени следующего файла
f = Dir
Loop
End Sub
Но почему-то ничего не происходит!
0
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 37
26.09.2011, 23:27  [ТС]
Извините!
Просто необходимо подключить Microsoft Scripting Runtime!!!
Извините еще раз.
0
0 / 0 / 0
Регистрация: 16.08.2011
Сообщений: 37
27.09.2011, 00:21  [ТС]
Возник еще один вопрос!
Каким образом можно убрать расширения из имен файлов?
если есть Primer.xls, а необходимо получить Primer ?
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
27.09.2011, 07:04
В Вашем примере f - строка, значит надо применять фукции работы со строковыми переменными.
Можно просто удалить 4 последних символа (включая точку), но это не есть ГУТ, тк есть файлы с расширением html, где надо удалить 5 последних символов.

Приведу два примера.
Один откусывает с конца по символу, пока не наткнётся на точку,
другой с использованием функции split
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function ИмяФайлаБезРасширения1(FileName)
  Do While Len(FileName) > 1
    If Right(FileName, 1) <> '.' Then
      FileName = Left(FileName, Len(FileName) - 1)
    Else
      FileName = Left(FileName, Len(FileName) - 1)
      Exit Do
    End If
  Loop
  ИмяФайлаБезРасширения1 = FileName
End Function
 
Function ИмяФайлаБезРасширения2(FileName)
  t = Split(FileName, '.')
  If IsArray(t) Then ИмяФайлаБезРасширения2 = Left(FileName, Len(FileName) - Len(t(UBound(t))) - 1)
End Function
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
27.09.2011, 08:02
И ещё. Создать списк файлов (или папок) можно через FileSystemObject
Короткий пример я по быстрому не нашел, поэтому положу кусок кода.
В нем начиняем массив именами файлов (или папок), а потом вывожу его содержимое в MsgBox, (можно организовать вывод на лист)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub ПолучитьСписокФайловВпапке(sPath, ByRef msFile())
  Dim fs, f, f1, fc, s
  ReDim Preserve msFile(0)
  Set fs = CreateObject('Scripting.FileSystemObject')
  Set f = fs.GetFolder(sPath)
  'Set fc = f.SubFolders        'для ПАПОК
  Set fc = f.Files              'для ФАЙЛОВ
  For Each f1 In fc
    ReDim Preserve msFile(UBound(msFile) + 1)
    msFile(UBound(msFile)) = f1.Name
  Next
End Sub
 
Sub пример()
  Dim msFile()
  Call ПолучитьСписокФайловВпапке('C:Temp', msFile())
  mes = ''
  For i = 1 To UBound(msFile)
    mes = mes & msFile(i) & vbCr
  Next
  MsgBox mes
End Sub
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 26
19.06.2012, 15:54
Masalov А как получить список всех папок и под папок входящих C:Temp ?
0
0 / 0 / 0
Регистрация: 02.09.2010
Сообщений: 102
19.06.2012, 16:56
поиск файлов в указанной директории,
включая вложенные папки
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub CommandButton1_Click() 'поиск файлов в указанной директории
' и вывод их в книгу excel
Dim fs, i, a
Worksheets("лист1").Activate
 
Set fs = Application.FileSearch
With fs
.LookIn = "c:   emp"
.SearchSubFolders = True
.Filename = "*.*"  'можно написать *.htm, он отберет только их
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
For i = 1 To .FoundFiles.Count
Cells(i + 5, 2).Value = .FoundFiles(i)
Next i
Else
MsgBox "There were no files found."
End If
End With
End Sub
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 26
19.06.2012, 18:11
poiskxxx этот код я знаю и работает он только для файлов, но я говорю про папки, код Masalov работает только на указанную папку. а меня интересует можно ли получить список всех подпапок входящих в указанную.
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
19.06.2012, 19:02
Цитата Сообщение от w.s.
Возник еще один вопрос!
Каким образом можно убрать расширения из имен файлов?
если есть Primer.xls, а необходимо получить Primer ?
Dim objFSO As New FileSystemObject
MsgBox objFSO.GetBaseName("Primer.xls")

vladconn
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
19.06.2012, 19:21
Цитата Сообщение от Михря
poiskxxx этот код я знаю и работает он только для файлов, но я говорю про папки, код Masalov работает только на указанную папку. а меня интересует можно ли получить список всех подпапок входящих в указанную.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Function GetSubFolders(ByVal pstrFolder As String, _
                               ByVal pblnGetNestingSubfolders As Boolean) As String
    
    Dim objFSO As New FileSystemObject
    Dim objFolder As Folder
    Dim objSubFolder As Object
 
    Set objFolder = objFSO.GetFolder(pstrFolder)
    
    For Each objSubFolder In objFolder.SubFolders
        MsgBox objSubFolder.Name
        If pblnGetNestingSubfolders Then
            GetSubFolders objSubFolder.Path, pblnGetNestingSubfolders
        End If
    Next objSubFolder
    
End Function
vladconn
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 26
20.06.2012, 10:03
Доработав КОД Mosalova
получаем список подпапок второго уровня, в принципе можно ещё добавить цикл и получить список третьего уровня и т.д.
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
Sub Пример()
Dim msFile()
Dim fs, f, f1, fc, s
SubFolders = True
ReDim Preserve msFile(0)
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder("C:Temp")
Set fc = f.SubFolders 
For Each f1 In fc
ReDim Preserve msFile(UBound(msFile) + 1)
msFile(UBound(msFile)) = "C:Temp" & f1.Name
Open "C:Temp" For Append As #1
Print #1, f1.Name
Close #1
Set fs2 = CreateObject("Scripting.FileSystemObject")
Set f2 = fs2.GetFolder(f1)
Set fc2 = f2.SubFolders 
For Each f3 In fc2
ReDim Preserve msFile(UBound(msFile) + 1)
msFile(UBound(msFile)) = f3.Name
Open " C:Temp " For Append As #1
Print #1, "C:Temp" & f1.Name & "" & f3.Name
Close #1
Next
Next
mes = ""
For i = 1 To UBound(msFile)
mes = mes & msFile(i) & vbCr
Next
End Sub
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
20.06.2012, 16:39
Михря,

Vi obratili vnimanie, chto moj kod vozvraschet papki VSEX urovney s gorazdo men'shim usiliem?

vladconn
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 26
20.06.2012, 17:55
Он у меня не работает !
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
20.06.2012, 20:03
Михря,

В переводе на профессиональный язык, генерируется сообщение об ошибке, так?
Почему же вы не указали, какова ошибка?
Может вы забыли установить ссылку на нужную библиотеку? Вот w.s. несколькими ответами выше так галантно извинился: "... Просто необходимо подключить Microsoft Scripting Runtime!!! Извините еще раз."
Вы поняли суть его извинений или у вас другая проблема?

vladconn


0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
20.06.2012, 22:31
Михря,

Этот вариант я написал для добавления "-" нужное число раз для указания числа вложенных уровней. В качестве примера используется RichTextBox. Опять, поддерживаю любое число уровней:
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
Private Sub Command1_Click()
     Dim strRoot As String
     
     strRoot = "C:Documents and Settings...My Documents"
     mintInitialIndent = UBound(Split(strRoot, ""))
     RichTextBox1.Text = ""
     GetSubFolders "C:Documents and Settings...My Documents", True, mintInitialIndent
 
End Sub
 
Private Function GetSubFolders(ByVal pstrFolder As String, _
                               ByVal pblnGetNestingSubfolders As Boolean, _
                               ByVal pintLevel As Integer) As String
                                
    Dim objFSO As New FileSystemObject
    Dim objFolder As Folder
    Dim objSubFolder As Object
    Dim strReturn As String
       
    Set objFolder = objFSO.GetFolder(pstrFolder)
    
    For Each objSubFolder In objFolder.SubFolders
        DoEvents
        
        If RichTextBox1.Text = "" Then
            RichTextBox1.Text = objSubFolder.Name
        Else
            pintLevel = UBound(Split(objSubFolder.Path, ""))
            RichTextBox1.Text = RichTextBox1.Text & vbCr & String(pintLevel - mintInitialIndent, "-") & objSubFolder.Name
        End If
        
        If pblnGetNestingSubfolders Then
            pintLevel = pintLevel + 1
            GetSubFolders objSubFolder.Path, pblnGetNestingSubfolders, pintLevel
        End If
    Next objSubFolder
 
End Function
vladconn
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2012, 22:31
Помогаю со студенческими работами здесь

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

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

Перехват изменений в файловой системе
Поясню требуемую задачу: Есть два каталога, грубо говоря In и Out. Оба находятся в сети (на серверах линукса, доступ к ним организован...

Доступ к файловой системе на сервере
&quot;Объектом, предоставляющим доступ к файловой системе на сервере, является объект FileSystemObject, позволяющий производить разнообразные...

Расположение процесса в файловой системе
Всем доброго времени суток. Сразу извиняюсь, если подобная тема уже присутствовала, однако есть проблема. Мне необходимо написать DLL-ку,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru