2012-01-11 95 views
1

無法使Worksheet_Change事件運行並且無法確定原因。小區B5是數據透視表的一部分,當值發生變化,需要調用並運行不同的子(和子工作)Excel Worksheet_Change無法正常工作

Private Sub Worksheet_Change(ByVal Target As Range) 
'MsgBox ("run private") 
Dim WatchRange As Range 
Dim IntersectRange As Range 
Set WatchRange = Range("b25") 
Set IntersectRange = Intersect(Target, WatchRange) 
If IntersectRange Is Nothing Then 
    'MsgBox ("do nothing") 
Else 
    'MsgBox ("run macro") 
    Call ChangeTitle 
End If 
End Sub 

Sub ChangeTitle() 
' 
' 
Dim Mytitle As Range 
Set Mytitle = Worksheets.Item("Current").Range("b25") 

ActiveSheet.PivotTables("PVTRatingTech").PivotFields("title").CurrentPage = _ 
    Mytitle.Text 


End Sub 
+1

是不是因爲你正在試圖運行代碼時'B5'的變化,但你的代碼'B25'編碼?這是一個簡單的錯字? – 2012-01-11 19:38:38

回答

0

好吧,我測試的代碼和此代碼的工作。

模塊粘貼此

Public Oldval As Variant 
Public NewVal As Variant 

工作簿粘貼此代碼區域

'~~> Replace Sheet1 with the actual sheet name 
Private Sub Workbook_Open() 
    Oldval = Sheets("Sheet1").Range("B5").Value 
End Sub 

並粘貼此在工作表代碼區域

Private Sub Worksheet_Calculate() 
    NewVal = Sheets("Sheet1").Range("B5").Value 
    If Oldval <> NewVal Then 
     Oldval = NewVal 
     ChangeTitle 
    End If 
End Sub 

Sub ChangeTitle() 
    Dim Mytitle As Range 

    Set Mytitle = Worksheets.Item("Current").Range("b25") 

    ActiveSheet.PivotTables("PVTRatingTech").PivotFields("title").CurrentPage = _ 
    Mytitle.Text 
End Sub 

保存並關閉您的工作簿並再次打開。現在當你刷新你的Pivot,如果B5改變,那麼「ChangeTitle」將會運行。

希望這是你想要的嗎?

0

正如Remnant已經指出的,你確實有一個錯字。不知道你是否指B5或B25。

你的代碼沒有問題。如果B25在目標中,那麼您的ChangeTitle宏將運行。如果宏沒有運行,那麼只需B25不在目標中。

在一個側面說明,你可以在你的改變事件減少代碼

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Intersect(Target, Range("b25")) Is Nothing Then Call ChangeTitle 

End Sub