![](/img/trans.png)
[英]Application.OnTime reopens workbook when other workbook is open
[英]Application.OnTime in Add-In Workbook_Open
我已經構建了一個自定義Excel加載項,並且當前正在嘗試找到一種方法,以便在新版本的加載項可用時通過VBA提示用戶。
我嘗試僅使用workbook_open事件檢查最新版本,然后使用用戶窗體提示用戶,但是我發現,當Excel加載觸發用戶窗體的加載項時,Excel停止加載用戶實際嘗試打開的工作簿,並且重新加載該加載項。 因此,當用戶窗體按我希望的方式工作時,用戶將獲得一個空白(不讀取工作表)帶有加載項的Excel Shell。
因此,我考慮使用Application.OnTime
將VBA推遲到加載項和目標文件都打開之后。 我在這里和這里都感到這是可能的,但是我只能使其在.xlsm
文件而不是.xlam
文件中工作。
這是我正在測試的代碼:
Sub Workbook_Open()
Application.OnTime Now() + TimeValue("00:00:05"), "Test_Addin.xlam!Versioning.Notify_User"
End Sub
並在常規代碼模塊中:
Sub Notify_User()
MsgBox "Hello"
End Sub
所以,我的問題是: 我在這里做錯了嗎?
我想知道是否有關於如何加載/設計加載項的事情,以防止它允許執行此類操作。
或者,您可以想到其他方法嗎?
我讀了Dick Kusleika撰寫的有關該主題的有趣的博客文章 (和評論),但聽起來有些人在每個子過程中都進行了版本檢查……我有很多過程,所以聽起來並不好。另一種選擇,盡管我可能不得不求助於它。
好吧,時間至關重要,因此我訴諸最不希望的選擇:在每個過程的開始進行檢查。
對於感興趣的各方,這是我的做法:
在每個子過程開始的某個地方,我放置了以下代碼行:
If Version_Check Then Call Notify_User
在我的Versioning模塊中,我輸入了以下功能和過程:
Function Version_Check() As Boolean
Installed = FileDateTime(ThisWorkbook.FullName)
Available = FileDateTime("\\NetworkDrive\Test_AddIn.xlam")
If Installed < Available Then Version_Check = True
End Function
Sub Notify_User()
Update_Check.Show
End Sub
因此,每次運行過程時,此代碼都會檢查公司網絡上的版本,該版本的修改后的日期時間大於已安裝的加載項的日期時間。
我仍然非常樂於接受其他檢查新版本的方法,請隨時發布答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.