Страницы: 1 2 След.
RSS
поиск и открытие файла эксель по названию из ячейки
 
Помогите, пожалуйста.
Как в определенной папке с помощью макроса найти и открыть фаил с названием из ячейки???
Заранее, спасибо большое
 
А файл какой? Excel?
There is no knowledge that is not power
 
да. в 2003 экселе пытаюсь написать
 
Код
Sub f()

    Dim f As String, folder As String, file_name As String

    'Папка для поиска
    folder = "C:\Temp\"
    
    'Ячейка с именем файла
    file_name = Range("A1")
    
    f = Dir(folder)
    While Not Len(f) = 0
        If f = file_name Then
            Workbooks.Open folder & f
        End If
        f = Dir()
    Wend

End Sub
There is no knowledge that is not power
 
Спасибо огромнейшее :D  :D  :D  :D  :D  :D
 
а как сделать, чтобы выбор варианта ответа при появлении диалогового окна был автоматический, или чтобы оно вообще не вылазило???
 
Код
Application.DisplayAlerts = False
.....
.....
.....
Application.DisplayAlerts = True
Изменено: Johny - 24.05.2013 14:28:36
There is no knowledge that is not power
 
а можно ли сделать, чтобы он искал документ в поддиректориях??? :oops:
 
Ставим галку: Tools -> References -> Microsoft Scripting Runtime

Код
Private file_name As String
Private f As File, fld As folder

Sub SearchAndOpen()

    Dim source_folder As String
    Dim fso As New FileSystemObject

    'Папка для поиска
    source_folder = "C:\Temp\Dir\"
    
    'Ячейка с именем файла
    file_name = Range("A1")
    
    Call EnumerateFiles(fso.GetFolder(source_folder))

End Sub

Private Sub EnumerateFiles(root_folder As folder)

    For Each f In root_folder.Files
        If f.Name = file_name Then
            Workbooks.Open f.Path
        End If
    Next
    
    For Each fld In root_folder.SubFolders
        Call EnumerateFiles(fld)
    Next
    
End Sub
Изменено: Johny - 31.05.2013 17:19:49
There is no knowledge that is not power
 
Я чего-то не понимаю?
Если есть имя файла - то зачем искать? Взяли и открыли. Если ошибка - обработали.
А искать может быть долго - если например файлов тысячи. Да и код с таким поиском больно длинный  - хватает ведь 3-х строк:

Код
Sub f()
    On Error GoTo err_: Workbooks.Open "C:\Temp\" & Range("A1"): Exit Sub
err_:     MsgBox "Нет такого файла!"
End Sub
 
Я тоже не понимаю смысла в поиске...
 
Привет, ребят. Вроде ТС удовлетворился решением здесь:
http://www.planetaexcel.ru/forum/?PAGE_NAME=message&FID=1&TID=48595&MID=403314#message403314
Я сам - дурнее всякого примера! ...
 
Просто документов очень много. и постоянно открывать файлы под определенными названиями..... смысл тогда составления макроса... Пишу для автоматизации процессов обработки информации, и остановилась на этом моменте.

:oops:
 
Если например ситуации такие:
- есть точный список названий файлов
- в определённом месте (папки/подпапки) регулярно генерятся файлы (известна часть имени, или даже не известна)
- нужно открыть все файлы определённой папки/подпапки
- есть какая-то другая система в этих файлах
и открывать такие файлы предстоит регулярно - то есть смысл один раз и надолго облегчить себе работу макросом.
Если же никакой системы нет - то и макросом открывать файлы нет смысла.
Другое дело, что если обработка этих открываемых файлов предстоит макросом - то можно в этот же макрос вписать диалог выбора этих файлов. Т.е. запустили макрос, в диалоге указали сразу все нужные файлы, получили готовый результат.
 
Есть огромный отчет. после обработки макросом, надо, чтобы он брал имя файла из определенной ячейки и открывал фаил с таким именем. информации много, и такой отчет обрабатывается каждый месяц. примерное кол-во файлов на один отчет больше 1000, поэтому, сами понимаете, что открывать каждый, это рутина. таких отчетов за один месяц 30 штук. соответственно, около 30000 существующих файлов...вот как-то так все глобально......

просто открыть, с этим мы разобрались..... но некоторые файлы находятся в поддиректориях, и постоянно происходят какие-то перемещения в этой директории...
 
В теме
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=25457
есть файл
http://www.planetaexcel.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=40202&action=download

Там есть такой код:

Код
    For Each aFolder In fso.GetFolder(ThisWorkbook.Path).Files
    
        For Each aFile In aFolder.Files
        
            If fso.GetExtensionName(aFile.Name) Like "xls*" Then
            
                Set wkb = Workbooks.Open(aFile.Path)
                Set wks = wkb.Worksheets(1)
                With wks
и т.д.
Думаю, можно использовать.
 
что-то я не могу разобраться совсем :cry:
 
Пробуйте, первый запуск будет долгим. Далее быстрее. Если есть подозрение, что файлы в папке и подпапках изменили положение или имя, то нажать "Обновить". Путь к начальной папке задаётся константой baseFolder в методе InitializeFindю
Успехов.
 
Код
    Const baseFolder = "d:\project"
я так понимаю, здесь надо прописать адрес самой папки, это понятно...
а имя файла он где будет брать???
 
Цитата
а имя файла он где будет брать???
Из активной ячейки (в ней только имя, без расширения)
Изменено: anvg - 04.06.2013 07:52:42
 
все, поняла..... все работает...спасибо большое....  :D  и еще один вопрос, если можно....:
как это все сделать так, чтобы он был без этих кнопочек, а в таком виде, чтобы автоматически включался???

до этого было прописано так, но он только с одной папки так открывает....
Заранее огромное спасибо вам!!!!!!!!  :oops:  

Код
Sub ARM()
    Dim f As String, folder As String, file_name As String
    'Папка для поиска
    folder = "C:\Documents and Settings\maks\Рабочий стол\Документы\"
    'Ячейка с именем файла
    file_name = LCase(Range("D1")) & ".xls"
    f = Dir(folder)
    While Not Len(f) = 0
        If LCase(f) = file_name Then

            Workbooks.Open folder & f
           
 Application.Run "ARM.XLS!ARM6"
            Exit Sub
        End If
        f = Dir()
    Wend

    Application.Run "ARM.XLS!ARM4"
End Sub

Изменено: lenok - 04.06.2013 23:58:03
 
А на кой тут цикл? Если имя файла известно, зачем перебирать все файлы?
Код
Sub ARM()
    Dim folder As String, file_name As String
    'Папка для поиска
    folder = "C:\Documents and Settings\maks\Рабочий стол\Документы\"
    'Ячейка с именем файла
    file_name = LCase(Range("D1")) & ".xls"
    If Len(Dir(folder & file_name)) Then
        Workbooks.Open folder & file_name
        Application.Run "ARM.XLS!ARM6"
        Exit Sub
    End If
    Application.Run "ARM.XLS!ARM4"
End Sub
Я сам - дурнее всякого примера! ...
 
он не открывает тогда файл в поддиректории :(
 
Ага. А с циклом, следовательно, открывает?
Я сам - дурнее всякого примера! ...
 
неа...  тоже не открывает....  :| а надо, чтобы открывал... там мне уже без разницы, есть цикл или нет... надо, чтобы он поддиректории просматривал :?:
 
:?:
Скрытый текст
 
anvg, огромное Вам спасибо!!!!!!!!!!!! все получилось наконец-то)))))))) :D  ;)  ;)  ;)
 
Цитата
Hugo написал:
Я чего-то не понимаю?Если есть имя файла - то зачем искать? Взяли и открыли. Если ошибка - обработали.А искать может быть долго - если например файлов тысячи. Да и код с таким поиском больно длинный  - хватает ведь 3-х строк
Добрый день!
Попробовал ваш вариант, работает. Я правда добавил ещё запуск другого макроса по созданию файла с этим именем если его нет (т.е. если не выполнено первое условие)
Эксель при отсутствии файла выдаёт своё собственное сообщение
По нажатии "оК" появляется уже месседж из макроса.
М.б. это связано с версией экселя, у меня 2016, а тут код вроде для 2003 изначально, или это не имеет значения.
Можно ли убрать сообщение самого экселя?
Заранее благодарен!!
Код
Sub SearhFiles() 'Макрос поиска файла с именем и автоматическое его открытие при наличии
On Error GoTo err_: Workbooks.Open "\\Server\777\S\" & Range("F2") & ".xls": Exit Sub
err_:     MsgBox "Нет такого файла!"
Application.Run "DOC.xlsm!Upload" 'Запуск макроса по созданию файла с именем
End Sub
 
Доброго дня форумчане.
Прошу помощи у знающих.
Есть код:
он открывает файл ворд по указанному адресу и выкопирует таблицы
Код
Sub Copy_Paste()

Dim objWrdApp As Object
Dim objWrdDoc As Object
Dim NameFile As String, NameFolder As String
Dim lCol As Long, aTbl As Long, i As Long, j As Long, lastRow3 As Long

NameFolder = Range("B1").Value & "\"
NameFile = NameFolder & Range("B2") & ".docx"

    On Error Resume Next
    Set objWrdApp = GetObject(, "Word.Application")
    If objWrdApp Is Nothing Then
        Set objWrdApp = CreateObject("Word.Application")
        Set objWrdDoc = objWrdApp.Documents.Open("\\x-srv63-x\xxxx\xxxx\xxxx\1\xxxx\" & NameFile)
            objWrdDoc.Activate
            objWrdApp.Visible = True
    End If

'lCol = objWrdDoc.tables.Count
'
'For aTbl = 2 To lCol - 1
'    ReDim arr(1 To objWrdDoc.tables(aTbl).Rows.Count, 1 To objWrdDoc.tables(aTbl).Columns.Count)
'        For j = 1 To UBound(arr, 2)
'            For i = 2 To UBound(arr, 1)
'                arr(i, j) = Trim(Replace(objWrdDoc.tables(aTbl).cell(i, j).Range.Text, Chr(7), ""))
'            Next i
'        Next j
'
'    With Sheets("ID")
'        lastRow3 = ThisWorkbook.Worksheets("ID").Range("A" & Rows.Count).End(xlUp).Row
'    End With
'
'        ThisWorkbook.Sheets("ID").Range("A" & lastRow3 + 1).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
'
'    If Range("A" & lastRow3 + 1) = "" Then
'        Range("A" & lastRow3 + 1).EntireRow.Delete
'    End If
'
'Next

End Sub

Проблема вот с этой строкой

Set objWrdDoc = objWrdApp.Documents.Open("\\xxx-srv63-xx\xxxx\xxxx\xxxx\1\xxxx\" & NameFile)

При открытии с рабочего стола/диска С: файл код работает.
Но если путь указывает на сервер (как в приложении) - открывается пустой файл ворд.
Подскажите, пжл,  в чем может быть проблема?
Заранее благодарю за помощь.
 
Удалите (или закомментируйте) строку
Код
On Error Resume Next

и увидите какая ошибка возникает при получении файла с сервера
Согласие есть продукт при полном непротивлении сторон
Страницы: 1 2 След.
Читают тему
Наверх