Я пытаюсь выбрать несколько файлов, создать листы на основе имени файла и прочитать эти данные на новый лист - PullRequest
0 голосов
/ 01 октября 2019

Я выяснил, как выбрать несколько файлов, используя свойство msoFileDialogOpen. Теперь у меня есть несколько путей к файлам, которые я выбрал, и я хотел бы создать новые рабочие листы на основе имен файлов (имена находятся в конце пути к файлу после "\"). Затем я хотел бы убедиться, что дубликаты рабочих листов не создаются для одного и того же файла. Кроме того, я хотел бы прочитать данные из указанного файла, проанализировать их и вывести на соответствующий лист.

Я пытался создать новые листы, но не пытался читать, анализировать и выводить данные из файла txt вРабочий лист.

Sub readTxtFile()
    Dim fPath As Long

    ' Open the file browser
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        .Show
    End With

    Dim sheetName
    For fPath = 1 To FileDialog.SelectedItems.Count
        sheetName = Right(fPath, 11)
        ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)) = sheetName

        'insert code to read in data and output to excel
    Next FilePath
End Sub

Если у меня есть текстовый файл с именами ReadMe1.txt, ReadMe2.txt и ReadMe3.txt, я хотел бы выбрать все эти текстовые файлы с моего компьютера (как пути к файлам), а затемнапример, назовите лист «ReadMe1». Если бы я снова нажал кнопку макроса, я не смог бы создать лист «ReadMe1», если он все еще существует. Затем прочитайте данные из txt-файла и выведите их на новый рабочий лист.

1 Ответ

0 голосов
/ 01 октября 2019

Это добавит листы на основе выбранных файлов. Вам нужно будет больше рассказать о формате импортируемых файлов.

Sub readTxtFile()
    Dim i As Long, fso As Object, filePath As String, sheetName As String
    Dim sht As Worksheet, wb As Workbook, fd As FileDialog


    ' Open the file browser
    Set fd = Application.FileDialog(msoFileDialogOpen)
    With fd
        .AllowMultiSelect = True
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
    End With

    Set wb = ActiveWorkbook
    Set fso = CreateObject("scripting.filesystemobject")


    For i = 1 To fd.SelectedItems.Count

        filePath = fd.SelectedItems(i)
        sheetName = fso.getbasename(filePath)

        'see if the sheet already exists
        Set sht = Nothing
        On Error Resume Next 'ignore error if not found
        Set sht = wb.Worksheets(sheetName)
        On Error GoTo 0      'stop ignoring errors

        If sht Is Nothing Then
            'create the new sheet and name it
            Set sht = wb.Worksheets.Add(after:=wb.Worksheets(wb.Worksheets.Count))
            sht.Name = sheetName

            'read in the source file here

        End If
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...