Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Найти и открыть файл  (Прочитано 19223 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Olegspb
Гость
« : 18-04-2006 07:29 » 

Необходимо найти в папке файлы, отвечающие определенныем требованиям, и открыть их. Пишу:

Sub поискфайлов()
Set fs = Application.FileSearch
 
With fs
    .LookIn = "K:\Реестры платежей\оплаты апреля"
    .Filename = "r*.xls"
    If .Execute(SortBy:=msoSortByFileName, _
            SortOrder:=msoSortOrderAscending) > 0 Then
               
            Workbooks.Open ("K:\Реестры платежей\оплаты апреля\" & FoundFiles.Name)
       
            Else
        MsgBox "Нету таких файлов, однако"
    End If
End With
End Sub


VBA отвечает: "object required"

Подскажите, пожалуйста, в чем туплю.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #1 : 18-04-2006 09:30 » 

а перед FoundFiles точки разве не надо?
Записан

Удачного всем кодинга! -=x[PooH]x=-
Olegspb
Гость
« Ответ #2 : 18-04-2006 09:52 » 

И с точкой не работает.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #3 : 18-04-2006 10:29 » 

попробуй вместо
Код:
 Workbooks.Open ("K:\Реестры платежей\оплаты апреля\" & FoundFiles.Name)
написать
Код:
        For i = 1 To .FoundFiles.Count
            Workbooks.Open ( .FoundFiles(i))
        Next i
Записан

Удачного всем кодинга! -=x[PooH]x=-
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 18-04-2006 10:42 » 

PooH, прав. FoundFiles это коллекция.
Вообщето в хелпе пример явно это показывает Улыбаюсь
Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #5 : 18-04-2006 10:58 » 

ну дык я в хелпе по FoundFiles и посмотрел Ага
Записан

Удачного всем кодинга! -=x[PooH]x=-
Olegspb
Гость
« Ответ #6 : 18-04-2006 11:23 » 

И я смотрел, да, видно, плохо. А черт его знает...
Спасибо, макрос работает. Ну, и не сочтите за наглость еще один вопрос. Как мне вставить в ячейку название открытого файла, либо название активного листа этого файла (они одинаковы)? Скромно так...
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #7 : 18-04-2006 11:34 » 

В какую именно ячейку?
Текст, можно вставить, например, так:
Код:
Sub test()
    ActiveCell.Value = ActiveSheet.Name
End Sub
« Последнее редактирование: 18-04-2006 11:37 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
Olegspb
Гость
« Ответ #8 : 18-04-2006 11:54 » 

В ячейку в другом файле. Идея макроса в следующем: найти файл r1.xls, открыть, из него скопировать таблицу и вставить в файл "общая". Теперь, чтобы идентифицировать каждую строку вставленной таблицы, нужно проставить название этого файла в каждую строку. Затем закрыть файл r1.xls.(либо удалить его). Отркрыть файл r2.xls и т.д.
Проблема в том, что я не знаю  как вставить название файла в ячейку.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #9 : 18-04-2006 12:14 » 

Имя файла в .FoundFiles(i). Нужно ячейку сделать активной (смотри хелп по Selection и Range) и в ActiveCell.Value записать текст.
Записан

Удачного всем кодинга! -=x[PooH]x=-
Olegspb
Гость
« Ответ #10 : 18-04-2006 12:36 » 

Вот, что получилось:

Set fs = Application.FileSearch
Workbooks.Open ("K:\Реестры платежей\оплаты апреля\общая за апрель.xls")

With fs
    .LookIn = "K:\реестры платежей\оплаты апреля"
    .Filename = "r*.xls"
    If .Execute(SortBy:=msoSortByFileName, _
            SortOrder:=msoSortOrderAscending) > 0 Then
           
    For i = 1 To .FoundFiles.Count
      Workbooks.Open (.FoundFiles(i))
     Workbooks("общая за апрель.xls").Sheets("общая").Range("a1").Value = (.FoundFiles(i))
    Next i
    Else
        MsgBox "нет таких файлов"
    End If
End With

Все работает, правда, хотелось бы, чтобы вставлялось только имя файла, а не весь путь. Ну, да ладно. Отрежу.
Спасибо за помощь. Класс!
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 18-04-2006 15:43 » 

 Workbooks("общая за апрель.xls").Sheets("общая").Range("a1").Value =Dir(.FoundFiles(i))
Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
Olegspb
Гость
« Ответ #12 : 19-04-2006 05:13 » new

Все гениальное просто. Улыбаюсь)
Записан
Olegspb
Гость
« Ответ #13 : 04-05-2006 10:53 » 

Открыл файл. Скопировал таблицу. Теперь мне необходимо закрыть файл r1.xls, переименовать его в 1.xls и так все файлы r*.xls. Как это сделать не пойму. Подскажите кто знает.
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 04-05-2006 23:19 » 

Покажи скрипт. Хотябы схематично.
На вскидку надо примерно так делать:
Код:
Workbook.Close 'закрываем файл
Name oldpathname As newpathname 'переименоваваем
« Последнее редактирование: 19-12-2007 21:27 от Алексей1153++ » Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 05-05-2006 00:14 » 

И еще один момент.
Если для коррекности результата в "общем" файле необходимо что бы все данные из r*.xls перенеслись корректно (без ошибок). Преавилнее будет переименовывать уже после обработки всех файлов:
Код:
   .LookIn = "K:\реестры платежей\оплаты апреля\"
   ........
   For i = 1 To .FoundFiles.Count
      Workbooks.Open (.FoundFiles(i))
     Workbooks("общая за апрель.xls").Sheets("общая").Range("a1").Value = (.FoundFiles(i))
     ... 'что то делам с данными
   Next i

  'переименовываем скопом
   For i = 1 To .FoundFiles.Count
      Name .LookIn & Dir(.FoundFiles(i)) As .LookIn & i & ".xls"
   Next
« Последнее редактирование: 19-12-2007 21:29 от Алексей1153++ » Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines