2012-01-11 99 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