计算文件大小 - VBA宏

时间:2018-02-21 09:34:53

标签: excel vba excel-vba

我正在开发一个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文件时,如果用户打开尺寸为>的CSV文件,我会向用户显示一个消息框。 1GB并关闭excel。
  2. 当用户使用宏打开CSV文件时,CSV文件大小< 1GB,然后用户添加一些数据,这将使其成为 尺寸> 1GB,我必须在文件大小达到1GB时向用户显示一个消息框并关闭excel而不丢失任何数据。
  3. 我的问题,

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

    需要帮助, 提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

请记住,如果细胞已经有了#34;某些东西"在其中,您必须减去此值(字符数/字节数),因为它将被覆盖。

答案 1 :(得分:1)

以下代码可能会对您有所帮助,在下面的代码中我使用了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