Excel Worksheet_Change не обнаруживает изменений - PullRequest
0 голосов
/ 02 апреля 2020

К сожалению, Worksheet_change не работает для меня. Я использую лист, где первый столбец является функцией NOW (). Если я щелкну в любом месте в Excel, время в этой ячейке изменится, но Worksheet_Change просто не обнаружит его.

A2 использует = NOW ()

Кто-нибудь знает, как решить эту проблему ? Я пробовал несколько разных способов, и никто не работает.

'Option Explicit
'Option Base 1
Dim xVal As Double
'Update by Extendoffice 2018/8/22
'Private Sub Worksheet_Calculate(ByVal Target As Range)
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Address = Range("$A$2").Address Then
        'Rows(3).Insert Shift:=xlDown
        'Range("$A$3").Value = Now
        'Range("$B$3").Value = xVal
        'Range("$C$3").Value = Range("$C$2").Value
    'Else
        If xVal <> Range("$B$2").Value Then
            Debug.Print xVal & " <- xVal IF"
            Debug.Print Range("B2").Text & "<- Text IF"
            Rows(3).Insert Shift:=xlDown
            Range("$A$3").Value = Now
            Range("$B$3").Value = xVal
            Range("$C$3").Value = Range("$C$2").Value
        End If
    End If
    Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    xVal = Range("$B$2").Value
End Sub

1 Ответ

1 голос
/ 02 апреля 2020

Исследование события Worksheet_Calculate *

Диск Google

Ячейка A2 в рабочем листе Sheet1 содержит формулу =B2.

Лист1

Option Explicit

Private Sub Worksheet_Calculate()
    WsCalc
End Sub

' Only to trigger the calculate event when different cell is selected.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ThisWorkbook.Worksheets("Sheet1").Range("B2") = Int(Rnd() * 2 + 1)
End Sub

ThisWorkbook

Option Explicit

Private Sub Workbook_Open()
    WsCalc
End Sub

Module1

Option Explicit

Public lngSource As Long ' Current Source Value

Sub WsCalc()

    Dim rngSource As Range        ' Source Cell Range

    ' Create a reference to Source Cell Range (rngSource).
    Set rngSource = ThisWorkbook.Worksheets("Sheet1").Range("A2")

    ' When the workbook opens, Current Source Valuec (lngSource) is equal to "".
    ' Therefore:
    If lngSource = 0 Then
        ' Initialize Current Source Value (lngSource) i.e. write value
        ' of Source Cell Range (rngSource) to Current Source Value (lngSource).
        lngSource = rngSource.Value
        MsgBox "Monitoring started (lngSource=" & lngSource & ")."
        Exit Sub
    End If

     ' If you need disabling events, this is how you implement it. Not needed
     ' in this code.
'    Application.EnableEvents = False
        On Error GoTo ProgramError
        ' Check value of Source Cell Range (rngSource)
        ' against Current Source Value (lngSource).
        If rngSource.Value <> lngSource Then
            ' The value has changed.
            MsgBox "The value has changed from '" & lngSource & "' to '" _
              & rngSource.Value & "'."
            lngSource = rngSource.Value
        Else
            ' The value hasn't changed (usually no code).
            MsgBox "Value NOT changed, still '" & lngSource & "'"
        End If

SafeExit:
'    MsgBox "Enabling events before exiting."
'    Application.EnableEvents = True
Exit Sub

ProgramError:
    ' Improve this error handling.
    MsgBox "An unexpected error occurred."
    On Error GoTo 0
    GoTo SafeExit

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