返回列表 上一主題 發帖

[發問] 有兩個獨立EXCEL,如何知道切換到另一個獨立EXCEL?

試試看(測試環境 : Win7 + Office2013)
azrael19 發表於 2015-7-25 18:22


哇!哇!哇!真的太....太棒了!
非常感謝azrael19大,出手相救!(連檔案路徑都幫忙擷取出來了,太感動了!)
原來需要這麼多的代碼才能知道檔名(汗顏中...),
看來這需要花一些時間去理解與吸收,再次感謝azrael19大!

TOP

[版主管理留言]
  • GBKEE(2015/7/26 07:14): 不好意思,沒看清楚是連結網址,就刪文,請重發文.

連附上原創者答案的連結都會莫名其妙被砍.... 無言

TOP

連附上原創者答案的連結都會莫名其妙被砍.... 無言
bobomi 發表於 2015-7-26 06:36


也非常感謝bobomi大姊!
昨天我也有看到你貼超連結,只是今早就沒看見了,可能是系統的問題吧。

能否再提供你昨天的網站連結呢?
讓我也一併吸收,再次感謝您!

TOP

[發問] 有兩個獨立EXCEL,如何知道切換到另一個獨立EXCEL?

各位前輩們大家好,

A.xlsm 為中心(請搭配下圖),若切換到 C.xlsx(屬同一個獨立EXCEL 1),則會觸發 Private Sub Workbook_Deactivate() 程序。
若從 A.xlsm 切換到 A2.xlsx(屬於另一個獨立EXCEL 2),卻不會觸發 Private Sub Workbook_Deactivate() 程序。



心得
觸發Private Sub Workbook_Deactivate() 只能在同一個獨立EXCEL內的活頁簿間切換,才就會執行該程序。
但,若是切換另一個獨立EXCEL時,對A.xlsm而言是沒有變化的。

問題
代碼該如何修正?才能知道有切換到另一個獨立EXCEL。
請各位前輩們出手相救!感恩!
  1. Private Sub Workbook_Deactivate()
  2. msgbox "有切換"  
  3. End Sub
複製代碼

也非常感謝bobomi大姊!
昨天我也有看到你貼超連結,只是今早就沒看見了,可能是系統的問題吧。

能 ...
justintoolbox 發表於 2015-7-26 06:44


網址:
https://social.msdn.microsoft.com/Forums/office/en-US/e3e99712-01a7-483e-bf0e-52bb1f94889c/how-to-use-accessibleobjectfromwindow-api-in-vba-to-get-excel-application-object-from-excel?forum=exceldev

還有不好意思讓bobomi前輩您不開心,以後回文我會注意加上參考資料來源,希望您能見諒!

TOP

各位前輩們大家好,

以 A.xlsm 為中心(請搭配下圖),若切換到 C.xlsx(屬同一個獨立EXCEL 1),則會觸發 ...
justintoolbox 發表於 2015-7-26 07:05


各位前輩們,不知道能否做到 切換到另一個獨立EXCEL時觸發程序?
拜託各位高手前輩們解惑!

TOP

本帖最後由 GBKEE 於 2015-7-27 14:03 編輯

回復 16# justintoolbox



Module1的程式碼
  1. Option Explicit
  2. Public xApp As New Class1
  3. Dim NewApp As New Application
  4. Sub Ex()
  5.     Set xApp.The_App = NewApp
  6. End Sub
複製代碼
物件類別模組 Class1 的程式碼
  1. Option Explicit
  2. Dim WithEvents APP As Application
  3. Property Set The_App(P As Object)
  4.     Set APP = P    ' 將 APP 屬性值設成物件。
  5.     With APP
  6.         .Visible = True
  7.         With .Workbooks.Add
  8.             .Sheets(1).[a1] = 5
  9.         End With
  10.     End With
  11. End Property

  12. Private Sub APP_NewWorkbook(ByVal Wb As Workbook)
  13.     MsgBox Wb.Name
  14. End Sub
  15. Private Sub APP_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  16.     MsgBox Target.Address(, , , 1, 1)
  17. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  justintoolbox



Module1的程式碼物件類別模組 Class1 的程式碼
GBKEE 發表於 2015-7-27 14:02


非常感謝GBKEE版主出手相救!
GBKEE版的代碼 是利用Ex程序,建立出一個獨立EXCEL, 並讀取新建立的EXCEL的檔名與滑鼠選擇的位置.

只是.....
可能我前面沒有詳述清楚,真的很抱歉.讓GBKEE大誤會了.
我原本期望是:
已經存在的兩個EXCEL,但這兩個都是各自獨立的(不同一個application),
如果這時候我從A.xlsm切換到另一個EXCEL時, 我希望能藉由觸發程序告訴我有切換到另一個獨立EXCEL,不需要知道檔名沒關係.
(兩個活頁簿若在同一個application時,可以利用Workbook_Deactivate觸發程序,就知道有切換到另一個程序,但若是兩個獨立EXCEL就不能用這個方法了)

不知道這樣解釋有沒有讓GBKEE清楚一些,抱歉因為同一個討論串問了許多問題,容易讓人不知道現在的問題是什麼,會容易搞混..抱歉.

TOP

本帖最後由 GBKEE 於 2015-7-28 11:07 編輯

回復 18# justintoolbox
我希望能藉由觸發程序告訴我有切換到另一個獨立EXCEL.
VBA Application 物件的事件找不到支援的事件.
這就是兩個獨立EXCEL.物件類別的Application事件.可得知另一個獨立EXCEL的活動.
  1. Option Explicit
  2. Dim WithEvents APP As Application
  3. Property Set The_App(P As Object)
  4.     Set APP = P    ' 將 APP 屬性值設成物件。
  5.     With APP
  6.         .Visible = True
  7.     End With
  8. End Property

  9. Private Sub APP_NewWorkbook(ByVal Wb As Workbook)
  10.     MsgBox Wb.Name
  11. End Sub
  12. Private Sub APP_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  13.     MsgBox Target.Address(, , , 1, 1)
  14. End Sub

  15. Private Sub APP_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
  16.    
  17.     MsgBox "進入 " & Wb.Name
  18. End Sub

  19. Private Sub APP_WindowDeactivate(ByVal Wb As Workbook, ByVal Wn As Window)
  20.     MsgBox "退出 " & Wb.Name
  21. End Sub

  22. Private Sub APP_WindowResize(ByVal Wb As Workbook, ByVal Wn As Window)
  23.     MsgBox Wn.Caption & "變化視窗"
  24. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復  justintoolbox
我希望能藉由觸發程序告訴我有切換到另一個獨立EXCEL.
VBA Application 物件的事件 ...
GBKEE 發表於 2015-7-28 11:05


十萬分感謝GBKEE版主指點迷津!
讓我對這方面有新的認識!
感謝!

TOP

        靜思自在 : 是非當教育,讚美作警惕。
返回列表 上一主題