2015-06-13 2 views
-1

Я начинаю работать с макросами, и у меня есть список из более чем 100 файлов для открытия в VBA с такими именами, как: Mark001. xls Mark_001_initial.xls Mark001_improvement.xls Mark002.xls Mark002_initial. Marc002_Improvement.xls Pol001.xls ...(Отредактировано) VBA Выбор файлов со специальными буквами и нумерация из идентичных имен с добавленным изменением

Sub Macro1() 
Dim FilesToOpen 

FilesToOpen = Application.GetOpenFilename _ 
    (FileFilter:="EXLS Files(*.xls), *.xls," & "Mark??? Files (Mark???.xls), Mark???.xls", MultiSelect:=True, Title:="EXLS Files To Open") 

End Sub 

Это открывает окно выбора файлов, однако нет никаких файлов для выбора, он не идентифицирует их

Есть также одинаковые файлы в формате .txt, но мне нужно только открыть те, которые имеют тип Mark001.xls, более крупные имена не имеют значения.

Также мне нужно скопировать их в другую папку. Я пытался использовать приложения OpenFile, SerchFile и selectFile, но не имел успеха.

спасибо!

+0

Привет, Добро пожаловать в SO! Попробуйте прочитать [Как задать хороший вопрос?] (Http://stackoverflow.com/help/how-to-ask), чтобы увеличить вероятность того, что вы получите ответ. Кроме того, это не служба написания кода, поэтому опубликуйте то, что у вас есть (просто отредактируйте свой пост и добавьте его), и укажите, где он сбой, и кто-то остановится, чтобы помочь вам исправить это. – FreeMan

+0

Использовать подстановочные знаки 'Mark _ ???. TXT' Поиск google о том, как использовать подстановочные знаки с' DIR' для открытия файлов из определенной папки. –

+0

Спасибо @FreeMan за разъяснение формата. – Anton

ответ

0

Для Application.GetOpenFilename подстановочные работают только для расширения файла, как в

FileFilter:="Excel files (*.xl*)," & "*.xl*" 

Это будет возвращать все * .xls и * .xlsx файлы

Другие опции:

Application.FileDialog (msoFileDialogOpen Or msoFileDialogFilePicker) 

.

Sub openWildFile()  'use params to make it generic: "ByVal partialName As String" 

    Const partialName As String = "*Mark_" 
    Const partialExt As String = "*.xl*" 

    Dim selectedFile As String, dlg As Object  'A 3rd option is to use APIs 

    Set dlg = Application.FileDialog(msoFileDialogOpen) 'Or (msoFileDialogFilePicker) 

    With dlg 

     .Title = "Select " & partialName & " File" 

     With .Filters 
      .Clear 
      .Add partialName & " Files", partialExt 
     End With 

     .AllowMultiSelect = True 
     .InitialFileName = partialName & partialExt 

     If (.Show <> 0) Then selectedFile = Trim(.SelectedItems.Item(1)) 

    End With 
End Sub 

.

Чтобы скопировать файлы с помощью этого:

FileCopy SourceFile, DestinationFile ' Copy source file to target 
+0

Большое вам спасибо @paul bica! !!! Я сделал небольшое изменение в '.InitalFileName = partialName'. В противном случае часть расширения' * 'заменила бы границы частичного имени, это было бы полное имя вместо частичного. Кроме того, почему ** Если 0, то ** требуется часть? – Anton

+0

Я рад, что вы заработали. ** Если 0, то ** часть предназначена для выбора между двумя типами диалогов - вы можете изменить ее на ** Если 1, то **, чтобы увидеть другую, но они похожи, поэтому я просто возьму это part out –

+0

Спасибо! Получил идею! – Anton