【问题标题】:Need VBA code to run faster需要 VBA 代码才能运行得更快
【发布时间】:2016-07-20 03:29:12
【问题描述】:

我刚刚开始在 Excel 中进行编码,这就是我所拥有的:

Public strKeyword

Sub DataSearch()
    Dim strKeyword As String

    strKeyword = ActiveSheet.Range("B4").Value

    strKeyword = "*" & strKeyword & "*"

    Application.ScreenUpdating = False

    Worksheets("List_of_Incidents").Visible = True
    Worksheets("List_of_Incidents").Select

    ActiveSheet.Range("$B$1:$B$500").AutoFilter Field:=1
    Range("B1").Select

    With ActiveSheet
        .AutoFilterMode = False
        With Range("B1", Range("B" & Rows.Count).End(xlUp))
            .AutoFilter 1, strKeyword, xlAnd

        End With

        AutoFilterMode = False

    End With

    CopyVisibleCells

End Sub

Sub CopyVisibleCells()

    Range("B1:D1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy

    Sheets("Search").Select

    Range("A9:C9").Select
    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
                                                                         , SkipBlanks:=False, Transpose:=False

    Columns("A:A").EntireColumn.AutoFit
    Rows("8:8").EntireRow.AutoFit

    Range("A8").Select
    Application.CutCopyMode = False

    If Range("A10") = "" Then ErrCapture

    Range("B4:B5").Select

    Worksheets("List_of_Incidents").Visible = False

End Sub

Sub ErrCapture()

    MsgBox ("Invalid Search! Please click New Search and Try Again")

    Exit Sub

End Sub

问题是:当我收到错误时,弹出错误消息需要很长时间,然后它会崩溃 Excel(没有响应)任何人都可以帮助我解决这个问题。

【问题讨论】:

标签: vba excel


【解决方案1】:

我重构了您的代码并删除了所有不必要的操作。

Sub DataSearch()
    Dim rFilteredData As Range
    Dim strKeyword As String

    strKeyword = "*" & Range("B4").Value & "*"

    Application.ScreenUpdating = False

    With Worksheets("List_of_Incidents")
        .AutoFilterMode = False

        .Range("B1", .Range("B" & Rows.Count).End(xlUp)).AutoFilter 1, strKeyword, xlAnd

        Set rFilteredData = Intersect(.Range("B:D"), .UsedRange)

        rFilteredData.Copy

        Sheets("Search").Range("A9").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
                                                                                                , SkipBlanks:=False, Transpose:=False
        AutoFilterMode = False

    End With

    Application.ScreenUpdating = True
End Sub

【讨论】:

  • 您好 Thomas,我尝试了您的代码,但它不再显示错误消息。
【解决方案2】:

它使 Excel 崩溃(没有响应)有谁能帮我解决这个问题。

Application.ScreenUpdating = False

是的,您必须重新打开 ScreenUpdating。

【讨论】:

  • 嗨,这不起作用。并完全冻结 Excel。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多