使用VBA将CSV文件读入到Excel中,然后将结果输出到特定的工作表。

3

我已经搜索了一段时间,但无法找到简单的解决方案。我的csv文件中包含数据,我希望使用vba将其读取到excel中,并将结果输出到特定工作表上的特定单元格范围内。

我一直在使用以下代码,但如果我两次运行excel宏,它基本上会将数据追加到下一个空列而不是复制过去。它也只将其粘贴到活动工作表而不是我指定的工作表。

有没有建议可以帮助我实现这个功能?

谢谢。

Public Sub Example()
    Const csPath As String = "starting_positions.csv"
    Dim ws As Excel.Worksheet
    Set ws = Excel.ActiveSheet
    With ws.QueryTables.Add("TEXT;" & csPath, ws.Cells(1, 1))
        .FieldNames = True
        .AdjustColumnWidth = True
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileCommaDelimiter = True
        ''// This array will need as many entries as there will be columns:
        .TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat)
        .Refresh
    End With
End Sub
1个回答

4
假设您在同一个工作簿中运行代码以收集CSV数据,请尝试以下操作:
  1. Set ws = Excel.ActiveSheet替换为Set ws = ThisWorkbook.Sheets(1)Set ws = ThisWorkbook.Sheets("Sheet1"),使用索引或名称定义任何特定的工作表。
  2. ws.UsedRange.ClearContents放置在先前的With...块之前将清除整个工作表,因此新数据将放置在与之前相同的位置。
另一个提示:如果您要多次使用此宏-不要每次都创建新连接。如果所有选项都相似-只使用.Refresh方法。
如果您陷入了代码部分合并的困境-请尝试使用宏记录器手动传递任何步骤。对于您的情况,这将解决大部分问题。祝你好运!

完美运行。谢谢! - user1898958
实际上这是一个后续问题。我只会在打开Excel表格时使用它一次。我应该担心关闭连接吗?还是现在这样就可以了? - user1898958
@user1898958 我认为这样的“连接”可以保持不变——我经常使用这样的一次性解决方案,甚至从未考虑过。但是,如果你确信这是一个“启动并忘记”的解决方案,请在连接设置选项块中的任何位置添加以下代码行:.Name = "Conn_Name",并在 End With 后添加 ThisWorkbook.Connections("Conn_Name").Delete。这将添加连接、重试数据,并在此后删除它。 - Peter L.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接