for循环中的慢.value函数

时间:2015-01-16 15:52:12

标签: performance excel-vba for-loop find vba

我一直在使用这个网站,这对我来说非常有用。首先,我要感谢所有贡献者。但是我遇到了一个问题,无法找到解决方案。

我不是专业的程序员或程序员,我只使用excel VBA来改进我们在工作中使用的一些报告工具。这就是为什么我可能做了非常基本的错误,请不要恨我:)。

所以,我正在尝试创建基本库存跟进工具,该工具将在主表(Followup Sheet)中包含一些部件号,并且每天负责将一些值粘贴到传入工作表(WebDOS Pivot),使用我的宏我计划在现有的部件中查找传入的部件号,如果有,则将输入的值输入到相关的单元格。

我的.find函数运行良好,但是当我添加代码将值复制到相关单元格时,宏开始运行速度很慢。你们知道我做错了什么,或者我怎样才能提高这段代码的性能?提前谢谢。

Dim WebDOSLastRow As Long
Dim WDS As Worksheet
Dim FUS As Worksheet
Dim PUS As Worksheet
Dim SearchResult As Range
Set WDS = Sheets("WebDOS Pivot")
Set FUS = Sheets("Followup Sheet")
Set PUS = Sheets("Part Usage Pivot")
WebDOSLastRow = WDS.Range("A3").End(xlDown).Row
    For i = 5 To WebDOSLastRow - 1
        With FUS.Range("E:E")
            Set SearchResult = .Find(What:=WDS.Range("A" & i).Value, _
            After:=Range("E5"), _
            LookIn:=xlValues, _
            LookAt:=xlWhole, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False)
            If Not SearchResult Is Nothing Then
                FUS.Range("K" & SearchResult.Row).Value = WDS.Range("C" & i).Value + FUS.Range("K" & SearchResult.Row).Value
                Else
                'Coding Will Come Here for not found items
            End If
        End With
            Application.StatusBar = "Searching " & i & "/" & WebDOSLastRow
    Next
        Application.StatusBar = False
End Sub

1 个答案:

答案 0 :(得分:0)

我已经设法在发布后立即解决了我的问题,这表明我之前没有努力:),所以简单地切换到手动计算解决了慢速运行问题。这是新代码。

WebDOSLastRow = WDS.Range("A3").End(xlDown).Row

Application.Calculation = xlCalculationManual '<---- Switching to manual calculation

For i = 5 To WebDOSLastRow - 1
    With FUS.Range("E:E")
        Set SearchResult = .Find(What:=WDS.Range("A" & i).Value, _
        After:=Range("E5"), _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False)
        If Not SearchResult Is Nothing Then
            FUS.Range("K" & SearchResult.Row).Value = WDS.Range("C" & i).Value + FUS.Range("K" & SearchResult.Row).Value
            Else
            'Coding Will Come Here for not found items
        End If
    End With
    Application.StatusBar = "Searching " & i & "/" & WebDOSLastRow
Next
    Application.StatusBar = False
    Application.Calculation = xlCalculationAutomatic