使用excel VBA将多个文本文件导入新的excel工作簿

使用excel VBA将多个文本文件导入新的excel工作簿,vba,excel,Vba,Excel,我编写了一个脚本,用于将多个以分号分隔的文本文件导入到每个选定文件的新工作簿中。除了在新工作簿中正确导入列之后,它似乎将所选文本文件中的所有数据粘贴到一列中之外,它还有大约99%的功能。我不完全确定代码的哪一部分导致将其粘贴到该特定行。下面是代码的主要部分。谁能确定问题可能在哪里 我只想对这里的社区说声谢谢。通过浏览这个论坛上的其他帖子,我学到了很多东西 FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Text Files

我编写了一个脚本,用于将多个以分号分隔的文本文件导入到每个选定文件的新工作簿中。除了在新工作簿中正确导入列之后,它似乎将所选文本文件中的所有数据粘贴到一列中之外,它还有大约99%的功能。我不完全确定代码的哪一部分导致将其粘贴到该特定行。下面是代码的主要部分。谁能确定问题可能在哪里

我只想对这里的社区说声谢谢。通过浏览这个论坛上的其他帖子,我学到了很多东西

FilesToOpen = Application.GetOpenFilename _
  (FileFilter:="Text Files (*.txt), *.txt", _
  MultiSelect:=True, Title:="Text Files to Open")



For i = LBound(FilesToOpen) To UBound(FilesToOpen)
    Set wkb = Workbooks.Open(FilesToOpen(i))
    Set wks = wkb.ActiveSheet
     With wks.QueryTables.Add(Connection:= _
        "TEXT;" & FilesToOpen(i), Destination:=Range("A1"))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .RefreshStyle = xlInsertDeleteCells
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
Next i

您的问题是如何使用
工作簿。请打开
以获取新的
工作簿。实际上,打开文本文件的方式与打开
file->Open
的方式相同。如果希望新的
工作簿
转储数据,请使用
Set wkb=Workbooks.Add()
显式创建它,而不是当前对
工作簿的调用。打开
。您正在查看该文件的数据,因为您首先打开了该文件

完整代码

FilesToOpen = Application.GetOpenFilename _
  (FileFilter:="Text Files (*.txt), *.txt", _
  MultiSelect:=True, Title:="Text Files to Open")



For i = LBound(FilesToOpen) To UBound(FilesToOpen)
    Set wkb = Workbooks.Add()
    Set wks = wkb.ActiveSheet
     With wks.QueryTables.Add(Connection:= _
        "TEXT;" & FilesToOpen(i), Destination:=Range("A1"))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .RefreshStyle = xlInsertDeleteCells
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
Next i

您希望输出到哪里?现在,您正在
wks
中创建一个
QueryTable
,它是
wkb
ActiveSheet
,您刚刚打开的文件。是否要在要打开的文件中显示输出?接下来,如果这是您想要的,那么
Destination:=Range(“A1”)
将确定
工作表上新表的实际起始位置。我正在尝试将输出放入正在打开的新文件中。对于我打开的每个文本文件,将创建一个新工作簿,并将数据发布到该新工作簿。它正在将数据发布到新工作簿中,但是它从文本文件中获取原始数据,并在正确导入数据之后将其发布到第一行,我有点不明白它为什么这样做。我可以简单地手动删除该行,但我想确定清理该过程的原因。您的代码正在以
工作簿
的形式打开文本文件,这与转到
文件->打开
相同。原始数据在那里,因为它在您开始时就在那里。如果您确实想要一个新的
工作簿
,则需要使用
Set wkb=Workbooks显式创建它。添加
而不是当前行。如果要创建与文本文件的数据连接,则无需
打开该文本文件<代码>连接
处理所有这些。谢谢拜伦。我仔细检查了我的代码,发现这行代码是个问题。有了你的建议,我看起来很好。