Board logo

標題: [問題]如何是用另用一個excel file的巨集,而不需要開啟此excel file [打印本頁]

作者: jarodz    時間: 2011-12-13 02:14     標題: [問題]如何是用另用一個excel file的巨集,而不需要開啟此excel file

本帖最後由 jarodz 於 2012-1-4 00:17 編輯

因為小弟寫了一些 VBA 的巨集分享給同事使用,
一開始是放在一個excel,要用的人去copy這個excel file來用,
但是隨著使用人數及次數變多,加上中途有改版,現在變成好幾個檔案好幾個版本,
害我自己都忘了哪個是最新版,下次要從哪個改起。
後來發現可以作個按鈕去call同一個excel裡的巨集,
但是遇到一個問題,是每次執行都會把這個共用的excel開起來,
有沒有辦法可以不讓他開起來或隱藏起來且不會把檔案鎖成唯讀。
謝謝回答。

一個對excel操作不熟的程式人留。
作者: GBKEE    時間: 2011-12-22 16:25

本帖最後由 GBKEE 於 2011-12-22 16:36 編輯

回復 1# jarodz
加入一般模組 名稱為"Module1"  檔案開啟後自動執行Auto_Open程序  另存檔案名稱, 原檔案就不會開啟.
  1. Option Explicit
  2. Private Sub Auto_Open()
  3.     ThisWorkbook.SaveAs CurDir & "\" & Split(ThisWorkbook.Name, ".")(0) & "備份"    '另存檔案名稱
  4.     With ThisWorkbook.VBProject
  5.         .VBComponents.Remove .VBComponents("Module1")    ' 刪除  Module1 模組
  6.     End With
  7. End Sub
複製代碼

作者: jarodz    時間: 2012-1-3 23:16

回復 2# GBKEE


Dear GBKEE,

謝謝你的回答,
不好意思,可能是我原先的意思描述的不清楚,
我想作的是類似增益集,(我已經知道如何把一般xls弄成增益集)
但不知如何在新建的excel中 call 這個增益集裡的Sub routine?

最終我是弄成,點擊此excel增益集會自動在工具列增加按鈕,
按此按鈕就會執行excel增益集中的sub routine.

謝謝。

BR,
Jarod
作者: GBKEE    時間: 2012-1-4 07:21

回復 3# jarodz
我想作的是類似增益集,(我已經知道如何把一般xls弄成增益集) 但不知如何在新建的excel中 call 這個增益集裡的Sub routine
Run "這個增益集!routine"
作者: jarodz    時間: 2012-1-4 10:48

回復 4# GBKEE

現在有個問題,
在預備把作成增益集前的xls作一個工具列的button,assign 這個xls裡的macro 給它,
然後再把 IsAddin 屬性設為 true ,後儲存。

在另外一台開啟此 xls,此增加的button無法出現,
好像是無法看到增益集裡的sub routine.
這何解?

同樣的問題,xls設為增益集後在macro list就看不到其 Macro,
看不到還是可以執行嗎?

BR,
Jarod

BR,
Jarod
作者: GBKEE    時間: 2012-1-4 11:59

回復 5# jarodz
複製到一般模組中
  1. Private Sub Auto_Open()
  2.     Dim newcontrl As CommandBarControl
  3.     Application.CommandBars.ActiveMenuBar.Reset
  4.       Set newcontrl = Application.CommandBars.ActiveMenuBar.Controls.Add(10)
  5.         With newcontrl
  6.         .Caption = "控制鈕"
  7.     End With
  8.     Set A = newcontrl.Controls.Add(1)
  9.             A.Caption = "本機使用者"
  10.             A.OnAction = "EX"
  11.      Set A = newcontrl.Controls.Add(1)
  12.             A.Caption = "本機資訊"
  13.             A.OnAction = "EX1"
  14. End Sub
  15. Private Sub Auto_Close()
  16.     Application.CommandBars.ActiveMenuBar.Reset
  17. End Sub
  18. Private Sub Ex()
  19.     MsgBox "使用者 : " & Application.UserName
  20. End Sub
  21. Private Sub Ex1()
  22.     MsgBox "Welcome to Microsoft Excel version " & _
  23.     Application.Version & " running on " & _
  24.     Application.OperatingSystem & "!"
  25. End Sub
複製代碼

作者: jarodz    時間: 2012-1-5 11:33

Dear GBKEE,

謝謝,想再請教一下用 Auto_Open 跟寫在 ThisWorkbook 用 Workbook_Open() 有什麼差別,
再者除了 Auto_Open, Auto_Close 之外,在一般還有什麼特殊的 event 可以 trap 到,
這要用什麼關鍵字查 help 或去哪裡可以看到這些 event list,謝謝。

BR,
Jarod
作者: GBKEE    時間: 2012-1-5 11:44

回復 7# jarodz
Workbook_Open() 是ThisWorkbook的預設事件  優先   Auto_Open() ( 於一般模組 )
其他預設事件 如圖:

[attach]9071[/attach]
作者: jarodz    時間: 2012-1-5 11:57

Dear GBKEE
WorkBook_Open() 可以很直覺的發現了,
但是 Auto_Open()這個是去哪裡查到的?
我想問的是一般module可以用的event要去哪查?
Auto_Open() 在IDE的視窗中不像WorkBook_Open()會自動列出來。

BR,
Jarod
作者: GBKEE    時間: 2012-1-5 12:28

回復 9# jarodz
一般module可以用的event
就AUTP_OPEN , AUTO_CLOSE 這2個,如果還有請知道的分享,




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