【问题标题】:Error while reading CSV with VBA使用 VBA 读取 CSV 时出错
【发布时间】:2016-07-11 12:38:44
【问题描述】:

我正在尝试使用 VBA 读取 CSV。关注this tutorial 时,我得到以下代码:

Sub OpenTextFile()

Dim FilePath As String
FilePath = "C:\path\to\file\mycsv.csv"
Open FilePath For Input As #1
row_number = 0

Do Until EOF(1)
    Line Input #1, LineFromFile
    LineItems = Split(LineFromLine, ",")

    ActiveCell.Offset(row_number, 0).Value = LineItems(2)
    ActiveCell.Offset(row_number, 1).Value = LineItems(1)
    ActiveCell.Offset(row_number, 2).Value = LineItems(0)

    row_number = row_number + 1
Loop

Close #1

End Sub

这是我的 CSV:

peter,paris,23
mary,london,34
steve,rome,56
lily,madrid,65

执行代码时出现错误:

索引超出范围

并且这条线被标记为黄色:

ActiveCell.Offset(row_number, 0).Value = LineItems(2)

【问题讨论】:

  • 发生此错误时ActiveCell 与什么范围相关?
  • @MacroMan:我是 VBA 新手。我已经提供了有关我所拥有的错误的唯一信息。那就是错误信息和错误行。
  • “我是 VBA 新手”还不够好,你不能用谷歌搜索 RangeActiveCell 是什么意思?如果你不努力解决你的问题,那么人们就不会努力回答它。
  • 一切似乎都是正确的。然而,有没有可能只有一个逗号的LineFromLine?你检查过LineFromLine吗?也许添加一个Debug.Print LineFromLine 并在split 之后添加一个断点以检查LineItems 的项目计数:Debug.Print UBound(LineItems) - LBound(LineItems) + 1

标签: vba excel csv


【解决方案1】:

你有一个错字:

LineItems = Split(LineFromLine, ",")

应该是

LineItems = Split(LineFromFile, ",")

如果您在模块开头使用Option Explicit,则不会发生这种情况;)

【讨论】:

  • 如果这真的解决了问题,那么这是另一个总是每个模块顶部包含Option Explicit的好案例。
  • 这确实是一个错字。谢谢。
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
相关资源
最近更新 更多