用于将逗号分隔的 .txt 文件导入 Excel 的 VBA 脚本 - 当字段中没有数据时脚本停止运行

问题描述 投票:0回答:1

VBA 新手。

我正在尝试编写一个脚本,将逗号分隔的文本文件导入到 Excel 电子表格中。我的文本文件有一些空字段,因此数据可能如下所示:STRATFIELD ROAD,,FAIRFIELD,其中“,,”表示 ADDRESS 2 字段为空。

我需要我的 VBA 跳过导入该字段,因为它是空的。现在,VBA 脚本在遇到空字段时立即停止导入。我希望它导入所有数据,如果文本文件中的字段为空,则将单元格留空。

谢谢!

Sub TestFileImport()

Dim fileToOpen As Variant
Dim fileFilterPattern As String
Dim wsMaster As Worksheet
Dim wbTextImport As Workbook

Application.ScreenUpdating = False

fileFilterPattern = "Text Files (*.txt), *.txt"

fileToOpen = Application.GetOpenFilename(fileFilterPattern)

If fileToOpen = False Then
    ' Input cancelled
    MsgBox "No file selected."
Else
    ' file selected    

Workbooks.OpenText _
        Filename:=fileToOpen, _
        StartRow:=2, _
        DataType:=xlDelimited, _
        Comma:=True
        
Set wbTextImport = ActiveWorkbook
Set wsMaster = ThisWorkbook.Worksheets("File Data")

wbTextImport.Worksheets(1).Range("A5").CurrentRegion.Copy wsMaster.Range("A5")

wbTextImport.Close False

Worksheets("File Data").Columns.AutoFit

Application.ScreenUpdating = True

End If

End Sub

我尝试了通过 Google 找到的各种不同的代码,但没有一个代码能够继续导入空字段之后的内容。

excel vba
1个回答
0
投票

只需按照传统方式顺序读取逗号分隔的文本文件即可。 我想,你可以理解它是如何工作的。

Sub CSV_File2ExcelSheet()

Dim ws As Worksheet
Dim CSVName As String
Dim LineItems() As String
Dim rw As Long

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False

Set ws = Worksheets("File Data")
CSVName = Application.GetOpenFilename("Text Files (*.csv), *.csv")
If CSVName = "False" Then Exit Sub

ws.Cells.ClearContents 'Clear existing data from Target Worksheet
Open CSVName For Input As #1
rw = 1

Do Until EOF(1)
    Line Input #1, MyLine
    LineItems = Split(MyLine, ",")
    For c = 0 To UBound(LineItems)
        ws.Cells(rw, c + 1) = LineItems(c)
    Next c
    rw = rw + 1
Loop

Close #1

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
MsgBox rw & " Row(s) Imported", vbInformation

End Sub

© www.soinside.com 2019 - 2024. All rights reserved.