繁体   English   中英

VBA 运行脚本,用于当另一个工作簿中的特定单元格发生更改时

[英]VBA running script for when a specific cell in another workbook changes

尝试创建一个脚本来检测另一个工作簿中的单元格何时更改“B2”,一旦检测到更改,它将运行已经创建并正在运行的宏 RUNALL。 Runall 将运行许多不同的宏,这些宏保存为 pdf 并向客户发送 email。 任何帮助将不胜感激

    Sub Worksheet_Changes(ByVal Target As Range)

' Run the code when cell B2 is changed
If Target.Address = Workbook("M:\Wholesale\Test.xlsx").Sheet("Sheet1").Range("B2").Address Then


Call RUNALL

End If
End Sub

阅读应用程序事件: https://docs.microsoft.com/en-us/office/troubleshoot/excel/create-application-level-event-handler

在 class 模块clsAppEvents

Option Explicit

Private WithEvents app As Excel.Application
Private cellToMonitor As Range

Private Sub app_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Parent.Name = cellToMonitor.Worksheet.Parent.Name Then
        If Sh.Name = cellToMonitor.Worksheet.Name Then
            If Not Application.Intersect(Target, cellToMonitor) Is Nothing Then
                Debug.Print "Changed " & cellToMonitor.Address & " on " & _
                             Sh.Name & " in " & Sh.Parent.Name
            End If
        End If
    End If
End Sub

Private Sub Class_Initialize()
    Set app = Application
End Sub

Property Set TheCell(c As Range)
    Set cellToMonitor = c
End Property

在常规模块中:

Option Explicit

Private obj

Sub Tester()
    Set obj = New clsAppEvts
    Set obj.TheCell = Workbooks("Book2").Sheets(1).Range("A3") 'for example
End Sub

正如 BigBen 所指出的,仅当脚本所在的工作表发生更改时才会触发Worksheet_Changes ,因此您应该将宏移动到位于另一个工作簿(遭受更改的工作簿)上的工作表代码。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$2" Then
        Application.Run ("'M:\Wholesale\My_Book.xlsm'!RUNALL")
    End If
End Sub

由于 RUNALL 宏将位于不同的工作簿中,因此您应该使用Application.Run()方法,因为 findwindow 还指出要引用不同的工作簿。 在这种情况下,“My_book.xlsm”是包含 RUNALL 宏的那个。

此外,请注意Workbook("M:\Wholesale\Test.xlsx").Sheet("Sheet1").Range("B2").Address只会返回$B$2 ,这两个工作簿之间没有区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM