Excel Worksheet_Change не работает - PullRequest
1 голос
/ 11 января 2012

Не удалось запустить событие Worksheet_Change и не уверен, почему.Ячейка B5 является частью сводной таблицы, и когда это значение изменяется, необходимо вызвать и запустить другую подпрограмму (и эта подпрограмма работает)

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

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Как уже указывал Remnant, у вас есть опечатка. Не уверен, что вы имели в виду B5 или B25.

В вашем коде нет ничего плохого. Если B25 находится в Target, ваш макрос ChangeTitle будет запущен. Если макрос не запущен, просто B25 не находится в Target.

Кстати, вы можете уменьшить код в событии изменения до

Private Sub Worksheet_Change(ByVal Target As Range)

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

End Sub
0 голосов
/ 11 января 2012

Хорошо, я протестировал код, и этот код работает.

Вставьте это в Модуль

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».

Надеюсь, это то, что вы хотели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...