如何在vba中实现数据选项卡下的获取外部数据组中的自文本功能?

在excel中可以使用“数据”选项卡下的“获取外部数据”组中的“自文本”功能导入文本文档的数据,如下图所示

在excel vba中内置了QueryTable对象可以实现上述导入外部文本文档的数据。

本文介绍如何使用vbal中内置的QueryTable对象导入外部文本文档的数据。

QueryTable对象不仅可以导入外部文本文档的数据,还可以导入网页中的表格数据,还可以连接利用ADO技术访问的外部数据源的数据。

在vba中用QueryTable对象导入外部文本文档的语法与利用excel的分列功能分列非常相似。

比如如下代码将C盘中的1.TXT文本文档导入excel中,并且删除连接,断开查询:

Sub QQ1722187970()
    Dim oWK As Worksheet
    Set oWK = Excel.ActiveSheet
    sFilePath = "c:\1.txt"
    sText = "TEXT;" & sFilePath
    Dim oQB As QueryTable
    With oWK
        Set oQB = oWK.QueryTables.Add(sText, .Range("a1"))
        With oQB
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlOverwriteCells
            .SavePassword = False
            .SaveData = False
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            '指定是从第几行开始导入数据
            .TextFileStartRow = 1
            '设置文本的解析类型是以固定宽度还是以固定分隔符
            .TextFileParseType = xlDelimited
             '设置文本的限定符
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
             '设置是否将连续的分隔符视为一个
            .TextFileConsecutiveDelimiter = False
             '设置是否以Tab为分隔符
            .TextFileTabDelimiter = False
             '设置是否以分号为分隔符
            .TextFileSemicolonDelimiter = False
            '设置是否以逗号为分隔符
            .TextFileCommaDelimiter = False
             '设置是否以空格为分隔符
            .TextFileSpaceDelimiter = True
            '设置其它的分隔符
            .TextFileOtherDelimiter = ""
            '每个列用的格式
            .TextFileColumnDataTypes = Array(1, 1, 1, 1)
            '当以固定宽度导入时,设置每个列指定的列宽
            .TextFileFixedColumnWidths = Array(3, 5, 31)
            '把带负号-的文本当做数字
            .TextFileTrailingMinusNumbers = True
            '异步更新
            .Refresh BackgroundQuery:=False
            .MaintainConnection = False
            '以下两句最关键,只有加这两句,才不会再更新
            .WorkbookConnection.Delete
            .Delete
        End With
    End With
End Sub
       

发表评论