簡體   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