【问题标题】:Reading files into a spreadsheet using VBA is very slow使用 VBA 将文件读入电子表格非常慢
【发布时间】:2014-02-05 16:42:50
【问题描述】:

我正在使用以下 VBA 代码将一个相当大的文本文件导入电子表格,但这似乎需要很长时间。 (每个单元大约 0.0064 秒,当文件大得多时,这很快就会变得太多。)文件只是存储在本地,所以这不是问题。

我的代码目前如下所示:

Public Sub DataImport(fullFileName As String, worksheetName As String, cellName As String)
'Move to the sheet and desired first cell
ActiveWorkbook.Sheets(worksheetName).Activate
Range(cellName).Activate

Open fullFileName For Input As #1
' Copy the file into the excel sheet
row_number = 0
Do Until EOF(1)
    Line Input #1, LineFromFile
    LineItems = Split(LineFromFile, vbTab)
    For i1 = LBound(LineItems) To UBound(LineItems)
        ActiveCell.Offset(row_number, i1).Value = LineItems(i1)
        On Error Resume Next
        ActiveCell.Offset(row_number, i1).Value = ActiveCell.Offset(row_number, i1).Value * 1
    Next i1
    row_number = row_number + 1
Loop

Close #1
End Sub

编辑:我正在开发 Office For Mac,最终产品应该可以在 Windows 和 OS X 上运行。

非常感谢您对此提供的所有帮助!

亲切的问候

【问题讨论】:

  • 试试this方法
  • 还有OpenTextFile MethodOpenAsTextStream MethodReadReadLine方法;我用得最多的那个。
  • 感谢您的提示,我已尝试实现 OpenAsTextStream 方法。不幸的是,自从我在 OS X 中工作以来,我遇到了一个问题,显然该环境不支持“CreateObject”方法。 (最终产品应该可以在 Windows 和 OS X 环境中使用。)我已经调整了最初的问题。
  • @SiddharthRout:您建议的最后一种方法非常适合我的目的,它非常简单,但可以以非常高的速度导入文件!谢谢!
  • 很高兴能帮上忙 :)

标签: macos vba excel io


【解决方案1】:

有问题的代码适用于打开更新的活动工作表(默认)。这意味着 Excel 必须在每次更新单元格时重新绘制屏幕并重新计算工作表。尝试在导入期间使用“Application.ScreenUpdating = False”禁用更新。缺点是,Excel 在更新期间变得无响应。最后,重新开启屏幕更新。

【讨论】:

  • 这个也是导入数据的好帮手,不知道这个选项。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
相关资源
最近更新 更多