如果单元格值被另一个模块更改,则excel on change无法正常工作

时间:2017-10-23 15:58:21

标签: excel vba excel-vba

我有一个范围,其值实时更改,但如果该范围的其他模块更改了值,则onchange模块不执行任何操作。但如果我手动更改值,它的工作原理。 代码: -

      Private Sub Worksheet_Change(ByVal Target As Range)

 Dim rng As Range
 Dim lastRow As Long
Dim cell As Range


 If Not Intersect(Target, Range("J10:J43")) Is Nothing Then

  Application.EnableEvents = False

    For Each cell In Target

    If cell.Value < cell.Offset(0, 4).Value Then
    cell.Offset(0, 7).Value = cell.Offset(0, 1).Value
    'Module1.OnGenOrder

         End If
        Next cell




   End If

  Application.EnableEvents = True

 End Sub

注意: - 我认为模块Private Sub Worksheet_Change(ByVal Target As Range) 无法感知变化。该值由另一个外部.xla文件中的模块更改。但是通过简单的公式(如= a1 + b1)进行更改效果很好

更新

这是要监控的单元格代码

 =c:\Excelmacros\updateprice.xla!dataupdate($H12,"price1")

1 个答案:

答案 0 :(得分:0)

事件处理程序过程有一个简单的命名约定:

Private Sub [EventSource]_[EventName]([args])

查看事件源如何Worksheet,看起来您的处理程序位于某个工作表的代码隐藏模块中;这只会响应 工作表上的Change个事件

如果要在Change中的任何工作表上处理ThisWorkbook事件,请在代码隐藏模块中处理SheetChange类的Workbook事件{ {1}}:

ThisWorkbook

注意如何将更改的工作表作为参数接收。

如果您要在其他工作簿中的任何工作表上处理Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) End Sub 工作表事件,那么您需要一个类模块和一个Change字段 - WithEvents代码隐藏可以服务(毕竟,工作簿 是一个类),为了简单起见:

ThisWorkbook

您需要Private WithEvents app As Excel.Application Setapp事件源到适当的Excel.Application对象引用(例如,在Open ThisWorkbook处理程序中然后你可以处理应用程序范围的事件:

Private Sub Workbook_Open()
    Set app = Excel.Application
End Sub

Private Sub app_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   MsgBox "Cell " & Target.Address(External:=True) & " was changed."
End Sub