4

Я хочу разработать макрос, в котором в своем листе Excel я печатаю дату в определенной ячейке, и макрос помещается в папку, содержащую текстовые файлы. База данных, которую вы могли бы сказать. Я хочу, чтобы он нашел соответствующее имя файла, записанное в виде даты, поместил данные через разделитель и вставил их в ячейки непосредственно под тем местом, где я изначально поставил дату.

Папка всегда будет в одном и том же месте, а текстовые файлы будут отформатированы в DD_MM_YYYY. И там ячейки внизу всегда будут пустыми

Несколько картинок, чтобы было проще разобраться в том, что я прошу.

Результат Ввод данных Шаг 1 Ввод данных Шаг 2 Ввод данных Шаг 3

1 ответ1

5

Это проще, чем вы думаете, потому что вы можете вызывать Мастер импорта текста (или, скорее, вы можете использовать его функциональные возможности) из макроса, нет необходимости писать анализатор CSV или что-то подобное.

Фактически, все, что я сделал с помощью макроса ниже, - это использовал встроенную функцию записи, а затем немного подстроил ее под свои нужды.

Использование макроса:

  1. Сделайте резервную копию текущего файла Excel на случай, если что-то пойдет не так.

  2. Измените определение folder в макросе на путь, содержащий все ваши файлы данных - убедитесь, что вы добавили косую черту.

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

  4. Запустите макрос.

действия

Он возьмет имя файла из текущей ячейки, заглянет в указанную folder и откроет этот файл, указанный в ячейке. Затем он импортирует его как CSV, ровно на одну ячейку ниже выделенной (при запуске макроса).

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

Если файл не найден или возникла какая-либо другая ошибка, произойдет сбой с обычным блоком ошибок VBA, без дружественных сообщений об ошибках.

Макрос код

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

Sub LoadFromFile()
    Dim fileName As String, folder As String

    folder = "C:\Path\To\Your\Files\"
    fileName = ActiveCell.Value

    ActiveCell.Offset(1, 0).Range("A1").Select

    With ActiveSheet.QueryTables _
        .Add(Connection:="TEXT;" & folder & fileName, Destination:=ActiveCell)
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .