Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Объект-коллекция "Files" - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объект-коллекция "Files" (Макросы/Sub)
Объект-коллекция "Files"
RAN Дата: Среда, 05.11.2014, 21:37 | Сообщение № 1
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Всем Мяу.
Можно ли вытащить файл по индексу? Или никак нельзя? Обход типа Dir не интересен.
[vba]
Код
    Set fso = CreateObject("Scripting.FileSystemObject")
     Set fld = fso.GetFolder(ThisWorkbook.Path)
'    For Each ff In fld.Files  использовать нельзя, ищем обход
     Set ff = fld.Files
     For i = 1 To ff.Count
     Set x = ff(i) ' а тут затык полный
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВсем Мяу.
Можно ли вытащить файл по индексу? Или никак нельзя? Обход типа Dir не интересен.
[vba]
Код
    Set fso = CreateObject("Scripting.FileSystemObject")
     Set fld = fso.GetFolder(ThisWorkbook.Path)
'    For Each ff In fld.Files  использовать нельзя, ищем обход
     Set ff = fld.Files
     For i = 1 To ff.Count
     Set x = ff(i) ' а тут затык полный
[/vba]

Автор - RAN
Дата добавления - 05.11.2014 в 21:37
Alex_ST Дата: Среда, 05.11.2014, 22:29 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, таки-Гав!
Андрей, а почему ты решил, что к элементам коллекции Folder.Files (т.е. к файлам) можно обращаться по индексу так же, как к коллекции в VBA?
Вот так, с вежливым обращением по имени-отчеству (ну, в смысле с расширением :) ) работает:
[vba]
Код
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\")
MsgBox Folder.Files.Count
Set File = Folder.Files.Item("AUTOEXEC.BAT")
MsgBox File.Path
Set File = Folder.Files("AUTOEXEC.BAT")
MsgBox File.Path
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу, таки-Гав!
Андрей, а почему ты решил, что к элементам коллекции Folder.Files (т.е. к файлам) можно обращаться по индексу так же, как к коллекции в VBA?
Вот так, с вежливым обращением по имени-отчеству (ну, в смысле с расширением :) ) работает:
[vba]
Код
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\")
MsgBox Folder.Files.Count
Set File = Folder.Files.Item("AUTOEXEC.BAT")
MsgBox File.Path
Set File = Folder.Files("AUTOEXEC.BAT")
MsgBox File.Path
[/vba]

Автор - Alex_ST
Дата добавления - 05.11.2014 в 22:29
RAN Дата: Среда, 05.11.2014, 22:32 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
"AUTOEXEC.BAT"

Мне как раз это и нужно получить. Я знаю, что у меня в папке 7 файлов. Их нудно перебрать, к определенным - обратиться.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
"AUTOEXEC.BAT"

Мне как раз это и нужно получить. Я знаю, что у меня в папке 7 файлов. Их нудно перебрать, к определенным - обратиться.

Автор - RAN
Дата добавления - 05.11.2014 в 22:32
Alex_ST Дата: Среда, 05.11.2014, 22:35 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Если всего семь, то чем тебе [vba]
Код
For Each ff In fld.Files
[/vba] не подходит?
Или просто чешем правой задней за левым ухом, как в "Мозговом штурме"? :)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеЕсли всего семь, то чем тебе [vba]
Код
For Each ff In fld.Files
[/vba] не подходит?
Или просто чешем правой задней за левым ухом, как в "Мозговом штурме"? :)

Автор - Alex_ST
Дата добавления - 05.11.2014 в 22:35
RAN Дата: Среда, 05.11.2014, 22:38 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
'    For Each ff In fld.Files  использовать нельзя, ищем обход

Если тебя очень интересует, почему, ОО For Each не знает.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
'    For Each ff In fld.Files  использовать нельзя, ищем обход

Если тебя очень интересует, почему, ОО For Each не знает.

Автор - RAN
Дата добавления - 05.11.2014 в 22:38
Alex_ST Дата: Среда, 05.11.2014, 22:40 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
ОО For Each не знает
Упс! ??? shock killed
Как же они на нём в VBA живут-то, если даже такой стандартной вещи у них нет?



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Среда, 05.11.2014, 22:41
 
Ответить
Сообщение
ОО For Each не знает
Упс! ??? shock killed
Как же они на нём в VBA живут-то, если даже такой стандартной вещи у них нет?

Автор - Alex_ST
Дата добавления - 05.11.2014 в 22:40
SM Дата: Среда, 05.11.2014, 22:42 | Сообщение № 7
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
"Семейства Files, Folders отличаются от большинства семейств тем, что доступ к их элементам
можно производить только по ключу. Доступа по индексу в них нет, поэтому единственный способ
перебора всех элементов семейств - применение For Each ... Next."
(Король В.И., Visual Basic 6.0, Visual Basic for Application 6.0. Язык программирования. ...)


Excel изощрён, но не злонамерен
 
Ответить
Сообщение"Семейства Files, Folders отличаются от большинства семейств тем, что доступ к их элементам
можно производить только по ключу. Доступа по индексу в них нет, поэтому единственный способ
перебора всех элементов семейств - применение For Each ... Next."
(Король В.И., Visual Basic 6.0, Visual Basic for Application 6.0. Язык программирования. ...)

Автор - SM
Дата добавления - 05.11.2014 в 22:42
AndreTM Дата: Среда, 05.11.2014, 22:42 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Ну да, всё правильно...
Folder.Files - это коллекция, какой там может быть "индекс"?

Стесняюсь спросить - а зачем?


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНу да, всё правильно...
Folder.Files - это коллекция, какой там может быть "индекс"?

Стесняюсь спросить - а зачем?

Автор - AndreTM
Дата добавления - 05.11.2014 в 22:42
Alex_ST Дата: Среда, 05.11.2014, 22:43 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Стесняюсь спросить - а зачем?

ОО For Each не знает



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Стесняюсь спросить - а зачем?

ОО For Each не знает

Автор - Alex_ST
Дата добавления - 05.11.2014 в 22:43
AndreTM Дата: Среда, 05.11.2014, 22:44 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
ОО For Each не знает
А внешние скрипты он запускать может?
Ну так вызови из него скрипт на VBS - а затем обрабатывай результаты...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
ОО For Each не знает
А внешние скрипты он запускать может?
Ну так вызови из него скрипт на VBS - а затем обрабатывай результаты...

Автор - AndreTM
Дата добавления - 05.11.2014 в 22:44
RAN Дата: Среда, 05.11.2014, 22:46 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ну так вызови из него скрипт на VBS

Ну ты и загнул! :D
Dir как то попроще будет.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Ну так вызови из него скрипт на VBS

Ну ты и загнул! :D
Dir как то попроще будет.

Автор - RAN
Дата добавления - 05.11.2014 в 22:46
AndreTM Дата: Среда, 05.11.2014, 22:49 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Хорошо.
к определенным - обратиться
fso.FileExists() не устраивает? Или имена заранее неизвестны?


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 05.11.2014, 22:50
 
Ответить
СообщениеХорошо.
к определенным - обратиться
fso.FileExists() не устраивает? Или имена заранее неизвестны?

Автор - AndreTM
Дата добавления - 05.11.2014 в 22:49
krosav4ig Дата: Четверг, 06.11.2014, 01:56 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
можно еще WINAPI покурить :)

[p.s.]Achtung! немецкий язык!
К сообщению приложен файл: Module1.bas (8.6 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеможно еще WINAPI покурить :)

[p.s.]Achtung! немецкий язык!

Автор - krosav4ig
Дата добавления - 06.11.2014 в 01:56
RAN Дата: Четверг, 06.11.2014, 12:13 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
ОО For Each не знает

Обманули меня, а я вас.
У меня в другом месте в коде эта конструкция стоит, и работает. А поскольку работает, я и не обратил внимания, что работает. Взял, да и поверил. :)
Не работает именно в варианте
[vba]
Код
For Each ff In fld.Files
[/vba].

[vba]
Код
Set File = Folder.Files("AUTOEXEC.BAT")
MsgBox File.Path
[/vba]
тут проблем нет.

krosav4ig, lol lol


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
ОО For Each не знает

Обманули меня, а я вас.
У меня в другом месте в коде эта конструкция стоит, и работает. А поскольку работает, я и не обратил внимания, что работает. Взял, да и поверил. :)
Не работает именно в варианте
[vba]
Код
For Each ff In fld.Files
[/vba].

[vba]
Код
Set File = Folder.Files("AUTOEXEC.BAT")
MsgBox File.Path
[/vba]
тут проблем нет.

krosav4ig, lol lol

Автор - RAN
Дата добавления - 06.11.2014 в 12:13
Alex_ST Дата: Четверг, 06.11.2014, 15:59 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
А простейшее
[vba]
Код
For Each ff In fld.Files
Debug.Print ff.Name
Next ff
[/vba]тоже не работает?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА простейшее
[vba]
Код
For Each ff In fld.Files
Debug.Print ff.Name
Next ff
[/vba]тоже не работает?

Автор - Alex_ST
Дата добавления - 06.11.2014 в 15:59
RAN Дата: Четверг, 06.11.2014, 16:14 | Сообщение № 16
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Простейшее не пробовал, а F8 с For сразу за Next отправляет. И ошибки нет.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПростейшее не пробовал, а F8 с For сразу за Next отправляет. И ошибки нет.

Автор - RAN
Дата добавления - 06.11.2014 в 16:14
Alex_ST Дата: Четверг, 06.11.2014, 16:27 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Так попробуй простейшее.
А если заработает, вставь внутрь цикла Set File = ff
Может быть из-за этого не пашет?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеТак попробуй простейшее.
А если заработает, вставь внутрь цикла Set File = ff
Может быть из-за этого не пашет?

Автор - Alex_ST
Дата добавления - 06.11.2014 в 16:27
RAN Дата: Четверг, 06.11.2014, 17:02 | Сообщение № 18
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ну вставил простейшее msgbox "QQ".
Леш,
F8 с For сразу за Next
, т.е. внутрь цикла не заходит.
Да не парься, плюнь.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНу вставил простейшее msgbox "QQ".
Леш,
F8 с For сразу за Next
, т.е. внутрь цикла не заходит.
Да не парься, плюнь.

Автор - RAN
Дата добавления - 06.11.2014 в 17:02
Alex_ST Дата: Четверг, 06.11.2014, 17:25 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну так ведь сам пишешь:
У меня в другом месте в коде эта конструкция стоит, и работает
или в другом месте - это не в ОО?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу так ведь сам пишешь:
У меня в другом месте в коде эта конструкция стоит, и работает
или в другом месте - это не в ОО?

Автор - Alex_ST
Дата добавления - 06.11.2014 в 17:25
RAN Дата: Четверг, 06.11.2014, 17:29 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
В другом месте - это извлекает из обычной коллекции.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВ другом месте - это извлекает из обычной коллекции.

Автор - RAN
Дата добавления - 06.11.2014 в 17:29
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объект-коллекция "Files" (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!