Импорт на основе частичного имени файла (Microsoft Excel)
Ира получает еженедельный файл с текстовыми разделителями, который он импортирует в Excel с помощью макроса. Имя файла всегда было одинаковым каждую неделю, поэтому Ира смогла встроить его в макрос; это упростило импорт. Недавно новая система производителя начала менять имя файла каждую неделю, но первые 12 символов всегда остаются неизменными. Ира задается вопросом, как он может запрограммировать макрос для импорта этого текстового файла без необходимости изменять имя файла каждую неделю.
Есть несколько способов решения этой проблемы, и все они могут означать серьезное перекодирование вашего макроса. Выбранный вами метод должен зависеть от того, как вы хотите выполнять свою работу каждую неделю. Например, предположим, что вы знаете каталог, в котором хранится входящий файл, каковы базовые 12 символов имени файла и расширение имени файла. Располагая этой информацией, вы можете просто предложить пользователю ввести суффикс имени файла следующим образом:
Sub OpenImportFile() Dim sFileName As String Dim sBase As String Dim sSuffix As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sSuffix = InputBox("Enter suffix for filename") sFileName = sBase & sSuffix & sExt Workbooks.Open Filename:=sFileName End Sub
Разумеется, вы можете изменить базу и расширение по своему желанию. В этом примере предполагается, что вы импортируете файл CSV, который должен нормально открываться в Excel.
Если вы просто помещаете группу файлов в папку и хотите открыть все из них, тогда выполнение кода станет немного быстрее, потому что вам не нужно вводить данные пользователя.
Sub OpenImportFiles() Dim sFileName As String Dim sBase As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sFileName = Dir(sBase & "*" & sExt) If sFileName = "" Then MsgBox "No Files Found" Else Do While sFileName > "" Workbooks.Open Filename:=sFileName sFileName = Dir Loop End If End Sub
Этот подход открывает все файлы CSV в папке; чтобы открыть файл другого типа, просто измените то, что хранится в переменной sExt. Следует помнить, что, поскольку все файлы CSV в папке открыты, это означает, что он может открывать файлы импорта с предыдущих недель. (Это может быть то, что вы хотите, а может и не быть.)
Все, что было представлено в этом совете, предполагает, что когда вы «импортируете» файл, все, что вам нужно сделать, это открыть файл, чтобы с ним можно было работать. Это может быть не так; вы можете захотеть, чтобы ваш макрос каким-то образом обработал файл импорта и что-то с ним сделал. Эта функция может уже присутствовать в вашем старом макросе, поэтому все, что вам нужно сделать, это изменить способ идентификации файла импорта. В этом случае код, который вы используете, можно адаптировать из кода, уже представленного в этом совете.
Еще один способ получить данные из текстового файла и поместить их в книгу — использовать метод OpenText, как показано в этом примере кода:
Sub OpenImportFile() Dim sFileName As String Dim sBase As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sFileName = sBase & "*" & ".txt" Workbooks.OpenText Filename:=sFileName, Origin:= _ xlMSDOS, StartRow:=1, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:= False, Space:=False, _ Other:=False, FieldInfo:=Array(1, 1), _ TrailingMinusNumbers:=True End Sub
Полное изучение того, что делает метод OpenText, выходит за рамки этого совета, но в результате все текстовые файлы с разделителями, начинающиеся с базовых 12 символов, должны быть открыты в ваших книгах.
Вы можете изменить способ работы метода, изменив параметры. Вы захотите обратить особое внимание на параметры, используемые для определения того, какой символ-разделитель следует использовать.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13472) применим к Microsoft Excel 2007, 2010, 2013 и 2016.