我的vba宏拥有太多所有权,并且速度太慢

时间:2019-03-28 15:21:40

标签: excel vba performance

我需要在excel中编写一个名为“ refresh”的简单宏,该宏可以执行以下操作:

  1. 它将清除当前工作表
  2. 它循环遍历指定文件夹中的所有excel文件。每个文件仅包含一张纸
  3. 它将所有这些工作表的内容合并到一个工作表中,只需将它们在目标文件中彼此相邻地添加即可。
  4. 任何源文件发生更改时,目标文件中都不会发生任何事情,直到再次调用“刷新”宏

我写了一些代码,效果很好。但是,它有两个问题:

  1. 运行非常慢,我相信必须有一个更快的方法
  2. 在关闭并重新打开excel之前,无法读取我读取的所有文件

因为我是vba的新手,所以我想寻求帮助来解决这些问题

这是我尝试过的代码:


    Dim ExcelObj As Object
    Dim ExcelBook As Object
    Dim ExcelSheet As Object

    Cells.ClearContents


    Path = ThisWorkbook.Path & "\Sources\"
    File = Dir(Path & "*.xls*")
    Idx = 1

    RowIdx = 3


    Set ExcelObj = CreateObject("Excel.Application")
    Do Until File = ""

        ExcelObj.Workbooks.Open Path & File
        Set ExcelBook = ExcelObj.Workbooks(1)
        Set ExcelSheet = ExcelBook.Worksheets(1)

        If Idx = 1 Then
            Offset = 0
        Else
            Offset = 1
        End If

        nr = ExcelSheet.UsedRange.Rows.Count
        nc = ExcelSheet.UsedRange.Columns.Count

        tmp = ExcelSheet.Range(Cells(1 + Offset, 1).Address(), Cells(nr, nc).Address()).Value
        Range(Cells(RowIdx, 1).Address(), Cells(RowIdx + nr - 1 - Offset, nc).Address()).Value = tmp
        RowIdx = RowIdx + nr - Offset

        File = Dir
        Idx = Idx + 1

        Set ExcelSheet = Nothing
        Set ExcelBook = Nothing

    Loop
    Set ExcelObj = Nothing

如前所述,该代码可以正常运行,至少就我在测试中可以看到的程度而言。但是它非常慢,并且不会释放我已阅读的文件。

0 个答案:

没有答案