- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2024-11-14
|
57#
發表於 2013-8-22 23:56
| 只看該作者
本帖最後由 luhpro 於 2013-8-22 23:58 編輯
1.之前的問題,經再測試無法自動關掉訊息窗
是因為跑下面的程式,不知有無辦法改善?
好像只要有在跑ti ...
t8899 發表於 2013-8-22 04:35 
1. 這我也不知道,不過據我所知 Excel VBA 畢竟不是單純的 VB 系統,
在某些情形下還是會發生某些我們覺得不太能理解的狀況.
最簡單的例子是若某時間有開了兩個 Excel 檔案,其中一個有 Excel VBA 程式的檔案,
有可能會干擾到另一個沒有 VBA 程式檔案的編輯作業.(尤其是 Worksheet_Change 與 Worksheet_SelectionChange 程序最易發生此狀況)
依你的敘述看起來,
它可能不能同時執行太多的 Application.OnTime 程式.(疑似會有相互干擾的情形出現)
當然這個就是很內部的東西了,
當 Excel VBA 每呼叫一次 Application.OnTime 程式,
是否就會配置一個程序空間來存放該程式運作中的變數,
直到該程式結束才釋放掉該空間?
亦或是只要是執行該程式,
就都是使用同一個程序空間裡的變數呢?
若是後者那出現你說的情形應該就不意外了.
而若真要是這個問題也是有方法解決的啦,
只要 "每個" 呼叫的程式都不同就不會互相干擾了,
亦即要確保同一時間在跑的 OnTime 程式都是在不同程式區塊中即可.
可不可行我不知道你可以試試看.
2. 與上方的定義內容一一比對即可知道錯誤出在哪裡了:
你的呼叫程式為 :
MsgBoxTest 0, "", "", sStr, 0, 2500
而其定義則為 :
Private Declare Function MsgBoxTest Lib "user32" Alias "MessageBoxTimeoutA" ( _
ByVal hwnd As Long, _ <=== 上面的 0 , OK
ByVal lpText As String, _ <=== 上面的 "", OK
ByVal lpCaption As String, _ <=== 上面的 "", OK
ByVal wType As VbMsgBoxStyle, _ <=== 上面的 sStr, 錯誤出在此
ByVal wlange As Long, _ <=== 上面的 0, OK
ByVal dwTimeout As Long _ <=== 上面的 2500, OK
) As Long
至於 VbMsgBoxStyle?
在 http://www.codeproject.com/Articles/7914/MessageBoxTimeout-API
上看到 : uiFlags = MB_YESNO|MB_SETFOREGROUND|MB_SYSTEMMODAL|MB_ICONINFORMATION
且
http://www.pinvoke.net/default.aspx/user32/MessageBoxTimeout.html?diff=y
上看到該參數可定義為 ByVal MessageBoxOptions As Long
所以至少那應該是個數字而非文字才是,
而在 http://baike.baidu.com/view/5079352.htm
這裡有詳細說明各個數值的定義.
至於 sStr 則應放在 lpText As String 上.
綜上你可以試試 :
MsgBoxTest 0, sStr, "提示訊息", 0, 0, 2500
3. FindWindow 要先知道該視窗的 handle 或是 足資辨識該視窗的資料才能找到該視窗,
這個我要再查查看是否有可能解決. |
|