如果单元格值被另一个模块更改,则更改不起作用
我有一个范围,其价值是实时变化,但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
注意: – 我认为模块私人小组Worksheet_Change(BYVAL目标作为范围)是无法感知变化。 该值由另一个外部.xla文件中的模块更改。 但通过简单的公式如= a1 + b1的变化运作良好
更新
这是要监视的单元的代码
=c:\Excelmacros\updateprice.xla!dataupdate($H12,"price1")
事件处理程序过程有一个简单的命名约定:
Private Sub [EventSource]_[EventName]([args])
看看事件源是如何Worksheet
,它看起来像你的处理程序是在一些工作表的代码隐藏模块; 那将只对该工作表上的“ Change
事件作出响应。
如果要处理ThisWorkbook
任何工作表上的Change
事件,请在ThisWorkbook
的代码隐藏模块中处理Workbook
类的SheetChange
事件:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) End Sub
注意如何将更改后的工作表作为参数接收。
如果要在其他工作簿中的任何工作表上处理Change
工作表事件,则需要一个类模块和一个WithEvents
字段 – 为了简单起见,可以使用ThisWorkbook
代码隐藏(毕竟,工作簿是一个类):
Private WithEvents app As Excel.Application
您需要根据需要将该app
事件源设置为有效的Excel.Application
对象引用(例如,在ThisWorkbook
的Open
处理程序中),然后可以处理应用程序范围内的事件:
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