Application.EnableEvents = True 失效
- 帖子
- 764
- 主題
- 254
- 精華
- 0
- 積分
- 1031
- 點名
- 0
- 作業系統
- windows 11
- 軟體版本
- OFFICE2021
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-5-30
- 最後登錄
- 2025-5-16
|
Application.EnableEvents = True 失效
1.xls已開啟 Application.EnableEvents = True 作用中
開了2.xls 後, 1.xls發生事件Private Sub Worksheet_Calculate()都無法作用??
sub test()
Application.EnableEvents = False '已測試有無此行沒差
For Each wb In Workbooks
If wb.Name = "2.xls" Then GoTo 58
Next
Workbooks.Open Filename:="k:\xls3\2.xls"
58:
If Windows("2xls").Visible = False Then
Windows("2.xls").Visible = True
ElseIf Windows("2.xls").Visible = True Then
Windows("2.xls").Visible = False
End If
Application.EnableEvents = True 'event已無法作用
End Sub
要在1.xls執行
sub tes2()
Application.EnableEvents = True
end sub
才會重起作用 |
|
|
|
|
|
|
- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
2#
發表於 2022-11-20 16:44
| 只看該作者
本帖最後由 singo1232001 於 2022-11-20 16:47 編輯
回復 1# t8899
當程序複雜到一定程度 會產生類似問題
最終解決方案就是設一個廣域變數
放在程序外
例如
public xxx as boolean
sub test()
xxx = true
end sub
這樣處理後
在觸發事件
就能用 if xxx= false then 的方式避開
但還有一種情況 比較特別
你遇到應該是這種情況 碰到有開啟工作簿的操作
關閉的excel 本身還在背景並未真正關閉 大概就是整片都灰色的
這種方是我目前只知道一種解決方式 (或許還有更好的方法 請高手補充)
就是用set 的方式開啟工作簿 避免關閉關不乾淨
Set ob = CreateObject("Excel.Application")
ob.Visible = False
Set os = ob.Workbooks.Open(路徑)
Set osh = ob.Sheets("工作表1")
ob.ActiveWorkbook.Close
ob.Quit
Set ob = Nothing
Set os = Nothing
Set osh = Nothing |
|
|
|
|
|
|
- 帖子
- 764
- 主題
- 254
- 精華
- 0
- 積分
- 1031
- 點名
- 0
- 作業系統
- windows 11
- 軟體版本
- OFFICE2021
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-5-30
- 最後登錄
- 2025-5-16
|
3#
發表於 2022-11-20 19:34
| 只看該作者
本帖最後由 t8899 於 2022-11-20 19:39 編輯
回復 t8899
當程序複雜到一定程度 會產生類似問題
最終解決方案就是設一個廣域變數
放在程序外 ...
singo1232001 發表於 2022-11-20 16:44 
Set os = ob.Workbooks.Open(路徑)
這指令還無法開檔?請教如何開檔? |
|
|
|
|
|
|
- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
4#
發表於 2022-11-20 20:33
| 只看該作者
本帖最後由 singo1232001 於 2022-11-20 20:36 編輯
回復 3# t8899
ob.Visible = False 先改成 ob.Visible = true
若要背景處理才用
ob.Visible = False
我複製時忘了改
另外路徑要改成你的完整路徑 跟之前open方式的路徑一樣
最後要在注意一下 ob.Visible = False 的情況下 中斷程序 可能會卡bug
在背景沒關閉 那就得用工作管理員去關閉excel了
就如同你開啟了一個看不見的excel 卡在背景關不掉 |
|
|
|
|
|
|
- 帖子
- 764
- 主題
- 254
- 精華
- 0
- 積分
- 1031
- 點名
- 0
- 作業系統
- windows 11
- 軟體版本
- OFFICE2021
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-5-30
- 最後登錄
- 2025-5-16
|
5#
發表於 2022-11-21 06:45
| 只看該作者
本帖最後由 t8899 於 2022-11-21 06:50 編輯
回復 t8899
ob.Visible = False 先改成 ob.Visible = true
若要背景處理才用
ob.Visibl ...
singo1232001 發表於 2022-11-20 20:33 
1 ob.Visible = true
這行執行完會多一個沒用的灰色視窗 (沒用到),可否省掉?
2 少一行 Public ob As Object ?
ob.ActiveWorkbook.Close
ob.Quit
Set ob = Nothing
Set os = Nothing
Set osh = Nothing
關檔這5行放在另一巨集,無法成功 ?
3 ob.ActiveWorkbook.Close
這命令關閉會問要不要存檔??請教要存跟不要存指令如何下? |
|
|
|
|
|
|
- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
6#
發表於 2022-11-21 08:13
| 只看該作者
|
|
|
|
|
|
- 帖子
- 764
- 主題
- 254
- 精華
- 0
- 積分
- 1031
- 點名
- 0
- 作業系統
- windows 11
- 軟體版本
- OFFICE2021
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-5-30
- 最後登錄
- 2025-5-16
|
7#
發表於 2022-11-21 12:32
| 只看該作者
我原本的問題已經解決了,開檔後暫停15秒就解決了
2.xls 裡面有940個資料交換(DDE)要等到完全更新完,才可以執行 Application.EnableEvents = True
15秒的等待,原本用DO loop,因為更新沒有順序,不知最後一筆更新是那一筆?只好抓15秒的等待時間
Workbooks.Open Filename:="k:\xls3\2.xls"
DSTOP = Now: Do While Now - DSTOP < TimeValue("0:00:15"): DoEvents: Loop '暫停15秒
多學了一個開檔的方法也不錯 |
|
|
|
|
|
|