繁体   English   中英

Worksheet_Change 目标范围太慢

[英]Worksheet_Change target range is too slow

我有一个用于更改公式的 excel 宏。 问题是尽管宏可以工作,但它会使更新 Excel 工作表变得相当滞后。 有什么建议吗?

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    If Target.Columns.Count < Me.Columns.Count Then
        If Target.Column = 4 Then
            If Target.Row >= 49 And Target.Row <= 178 Then
                Dim r As Integer
                For r = 49 To 178
                    'AD = 30
                    Dim MatType As String
                    MatType = Cells(r, 4).Value
                    If MatType = "" Then
                        Cells(r, 30).Value = "0"
                    Else
                        MatType = LCase(MatType)
                        'Plechy
                        'Trubky
                        'Jine
                        If MatType = "pzs" Or MatType = "pzt" Or MatType = "Tahokov" Then
                            Cells(r, 30).Value = "=(I" & r & " * J" & r & "*L" & r & ") * 2/1000000"
                        ElseIf MatType = "jac" Or MatType = "jao" Or MatType = "tr" Or MatType = "u" Or MatType = "kr" Or MatType = "L" Or MatType = "op" Or MatType = "Trubky_spec" Then
                            Cells(r, 30).Value = "=(F" & r & "*I" & r & "*L" & r & ")/1000000"
                        Else
                            Cells(r, 30).Value = "0"
                        End If
                    End If
                Next
            End If
        End If
    End If

    Application.EnableEvents = True
End Sub

这只会循环那些改变的:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo safeout
    Application.EnableEvents = False
    Dim rng As Range
    Set rng = Intersect(Range("D49:D178"), Target)

    If Not rng Is Nothing Then
        Dim rngCell As Range
        For Each rngCell In rng
            Dim r As Long
            r = rngCell.Row
            'AD = 30
            Dim MatType As String
            MatType = LCase$(rngCell.Value)                      
            'Plechy
            'Trubky
            'Jine
            Select Case MatType
                Case "pzs", "pzt", "Tahokov"
                    Cells(r, 30).Value = CDbl(Cells(r, "I")) * Cells(r, "J") * Cells(r, "L") * 2 / 1000000
                Case "jac", "jao", "tr", "u", "kr", "L", "op", "Trubky_spec"
                    Cells(r, 30).Value = CDbl(Cells(r, "I")) * Cells(r, "F") * Cells(r, "L") / 1000000
                Case Else
                    Cells(r, 30).Value = 0
            End Select
        Next
    End If
safeout:
    Application.EnableEvents = True
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM