2012-03-09 136 views

回答

2

在工作表中需要自動更新的表格中,可以添加類似下面的代碼(僞代碼) - 每次更改時都會對錶格進行排序。請注意,如果您經常更新,它可能會變慢。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target is in the table (you can check Target.Row and Target.Column for example) Then 
     Sort the table 
    End If 
End Sub 

如果該區域被稱爲命名範圍NAMED_RANGE你能做到這一點,例如(不是很有效,但可讀):

Private Sub Worksheet_Change(ByVal Target As Range) 
    For Each c In [named_range] 
     If c = Target Then MsgBox "OK" 
    Next c 
End Sub 

或者你也可以做到這一點,這將有更好的表現是命名範圍很大:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim row_start As Long 
    Dim row_end As Long 
    Dim col_start As Long 
    Dim col_end As Long 

    row_start = [named_range].Cells(1, 1).Row 
    col_start = [named_range].Cells(1, 1).Column 
    row_end = row_start + [named_range].Rows.Count - 1 
    col_end = col_start + [named_range].Columns.Count - 1 

    If Target.Row >= row_start And Target.Row <= row_end And Target.Column >= col_start And Target.Column <= col_end Then 
     MsgBox "In range" 
    End If 

End Sub 
+0

感謝您的建議......我有一張表,第一列是Rank(使用rank函數)。所以等級根據更新的數據而改變。我如何監控整個範圍的變化(因爲它們不一定會全部改變)? – McB 2012-03-09 15:05:43

+1

假設範圍是A1:A5例如,您可以測試:如果Target.Row> = 1並且Target.Row <= 5並且Target.Column = 1然後... – assylias 2012-03-09 15:12:48

+0

我該如何去做它「IF Target IN namedRange Then「? – McB 2012-03-09 15:40:11

相關問題