Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2009, 19:03   #1
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию как по макросу скопировать название имени фала в ячейку??

в определенной папке есть файл у которого постоянно обновляется имя "файл_1" .. новая версия "файл_2" .. еще более новая "файл_3" и т.д. есть другой файл, который вытягивает из него определенную инфу.

данные, которые вытягиваются во второй файл вытягиваются посредством банального ВПР(), ГПР() и ПОИСКПОЗ() - в данной ситуации это наиболее удобно.

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

вопрос - как через макрос можно обновлять это имя??

т.е. надо чтобы при открытии, к примеру, ексель шел в определенную папку находил файл со словами в имени "файл", копировал имя файла полностью и вставлял в определенную ячейку в книге, после чего открывал эту книгу.
kievlyanin вне форума Ответить с цитированием
Старый 15.04.2009, 23:16   #2
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Попробуйте так:

Sub Workbook_Open()
Dim i As Long, z As Long, ws As Worksheet, y As Variant
Dim fLdr As String
y = ".xls"
z = 1
fLdr = "C:\Мои документы"
Columns("A:A").Select
Selection.ClearContents
Range("A1").Select

With Application.FileSearch
.NewSearch
.LookIn = fLdr
.SearchSubFolders = True
.Filename = y
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
If Left$(.FoundFiles(i), 1) = Left$(fLdr, 1) Then
z = z + 1
Лист1.Cells(z + 1, 1).Resize(, 1) = Array(Dir(.FoundFiles(i)))
End If
Next i
End If
End With

Columns("A:A").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Workbooks.Open Filename:="C:\Мои документы\" & Range("A1")
End Sub

ЗЫ: Вместо C:\Мои документы укажите путь к папке, где лежат "файл_1" .. новая версия "файл_2". Макрос ищет все файлы с расширением .xls в указанной папке и записывает их в столбец А на Лист1, сортирует и в ячейке А1 получаем "старший" файл, который открывается.
Маленький нюанс: количество цифр в имени файла д.б. одинаковым для правильной сортировки. Т.е., если файлов больше 9 но меньше 100 имена должны начинаться с "файл_01".

Последний раз редактировалось pivas; 15.04.2009 в 23:24. Причина: Маленький нюанс
pivas вне форума Ответить с цитированием
Старый 16.04.2009, 06:09   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Метод FileSearch лучше не использовать. Microsoft считает его неперспективным и с версии 2007 он отключен.
Можно существенно проще:
Код:
Sub FileNameToCell()
    Dim myPath As String
    myPath = "D:\Temp\" 'Подставьте свой путь к папке с файлами
    [A1] = myPath & Dir(myPath & "*файл*.xls")
End Sub
В результате, в ячейке "A1" будет находиться первые попавшие под искомые требования путь и имя файла. Если такого файла нет - ячейка окажется пуста.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 16.04.2009 в 06:17.
SAS888 вне форума Ответить с цитированием
Старый 16.04.2009, 10:31   #4
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

2 SAS888

по поводу FileSearch - да, отключен .. я нашел примерчик с поиском файла по маске, но он у мена на седьмом экселе дает ошибку на FileSearch - пишет не поддерживается. собсно поэтому сюда и обратился.

а как сделать чтобы копировало только имя?? мне сам путь не нужен.
kievlyanin вне форума Ответить с цитированием
Старый 16.04.2009, 10:54   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Строку кода
Код:
[A1] = myPath & Dir(myPath & "*файл*.xls")
замените на
Код:
[A1] = Dir(myPath & "*файл*.xls")
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 16.04.2009, 11:28   #6
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

2 SAS888



работает!!

спасибо!

kievlyanin вне форума Ответить с цитированием
Старый 16.04.2009, 20:58   #7
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

SAS888, можно ли подобным образом получить список всех файлов в папке с расширением .xls?
pivas вне форума Ответить с цитированием
Старый 16.04.2009, 21:04   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Код:
Sub ПолучениеСпискаФайловXLS()
    folder = "C:\Documents and Settings\Игорь\Рабочий стол\"

    ИмяФайла = Dir(folder & "*.xls")
    While ИмяФайла <> ""
        Debug.Print ИмяФайла
        ИмяФайла = Dir
    Wend
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 16.04.2009, 21:16   #9
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Бесподобно. Преклоняюсь перед мастерством.
pivas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо найти функцию, По вводимой в ячейку дате рождения показать название соответствующего знака Зодиака. Incognitoal Microsoft Office Excel 13 03.03.2009 08:18
Как записать в ячейку название киги oks27 Microsoft Office Excel 2 24.02.2009 13:37
Скопировать строку, содержащую активную ячейку. Iren Microsoft Office Excel 14 10.10.2007 12:19
как скопировать? zetrix Microsoft Office Excel 0 30.10.2006 18:52