【问题标题】:Calculate the file size - VBA macro计算文件大小 - VBA 宏
【发布时间】:2018-02-22 01:25:51
【问题描述】:

我正在开发一个 VBA 宏,它将通过创建一个临时文件来处理一个 CSV 文件。 我正在使用Microsoft Excel 2010 32-bit。 32 位版本有2 Gigabyte 内存限制。

使用宏处理的 CSV 文件大小 > 1GB。 如前所述,在处理 CSV 文件时,我们将其保存到临时 *xls 文件中。 因此,处理 CSV 文件时的总大小将是我们在处理过程中创建的 size of CSV file + size of the temp xls 文件。 这两个文件的大小加在一起超过了 2GB 的限制,因此 excel 崩溃了。

我们有两个场景:

  1. 当用户使用宏打开 CSV 文件时,如果用户打开大小大于 1GB 的 CSV 文件并关闭 excel,我会向用户显示一个消息框。
  2. 当用户使用宏打开 CSV 文件,并且 CSV 文件大小 1GB,我必须在文件大小达到 1GB 时立即向用户显示一个消息框并关闭 excel 而不会丢失任何数据。

我的问题,

  • 对于第一种情况,我可以使用 FileLen,它返回一个 Long 值,指定文件的长度(以字节为单位)。
  • 对于第二种情况:当用户使用宏编辑 CSV 文件时,我不知道如何计算文件大小。

需要帮助, 提前致谢。

【问题讨论】:

  • 你能用FileWatcher吗?作为想法:大型 csv 文件可以拆分为较小的文件,例如每 1000 行转到单独的文件。然后将关闭原始文件并从每个小文件开始处理。

标签: vba excel


【解决方案1】:

一个字符 = 1 个字节。因此,当用户修改 CSV 时,您可以通过以下方式跟踪更改:

在单元格值更改事件中,您将单元格中的字符数量 + 1(用于逗号或任何其他分隔符)作为字节数量添加到文件大小的开头。这样你可以在修改文件时控制大小。

请记住,如果单元格中已经包含“某些东西”,则必须减去该值(字符/字节的数量),因为它将被覆盖。

【讨论】:

  • 抱歉忘了提,该文件也包含 unicode 字符。
  • 好的,处理unicode字符可以参考this SO post
【解决方案2】:

下面的代码可能会对您有所帮助,在下面的代码中,我使用了 1 MB 作为参考。您可以将其更改为 1GB 或根据您的属性。


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call FileSize
End Sub

Sub FileSize()
    Dim LResult As Long
    strFileFullName = ActiveWorkbook.FullName
    LResult = FileLen(strFileFullName)
    If LResult > 1000 Then
        MsgBox "FileSize is large " & (LResult)
        ActiveWorkbook.Close (savechanges)
    End If
End Sub

【讨论】:

  • FileLen 以字节为单位返回大小,1000 表示,1KB 不是 MB
猜你喜欢
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2010-12-22
  • 2012-02-06
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多