EXCEL VBA:如何提高此代码的速度

时间:2015-06-24 13:42:09

标签: excel vba excel-vba

此代码有效。由于它有太多的循环,循环内部循环,这非常缓慢。我们怎样才能提高这个程序的速度? 我正在尝试将范围从一个文件复制到另一个文件夹中的同名文件。我的文件夹名为" A"," B"," C" ..." G"在" c:\ Charts \ 1 \" &安培; " C:\图表\ 0 \&#34 ;.在每个文件夹内" A"," B"," C" ..." G"有一些名为1,2,3,4,... 10的文件。

我的代码就像这样

vArr = Array("A", "B", "C", "D", "E", "F", "G")
Dim fileName1, Pathname1 As String
Pathname1 = "c:\Charts\1\"
Pathname="c:\charts\0\"
For Each vFile1 In vArr1
    fileName1 = Dir(Pathname1 & vFile1 & "\" & "*.xlsx")
    Do While fileName1 <> ""
        For Each vFile In vArr
            filename = Dir(Pathname & vFile & "\" & "*.xlsx")
            Do While filename <> ""
                If filename = fileName1 Then
                Set WB1 = Workbooks.Open(Pathname1 & vFile & "\" & fileName1)
                    WB1.Application.ScreenUpdating = False
                    WB1.ActiveSheet.Range("M1:M30").Copy
                    WB1.Close (False)
                Set WBD1 = Workbooks.Open(Pathname & vFile & "\" & filename)
                WBD1.ActiveSheet.Range("C1").Select
                    WBD1.ActiveSheet.Paste
                    WBD1.ActiveSheet.Cells(1, 3).Value = "HSI Q4 2014-15"
                    WBD1.Close (True)
                    filename = Dir()
                Else

                End If
                fileName1 = filename
            Loop
        Next
    Loop
Next

我们如何才能更快地完成这项工作?

1 个答案:

答案 0 :(得分:1)

我很惊讶这段代码&#34;做了它需要做的事情&#34;。我看到以下错误。

错误1:同时只能打开一个Dir()。您使用两个嵌套的Dir()

Bug2:看看循环:

Do While filename <> ""
    If filename = fileName1
    ...
    End if
    fileName1 = filename
Loop

如果在第一次迭代时filename不等于filename1,那么它将在第二次迭代中,但是,不能确保该文件存在于pathname1中因为没有通过调用最顶层Dir()获得它(你不能这样做,因为第二个Dir()取代了第一个{。}}。

也许您应该首先指定此代码应该执行的操作。