[英]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.