Добавление имен файлов в рабочий лист (Microsoft Excel)
У Кэрол есть каталог примерно с 1000 файлов с такими именами, как YR1905-LIC12345-Smith, Harry-Brown, Mary. Она хотела бы вывести все эти имена файлов (а не сами файлы) на лист и разделить имена тире. Таким образом, имя файла примера фактически займет четыре ячейки в одной строке. Кэрол считает, что для этого потребуется макрос, но она не знает, как получить доступ к именам файлов в этом макросе.
Вы, конечно, можете использовать для этого макрос, но вам не нужно использовать макрос. Вместо этого вы можете использовать старый трюк времен DOS, чтобы получить то, что вам нужно.
В командной строке (доступной через Windows: Пуск | Все программы | Стандартные | Командная строка) перейдите, пока не окажетесь в каталоге, содержащем файлы. Затем введите следующее:
dir /b /a-d > filelist.txt
При этом создается текстовый файл (filelist.txt), содержащий список всех файлов в текущем каталоге. Теперь в Excel вы можете выполнить следующие действия:
-
В Excel щелкните инструмент «Открыть» на панели инструментов. Excel отображает диалоговое окно Открыть.
-
В раскрывающемся списке Тип файлов в нижней части диалогового окна укажите, что вы хотите открыть текстовые файлы (.prn; .txt; * .csv).
-
Найдите и выберите файл filelist.txt, который вы создали в командной строке.
-
Щелкните «Открыть». Excel запускает мастер импорта текста, отображая диалоговое окно «Шаг 1 из 3». (См. Рис. 1.)
-
Убедитесь, что выбран вариант «С разделителями», затем нажмите «Далее». Excel отображает диалоговое окно «Шаг 2 из 3».
-
Убедитесь, что вы указали тире в качестве разделителя. (Вам нужно будет нажать «Другое» и затем ввести тире в качестве разделителя.)
-
Щелкните Готово. Ваш файл импортируется и разбивается на тире, как вы и хотели.
Вышеупомянутые шаги довольно легко выполнить, особенно если вам нужно только время от времени получать список файлов в Excel. Если вам нужно делать это более регулярно, вам, вероятно, следует найти способ сделать это с помощью макроса. Следующий макрос будет работать очень быстро:
Sub GetFileNames() Dim sPath As String Dim sFile As String Dim iRow As Integer Dim iCol As Integer Dim splitFile As Variant 'specify directory to use - must end in "\" sPath = "C:\" iRow = 0 sFile = Dir(sPath) Do While sFile <> "" iRow = iRow + 1 splitFile = Split(sFile, "-") For iCol = 0 To UBound(splitFile) Sheet1.Cells(iRow, iCol + 1) = splitFile(iCol) Next iCol sFile = Dir ' Get next filename Loop End Sub
При запуске макроса убедитесь, что на текущем листе ничего нет. (Все, что там будет, будет перезаписано.) Кроме того, вам следует изменить путь к каталогу, который назначен переменной sPath в начале макроса.
Если вы получаете сообщение об ошибке при запуске макроса, скорее всего, вы используете Excel 97. Функция разделения (используемая для разделения имени файла через тире) не добавлялась в VBA до Excel 2000. Если вы используете Excel 97 , то вы можете использовать следующую процедуру для имитации того, что делает функция Split:
Function Split(Raw As String, Delim As String) As Variant Dim vAry() As String Dim sTemp As String Dim J As Integer Dim Indx As Integer Indx = 0 sTemp = Raw J = InStr(sTemp, Delim) While J > 0 Indx = Indx + 1 ReDim Preserve vAry(1 To Indx) vAry(Indx) = Trim(Left(sTemp, J)) sTemp = Trim(Mid(sTemp, J, Len(sTemp))) J = InStr(sTemp, Delim) Wend Indx = Indx + 1 ReDim Preserve vAry(1 To Indx) vAry(Indx) = Trim(sTemp) Split = vAry() End Function
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (11143) применим к Microsoft Excel 97, 2000, 2002 и 2003.
Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:
link: / excelribbon-Pulling_Filenames_into_a_Worksheet [Получение имен файлов в рабочий лист]
.