【问题标题】:VBA import multiple text files. Keeps moving dataVBA 导入多个文本文件。不断移动数据
【发布时间】:2016-03-10 20:17:24
【问题描述】:

我正在研究将文本文件导入工作表的宏。我录制了一个宏并稍微调整了代码以满足我的需要。我需要对多个文件执行此操作,因此我将代码复制并粘贴到其他宏中,但我遇到了问题。第一次迭代效果很好,但是当我运行第二次迭代时,它将我在多列中导入的原始数据从 AA 列开始向右移动,并将下一批数据发布到 A 列中,它应该在该列但更靠下的位置与第一批的最后一行数据。谁能建议为什么这不仅仅是在上一次迭代的最后一行下面添加新数据?这是我的代码。 (已编辑) - 我将粘贴到第二次迭代的代码更改为显示最后一行,而不是第一行被硬编码。

Sub Upload2()
row = ThisWorkbook.Sheets("Data Dump").Cells(Rows.Count, 1).End(xlUp).row
filepath = Worksheets("Upload").Cells(5, "H")
Worksheets("Data Dump").Activate
With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" + filepath, Destination:=Cells(row, "A"))
    '.CommandType = 0
    .Name = "bench test"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 65001
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(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

Dim Cn As Variant

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each Cn In ThisWorkbook.Connections
    Cn.Delete
Next Cn
For Each Cn In ActiveSheet.QueryTables
    Cn.Delete
Next Cn

Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

谢谢 最大

【问题讨论】:

  • 在发布错误代码后查看修改后的答案...
  • 你试过提供的答案了吗?

标签: excel vba text import


【解决方案1】:

编辑: 在发布给出错误的代码之后。

代码这样做是因为它从上一个文件的最后一行开始导入下一个文本文件。

替换这一行:

row = ThisWorkbook.Sheets("Data Dump").Cells(Rows.Count, 1).End(xlUp).row

有了这个

row = 2 + ThisWorkbook.Sheets("Data Dump").Cells(Rows.Count, 1).End(xlUp).row

建议添加2 行,以便每个文本文件之间留一个空白行,以便之后识别和完整性检查。

【讨论】:

  • 感谢 EEM。我复制了此宏的第一次迭代以在此处发布,但随后的迭代都具有您已经建议的行。 Sorru 我应该发布其中一个而不是第一个,因为它实际上可以正常工作。感谢您的输入。
  • 发布有效的作品一点也不聪明...而且,还没有发布有问题的作品...
  • 对不起,它在我的另一台电脑上。以后有机会我会发的。
【解决方案2】:

在较新版本的 excel 中,一旦使用了文本到列,整个工作表都会设置为从选择的列中执行此操作。

在随后的循环中跳过文本到列部分并将文件粘贴到 col A

或者先导入所有文件,然后再做。文本到列

【讨论】:

  • 非常感谢史蒂文。我会尝试这种方法。因此,如果我将文本跳过到包含此行中所有内容的列: With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;" + filepath, Destination:=Cells(row, "A")) 到此行正确的? .Refresh BackgroundQuery:=False End 感谢您的帮助,Max
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2021-05-08
  • 2019-09-21
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多