2016-12-22 13 views
2

Я пытаюсь заставить Excel открыть любой файл в данной папке (ThisWorkbook.Path\Peach\Apple), который имеет расширение .xlsm (всегда есть только 1 файл). Можно ли открыть его с помощью символа подстановки? Я не знаю имя файла, просто расширение.VBA Открыть файл с подстановочным знаком, который знает только расширение

Если нет, есть ли способ сделать это?

ответ

4

Просто спросите файловую систему для первого согласующего файла:

Dim path As String: path = ThisWorkbook.path & "\Peach\Apple\" 

FindFirstFile = Dir$(path & "*.xlsm") 

If (FindFirstFile <> "") Then 
    Workbooks.Open path & FindFirstFile 
Else 
    '// not found 
End If 

(Это не будет искать подкаталоги)

+0

Как выбрать первый файл? Основано на имени файла? – user628797

+1

Не определено –

+0

В зависимости от параметров сортировки папок. Должен быть алфавит. – HackSlash

1

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

Sub OpenXLSMWildcardfile() 

Dim Path As String 

Path = ThisWorkbook.Path & "\Peach\Apple\" 
Workbooks.Open (Path & "*.xlsm") 

End Sub 
+0

Что делать, если есть файлы, например. в 'ThisWorkbook.Path \ Peach \ Apple \ Orange', которые также имеют расширение .xlsm? Будет ли она пытаться их открыть? – user628797

+0

@ user628797 Нет, вы спросили в своем посте о конкретной папке, хотите ли вы также искать все подпапки? Что произойдет, если он найдет 2 файла .xlsm? должен ли он открыть первый, который он находит случайно? –

+0

Ответ на первый вопрос - нет, это работает именно так, как я хотел, далеки от вас. Ответ на второй вопрос: какие варианты? – user628797

1

PFB для кода, необходимого для открытия файла макроса с расширением (.xlsm).

Sub OpeningFile() 

'Declaring variables 
Dim FileName, FolderPath As String 

'Initializing folder path 
FolderPath = ThisWorkbook.Path & "\Peach\Apple\" 

'Finding the file name using wildcard 
FileName = Dir(FolderPath & "*.xlsm") 

'Looping through the workbook which are saved as macro enabled workbooks 
While FileName <> "" 
    Workbooks.Open FolderPath & FileName 
    FileName = Dir() 
Wend 

End Sub 
+0

Ваша первая переменная «FileName» является вариантом. Вы не можете объявлять переменные в VBA таким образом. Вам нужно добавить «As String» к каждому элементу. http://www.cpearson.com/excel/declaringvariables.aspx – HackSlash

2

Вы сказали, что это было бы хорошее дополнение для открытия последнего изменения файла или файла с кратчайшим именем, так что давайте начнем - есть код примера, как вы можете получить все три файла (первый finded, последнее изменение, с наименьшим названием). Вы можете изменить это по своему усмотрению (добавить некоторые параметры, добавить обработку ошибок, указать только возвращаемый и т. Д.).

Sub Test() 
    'declarations 
    Dim fso As Object 
    Dim folder As Object 
    Dim file As Object 
    Dim path As String 

    Dim first_finded As Object 
    Dim recently_modified As Object 
    Dim shortest_name As Object 
    Dim recently As Date 
    Dim shortest As Long 
    Dim firstFinded As Boolean 

    'setting default recently date(24 hours from now) and path 
    recently = DateAdd("h", -24, Now) 
    path = ThisWorkbook.path & "\Peach\Apple\" 

    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set folder = fso.GetFolder(path) 


    'iteration over folder 
    For Each file In folder.Files 
     If file.Name Like "*.xlsm" Then 

      'grab first finded .xlsm 
      If Not firstFinded Then 
       firstFinded = Not firstFinded 
       Set first_finded = file 
      End If 

      'grab lastmodified .xlsm 
      If file.DateLastModified > recently Then 
       recently = file.DateLastModified 
       Set recently_modified = file 
      End If 

      'grab short named .xlsm 
      If shortest = 0 Or shortest > Len(file.Name) Then 
       shortest = Len(file.Name) 
       Set shortest_name = file 
      End If 
     End If 
    Next 

    'debug-print names 
    Debug.Print first_finded.Name 
    Debug.Print recently_modified.Name 
    Debug.Print shortest_name.Name 

    'so now you can uncomment this and open what you want 
    'Call Workbooks.Open(path & recently_modified.Name) 

End Sub