Board logo

標題: [發問] 呼叫外部獨立執行檔案巨集 [打印本頁]

作者: reangame    時間: 2021-7-11 16:39     標題: 呼叫外部獨立執行檔案巨集

請問大大們,想用A檔案程式碼呼叫獨立執行B檔案sub msg(),   
    Dim xlApp As Excel.Application
    Dim book As Excel.Workbook
    Dim sheet As Excel.Worksheet
    Set xlApp = CreateObject("excel.Application")
    Set book = xlApp.Workbooks.Open("D:\公式.xls")
    此處可以獨立執行開啟B檔案

    Application.Run "'D:\公式.xls'!Module1.msg"
    此處無法以獨立執行B檔案msg(),仍以A檔案執行msg()
  
    請問大大們該如何撰寫呢?  
    請指導指導,謝謝
作者: singo1232001    時間: 2021-7-11 17:32

本帖最後由 singo1232001 於 2021-7-11 17:36 編輯

Application.Run "'公式'!Module1.msg"

Application.Run "'公式.xls'!Module1.msg"
作者: singo1232001    時間: 2021-7-11 18:56

本帖最後由 singo1232001 於 2021-7-11 18:58 編輯

回復 1# reangame


此為範例檔案
記得開啟時 每個檔案 由於是xlsm檔案 必須先開啟一次 啟用巨集 重新存檔一次
方可以正常運行

更正
Application.Run "公式!Module1.msg"

Application.Run "公式.xls!Module1.msg"
作者: reangame    時間: 2021-7-12 21:53

回復 3# singo1232001

感謝singo1232001大大的回覆,您的附檔小弟已測試,但有問題請教,
Workbooks("a1").Sheets("工作表1").[a1] = i: DoEvents
一開始都出錯在這邊,更改如下後可以執行,
Workbooks("a1.xlsm").Sheets("工作表1").[a1] = i: DoEvents
(a2,a3同步更改)

但a2及a3仍然是在a1的檔案架構下以唯讀模式開啟執行,
唯讀模式開啟之檔案a2,a3均可完成執行巨集,
已先行手動獨立執行a2及a3檔未執行巨集,
到此步驟共有5個檔案開啟1a1,1a2,1a3,1a2唯讀,1a3唯讀
不知道哪邊有錯還請指導指導,感恩!

小弟構想是在A檔案呼叫B檔案以獨立執行方式開啟並執行巨集,
但A檔案可以繼續進行手動工作或其他巨集,而B檔案持續執行巨集,
    Dim xlApp As Excel.Application
    Dim book As Excel.Workbook
    Dim sheet As Excel.Worksheet
    Set xlApp = CreateObject("excel.Application")
    Set book = xlApp.Workbooks.Open("D:\公式.xls")
    此處可以獨立執行開啟B檔案
    Application.Run "'D:\公式.xls'!Module1.msg"
    此處無法以獨立執行B檔案msg(),仍以A檔案執行msg()

上述寫法仍需克服以下問題:
一、可開啟獨立執行B檔案,但無法執行B檔案巨集;或   可執行巨集但卻是以A檔案架構下開啟
二、因程式碼撰寫在A檔案,故呼叫B檔案執行巨集未完成前,控制權仍在B檔案,無法呼叫後歸還控制權

以上還請大大指導指導,感激喔!
作者: singo1232001    時間: 2021-7-13 10:01

本帖最後由 singo1232001 於 2021-7-13 10:16 編輯

回復 4# reangame


好難喔QQ
https://www.youtube.com/watch?v=EGXPQs0R5YI
https://www.youtube.com/watch?v=lFSgV2gym9g

我把蒐集的到所有相關訊息都丟上來
http://forum.twbts.com/thread-19128-1-1.html
http://forum.twbts.com/viewthread.php?tid=2691
https://stackoverflow.com/questions/39519805/how-can-i-load-a-vba-library-reference-and-use-it-in-the-same-procedure


測試方式
1.先把a1 a2兩個檔案的a1 都清掉 都存檔 關閉
2.執行vba3.vbs檔案
3.檢查a1是否5000時再打開

另外補充
還有3個關鍵字
VBComponent
ProcOfLine
InsertLines

這個是利用  VBComponent 找出巨集存放的位置
有分成寫入與讀取
但很複雜 要花時間去死嗑一番
難點在於 如何引用 成功
有的excel版本特別不相容
有的版本甚至連set都不用

最後補充一下 之前的檔案
要把所有的:doevents 都刪掉 因為當時我在測試 結果忘了刪 很容易衝突
作者: singo1232001    時間: 2021-7-13 12:10

回復 5# singo1232001

由於每台電腦的位置不同
必須先選 vba3.vbs 右鍵>編輯當中的a1.xlsm 與a2.xlsm路徑
完成後儲存 方可正常執行
作者: reangame    時間: 2021-7-15 00:23

回復 6# singo1232001

感謝singo1232001大大,
小弟在A檔案加入Sub runVBScript(),的確可以實現A檔案控制B檔案執行巨集了,
也找到在A檔案VBA程式碼控制vbs檔案的方法,非常感謝您!
  1. Sub runVBScript()
  2.     ChDrive "C:"
  3.     ChDir "C:\Users\reang\Downloads\2"
  4.     Shell "cscript vba3.vbs"
  5. End Sub
複製代碼

作者: reangame    時間: 2021-7-15 00:42

[attach]33640[/attach]回復 6# singo1232001
作者: singo1232001    時間: 2021-7-15 02:35

本帖最後由 singo1232001 於 2021-7-15 02:48 編輯

回復 8# reangame

後來我試著用vba自動生成一個全新的vbs
然後又讓vba去執行這個vbs
但是出現一個狀況
在我的"下載"資料夾下 並不會產生啟用巨集的警告(即便我改檔名讓他恢復到需要啟用內容的狀況) 還是可以執行
但只要我把檔案搬離開到其他資料夾
就一定會跳出 啟用巨集 關閉巨集 的彈窗
這問題看來還是沒辦法完全解決掉

但我發現了這個
https://ithelp.ithome.com.tw/articles/10159964

跟很久之前我看得這個有點像
https://www.youtube.com/watch?v=G-2khNFYQl8
http://forum.twbts.com/thread-19128-1-1.html
這個是用vba爬蟲 但會爬到一半碰到警告alert卡住 但因為沒有多線程這種東西 所以請vbs來幫忙點個讚!
vba的運作 滴答滴答  滴答之間 是沒辦法跳線程的  答滴之間才可以 但通常就是卡在滴答之間
看起來很像多線程 但還是只能單線程運行 只是換來換去跑而已

而這次他用到的好像是呼叫vbs請AutoHotKey來幫忙點個讚
作者: singo1232001    時間: 2021-7-15 02:58

回復 9# singo1232001


    想試著完全一鍵搞定 但還是敗在 巨集啟用的警告畫面
作者: reangame    時間: 2021-7-15 08:49

本帖最後由 reangame 於 2021-7-15 08:51 編輯

回復 10# singo1232001


報告singo1232001大大,小弟是2003版本,小弟尚未理解您的程式碼,但調整一下經測試可用您的檔案一鍵執行喔!!!
  1.     a.WriteLine "obje2.Application.Run """ & Chr(39) & [a1] & "a2.xlsm" & Chr(39) & "!Module1.forX"""
  2.      
  3.     For i = 15 To 19
  4.     a.WriteLine Cells(i, 1)
  5.     Next
複製代碼

作者: reangame    時間: 2021-7-15 09:15

[attach]33644[/attach]回復 10# singo1232001
作者: reangame    時間: 2021-7-16 00:05

本帖最後由 reangame 於 2021-7-16 00:07 編輯

回復 10# singo1232001


https://docs.microsoft.com/zh-tw/office/vba/api/excel.application.automationsecurity
https://ithelp.ithome.com.tw/articles/10159964
不知道有沒有用,敬請參考看看




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)