返回列表 上一主題 發帖

[發問] EXCEL並排顯示的方式下,每分鐘自動執行不同巨集

本帖最後由 luhpro 於 2013-6-23 21:08 編輯
...
單獨打開 A.xlsm 或 B.xlsm 時,巨集都很正常
...
但如果在EXCEL並排顯示 A.xlsm 和 B.xlsm
...
不用幾分鐘
A.xlsm 和 B.xlsm 的AB欄都篩選了(=.=)
...
伊賽爾 發表於 2013-6-23 10:39


其實這是 Excel VBA 程式本身機制所造成作用對象非為預期的狀況.

不論你的 VBA 程式放在哪個區塊(Sheet1、Sheet2、,Module1...)
只要你沒特意去過濾的話,
使用 ActiveSheet 會作用在 "同群組" 中目前是 Active 的 Sheet,(也可能非同一檔案或Workbook) <--- 尤其是這個 .
  ** 上方的 "同群組" 是指在下方Sheet頁簽上按滑鼠右鍵,選移動或複製後,在選單中可以選到的任何Sheet)

所以如果程式還在背景運作,
這時使用者手動去切換了Sheet後(或是又另開了一個 Excel 檔案),
就可能發生非預期的結果.

我能想到的有兩種方式可以避過這類作用對象錯誤的問題:

1. 在 Sub 與 End Sub 中間先包上 If ActiveSheet.Name="Sheet1" Then 與 End If 的敘述,
以確保程式不會作用到錯誤的標的上,
不過在某些情形下其內的程式也可能根本就不會執行了.

2. 在 Module 上方加上 Public Sh As Worksheet 的共用指標宣告,
再於 Workbook 的 Open 方法程式內加上,
Set sh = Sheets("sheet2") 之類的指令來指定要作用的Sheet目標,
之後不管在哪裡都可以用 With sh 與 End With 或是 sh.[A1] 之類的指令來定死要作用的 Sheet.

當然, 第 2 個方式我覺得應該比較好用且符合我們預期的效果.

TOP

        靜思自在 : 吃苦了苦、苦盡廿來,享福了福、福盡悲來。
返回列表 上一主題