programing

텍스트 파일을 Excel 시트로 가져오는 중

codeshow 2023. 4. 17. 22:09
반응형

텍스트 파일을 Excel 시트로 가져오는 중

선택한 엑셀 시트의 데이터를 삭제하고 텍스트 파일 선택을 위한 대화 상자를 열어 데이터를 삭제한 시트와 동일한 시트로 데이터를 Import하는 VBA 코드를 쓰고 있습니다.지금까지 텍스트 파일을 새 워크북에만 열 수 있고 데이터를 삭제한 시트에 열 수 없습니다.

지금까지 가지고 온 것은 다음과 같습니다. 도와주시면 감사하겠습니다.

Dim Filt As String
Dim FilterIndex As Integer
Dim Title As String
Dim FileName As Variant

Filt = "Cst Files (*.prn),*.prn"
Title = "Select a cst File to Import"
FileName = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title)

If FileName = False Then
MsgBox "No File Was Selected"
Exit Sub
End If

With Application.ActiveSheet
    Cells.Select
Selection.QueryTable.Delete
Selection.ClearContents
End With

Workbooks.Open FileName

텍스트 파일을 현재 시트로 가져올 수 있는 방법은 여러 가지가 있습니다.다음은 3가지(상기 사용 방법을 포함)입니다.

  1. QueryTable 사용방법
  2. 메모리에서 텍스트 파일을 연 다음 현재 시트에 쓰고 필요한 경우 마지막으로 Text To Columns를 적용합니다.
  3. 현재 사용 중인 방법을 사용하려면 새 워크북에서 텍스트 파일을 연 후 다음을 사용하여 현재 시트에 복사하기만 하면 됩니다.Cells.Copy

QueryTable 사용방법

여기 제가 기록한 간단한 매크로가 있습니다.당신의 필요에 맞게 수정해 주세요.

Sub Sample()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Sample.txt", Destination:=Range("$A$1") _
        )
        .Name = "Sample"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

메모리에서 텍스트 파일을 엽니다.

Sub Sample()
    Dim MyData As String, strData() As String

    Open "C:\Sample.txt" For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)
End Sub

배열에 데이터가 있으면 현재 시트로 내보낼 수 있습니다.

이미 사용 중인 방법 사용

Sub Sample()
    Dim wbI As Workbook, wbO As Workbook
    Dim wsI As Worksheet

    Set wbI = ThisWorkbook
    Set wsI = wbI.Sheets("Sheet1") '<~~ Sheet where you want to import

    Set wbO = Workbooks.Open("C:\Sample.txt")

    wbO.Sheets(1).Cells.Copy wsI.Cells

    wbO.Close SaveChanges:=False
End Sub

따르다

를 사용할 수 있습니다.Application.GetOpenFilename관련 파일을 선택합니다.예를 들면...

Sub Sample()
    Dim Ret

    Ret = Application.GetOpenFilename("Prn Files (*.prn), *.prn")

    If Ret <> False Then
        With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & Ret, Destination:=Range("$A$1"))

            '~~> Rest of the code

        End With
    End If
End Sub

라고 쓸 수 있습니다.워크북 접속다음 후 삭제합니다.백그라운드 쿼리 새로 고침:=False 텍스트 파일 외부 연결이 삭제됩니다.

여기서의 제 질문에 대한 답변은 여러분이 하고자 하는 일에 대한 가장 간단한 해결책이라고 생각합니다.

  1. 파일에서 텍스트의 첫 번째 행이 있어야 할 셀을 선택합니다.

  2. 를 사용합니다.Data/Get External Data/From File대화 상자에서 가져올 텍스트 파일을 선택합니다.

  3. 가져온 텍스트의 형식을 필요에 따라 지정합니다.

  4. 에서Import Data대화상자가 열립니다.Properties...

  5. 체크 마크를 떼다Prompt for file name on refresh박스를 클릭합니다.

  6. 외부 파일이 변경될 때마다Data/Get External Data/Refresh All버튼을 클릭합니다.

주의: 이 경우 스텝5를 건너뛰는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/11267459/importing-text-file-into-excel-sheet

반응형