У Кэрол есть каталог примерно с 1000 файлов с такими именами, как YR1905-LIC12345-Smith, Harry-Brown, Mary. Она хотела бы вывести все эти имена файлов (а не сами файлы) на лист и разделить имена тире. Таким образом, имя файла примера фактически займет четыре ячейки в одной строке. Кэрол считает, что для этого потребуется макрос, но она не знает, как получить доступ к именам файлов в этом макросе.

Вы, конечно, можете использовать для этого макрос, но вам не нужно использовать макрос. Вместо этого вы можете использовать старый трюк времен DOS, чтобы получить то, что вам нужно.

В командной строке (доступной через Windows: Пуск | Все программы | Стандартные | Командная строка) перейдите, пока не окажетесь в каталоге, содержащем файлы. Затем введите следующее:

dir /b /a-d > filelist.txt

При этом создается текстовый файл (filelist.txt), содержащий список всех файлов в текущем каталоге. Теперь в Excel вы можете выполнить следующие действия:

  1. В Excel щелкните инструмент «Открыть» на панели инструментов. Excel отображает диалоговое окно Открыть.

  2. В раскрывающемся списке Тип файлов в нижней части диалогового окна укажите, что вы хотите открыть текстовые файлы (.prn; .txt; * .csv).

  3. Найдите и выберите файл filelist.txt, который вы создали в командной строке.

  4. Щелкните «Открыть». Excel запускает мастер импорта текста, отображая диалоговое окно «Шаг 1 из 3». (См. Рис. 1.)

  5. Убедитесь, что выбран вариант «С разделителями», затем нажмите «Далее». Excel отображает диалоговое окно «Шаг 2 из 3».

  6. Убедитесь, что вы указали тире в качестве разделителя. (Вам нужно будет нажать «Другое» и затем ввести тире в качестве разделителя.)

  7. Щелкните Готово. Ваш файл импортируется и разбивается на тире, как вы и хотели.

Вышеупомянутые шаги довольно легко выполнить, особенно если вам нужно только время от времени получать список файлов в 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 [Получение имен файлов в рабочий лист].