我收到了一个由不再为公司工作的其他人编写的VBA宏,并要求添加其他功能 . 此宏使用我不熟悉的QueryTables方法将数据从固定宽度的文本文件导入Excel . 该文件在第一行中有一些基本信息(日期和时间,记录号等),实际数据从第二行开始 . 文本文件只有4列,并使用引号指示一个传感器的数据结束而另一个传感器的数据在该列内开始 . 例:

20140529 15:11:42 Rec# 0001                         
'SENSOR1         ''SENSOR2         ''SENSOR3         ''SENSOR4         ' 
 0.00000           1500.00           1.05400E-01      0.123799E-02             
0.100000           1510.00          -7.68900E-01      0.404716E-02             
'SENSOR5         ''SENSOR6         ''SENSOR7         ''SENSOR8         ' 
0.710000E-01      0.250000E-01       2.12500           1.87100                 
0.450000E-01      0.290000E-01       2.36200           2.19200

最初,宏将开始在第2行导入,跳过 Headers 信息并将每个传感器粘贴在它自己的列中 . 这是原始的QueryTables代码:

' Input Unigraph file
fileName = "TEXT;H:\ModeShapeData.input"
With ActiveSheet.QueryTables.Add(Connection:=fileName, _
    Destination:=Sheets("Data").Range("$A$1"))
    .Name = "ModeShapeData.input"
    .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 = 2
    .TextFileParseType = xlFixedWidth
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1)
    .TextFileFixedColumnWidths = Array(18, 18, 18)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

我将 .TextFileStartRow 值更改为1,这样我就可以获得 Headers 信息以及数据,但是它导致数据的输入与文本文件中的数据完全相同,而不是将每个传感器放入自己的列中 .

我只能假设有一种简单的方法可以导入 Headers 信息,或者单独保留此代码并单独导入第一行或者通过更改With块中的某些内容来获取超过4列 .

UPDATE

我已经找到了解决问题的方法,将原始代码原样保留,然后创建一个额外的子例程再次执行到从第1行而不是第2行开始的新工作表,然后我从该工作表中提取信息数据表 . 如果有人提出更清洁的解决方案,我会留在这里 .