返回列表 上一主題 發帖

[發問] 求助幫檢查VBA那兒有問題

本帖最後由 luhpro 於 2016-2-14 22:32 編輯
下面Workbook原本有3個VBA,自從加入了第4個VBA後,第2個VBA的效果開始有了點問題(EXCEL2000版),
是甚麼地 ...
RCRG 發表於 2016-2-12 14:14

沒檔案可以試, 未實測純推測,你可以套用看看 (PS. 測試前請記得先備份).

有可能是:
Set xB = Workbooks.Open(xFile, ReadOnly:=True)
這一行又去呼叫 Workbook_Open 程序,
而它又會去執行到 第2個VBA,
以致產生非預期的結果.

一般要避免此類情形我會考慮用以下兩種方式之一:

1. 執行程序前,先把觸發行為開關關掉,執行完再打開:
Application.EnableEvents = False
Set xB = Workbooks.Open(xFile, ReadOnly:=True)
Application.EnableEvents = True


2. 設置旗標控制(旗標一般須為全域變數)是否要觸發:
Module-

Public bOpen As Boolean



Workbook_Open-
Private Sub Workbook_Open()
If bOpen Then Exit Sub
Call 檢測資料檔: If xMsg = "" Then GoTo 999 '第1個VBA
.
.
.
bOpen = True
Set xB = Workbooks.Open(xFile, ReadOnly:=True)
bOpen = False
.
.
.

TOP

本帖最後由 luhpro 於 2016-2-19 22:46 編輯

回復 3# RCRG
你試試把那行:
On Error Resume Next
改成:
On Error Goto 0
跑跑看是否會有錯誤發生? 若有則看看發生在哪一行? 看看是否能排除問題點.
因為 Resume Next 指令直接忽略錯誤, 而會動到Excel外部的指令(如 : Open 檔案), 用這個指令有可能會出現無法預期的結果.

另一個方法是 :
左鍵點一下 底下這 兩 行 左邊的灰色區域 - 讓這兩行變成棕色底 (即設成執行中斷點)
1)     Call 檢測資料檔   的下一行, 當 xMsg <> ""  時從這行開始跑 :
MsgBox xMsg & Chr(10) & Chr(10) & _
         "彈出視窗顯示文字" & Chr(10) & Chr(10) & _
        "彈出視窗顯示文字2"


2)     999:   的下一行, 當 xMsg = ""  時從這行開始跑 :
If Info2 <> "" Then MsgBox Info2

執行動作等程式暫停在這兩行之一時,
逐行 按 F8 按鍵 啟動 單步執行,
追蹤程式流程是否正確.

TOP

        靜思自在 : 要用心,不要操心、煩心。
返回列表 上一主題