2014-09-24 85 views
-2

我對我的事件過程有很大的問題,它需要幾年運行時,我想一次改變更多的細胞。它是如何工作的,當用戶更改單元格中的數據時,Worksheet_Change會添加註釋,但首先Worksheet_SelectionChange會更新用戶的信息(我在不同的工作表中有計算ACT日期12個月的sumifs,然後通過活動工作表上的camer工具顯示)。我怎樣才能加速我的基於事件的過程?

在知道這個問題是不斷循環的事件cuz ... duno該怎麼辦?

Thx求助!

Option Explicit 
Private Sub Worksheet_Change(ByVal Target As Range) 

Dim cell As Range 

ActiveSheet.Unprotect Password:="xyz" 

For Each cell In Target 

     If cell.Row > 21 And cell.Column > 9 Then 

      If cell.Comment Is Nothing Then 
       cell.AddComment Now & " - " & cell.Value & " - " & Application.UserName 
      Else 
       If Val(Len(cell.Comment.Text)) > 255 Then 
        cell.Comment.Delete 
        cell.AddComment 
        cell.Comment.Text _ 
        Now & " - " & cell.Value & " - " & Application.UserName, 1 _ 
        , False 
       Else 
        cell.Comment.Text _ 
        vbNewLine & Now & " - " & cell.Value & " - " & Application.UserName, Len(cell.Comment.Text) + 1 _ 
        , False 
       End If 
      End If 

     cell.Comment.Shape.TextFrame.AutoSize = True 

     End If 

Next cell 

ActiveSheet.Protect Password:="11opkLnm890", AllowFiltering:=True 

End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

Dim RowNumber As Long, i As Long 
Dim MaxRowNumber As Long 

MaxRowNumber = Range("A9").Value 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
Application.EnableEvents = False 

RowNumber = Target.Row 

Set sh_AUXILIARY_PT = ThisWorkbook.Worksheets("AUXILIARY_PT") 

    If Target.Row > 21 And Target.Row < MaxRowNumber Then 

     sh_AUXILIARY_PT.Range("AA4").Value = Cells(RowNumber, 1).Value 
     sh_AUXILIARY_PT.Range("AB4").Value = Cells(RowNumber, 2).Value 
     sh_AUXILIARY_PT.Range("AC4").Value = Cells(RowNumber, 3).Value 
     sh_AUXILIARY_PT.Range("AD4").Value = Cells(RowNumber, 4).Value 

     For i = 14 To 25 

     sh_AUXILIARY_PT.Cells(8, i).Value = Cells(RowNumber, i - 4).Value 

     Next i 

    End If 

Application.EnableEvents = True 
Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 
End Sub 

回答

0

好吧,您可以考慮將您的收集範圍分配給一個數組,然後循環,因爲數組速度更快。