Excell 2003 MsgBox莫明奇妙的 bug~~~

附加壓縮檔: 201706/mobile01-bcb37461b26e040afb27e094e4b233e0.zip

原本的程式很大一個,開啟時很耗時間,所以我加一個 timer 來顯示啟動的時間,以利修改程式,

但是有bug,我一直測試、一直刪除,刪到最後剩下這三個程式區塊

公式一、
用在 設定格式化條件,主要目的是,儲存格 C:L 都是利用公式產生的,

當儲存格內容被修改成直接寫入時(也就是公式被改掉)會用紅色顯示,方便辦視

這樣才知道這格的資料是寫死的,非公式產生

Option Explicit

'自動化格式明顯標示
Function IsFormula(rng As Range) As Boolean
Dim cell As Range
IsFormula = 1
For Each cell In rng
If cell.HasFormula = False Then
IsFormula = 0
End If
Next
End Function

在檔案開啟時,會執行兩個動作,

公式二、
#1 一個是選擇 a5這一個儲存格(這是因為存檔時,位置儲存格的位址會在其它地方,要方便每次開啟的操作,所以設定到 a5

公式三、
#2 是 將 尋找的選項,公式改成內容。預設是公式,這會讓尋找變的很麻煩(內容通通是公式產生),

每次都要手動改,所以加了這一段,讓尋找的選項,變成內容。


Dim Time0

Private Sub Workbook_Open()

Time0 = Timer



'--#1-----------------------------------------------------------


Sheets("Sheet1").Activate
Sheets("Sheet1").Range("A5").Select


'--#2-----------------------------------------------------------
'Configure Excel to look by default in Formulas, Values and Comments
'http://superuser.com/questions/114831/configure-excel-to-look-by-default-in-formulas-values-and-comments
'修正尋找設定為內容而非公式
'Application.ScreenUpdating = False
Worksheets(1).Cells.Find _
What:="", _
After:=ActiveCell, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
MatchByte:=False, _
SearchFormat:=False
'Application.ScreenUpdating = True

'-------------------------------------------------------------
'Dim Time0
'Time0 = Timer
MsgBox "執行時間#2 " & Timer - Time0 & " 秒", vbOKOnly

'-------------------------------------------------------------

End Sub



問題點在於,最後一行的 MsgBox "執行時間#2 " & Timer - Time0 & " 秒", vbOKOnly 不會執行

因為自動化格式 、 尋找 、 點選 a5 這三個動作,結果導致 MsgBox 不會顯示。

將 MsgBox 移到 #2之上,就會顯示,在#2之後就不會顯示,將 #1 改 成沒有自動作格式的 欄 ex: n1 就會顯示

將a5 的公式刪除也會顯示,將 自動化格式移除,也會顯示

反正就是這三個剛好組合在一起,MsgBox 就不會顯示

搞的我好煩呀~~

請問問題源頭是什麼?



應該是bug無誤,因為同一個檔案,在excel 2013是正常的
測試後,發現只要用內建函數就沒問題
為什麼格式化條件用了自定義function,會跟 cells.find 衝突,原因不明
(excel 2007 一樣不正常)

excel 2003(2007) 建議不要在格式化條件用那個function
(excel 2013 有內建isformula函數)

請改用

一、定義名稱(不要用isformula當名稱,會跟新版excel內建函數衝突)
CheckFormula
參照到
=GET.CELL(48,INDIRECT("rc",FALSE))

二、格式化條件中的公式改成
=NOT(CheckFormula)
我測了 get.cell,msgbox 有顯示,只要打破這三個程序,改了其中之一就會正常。

謝謝你的 建議,但我盡量不用 get.cell ,因為開啟檔案會跳出 excel 4.0 的警告

目前的對策是開檔時,不要選擇有格式化的條件的柵~~

我只是想知道,這bug 的主因是什麼?


Eigen wrote:
因為開啟檔案會跳出 excel 4.0 的警告
...(恕刪)

不好意思,我沒用2003測試
2007、2013沒這個警告

Eigen wrote:
這bug 的主因是什麼?
...(恕刪)


我不知道
因為這個檔案在excel 2013是正常的

Eigen wrote:
目前的對策是開檔時,不要選擇有格式化的條件的柵~~...(恕刪)


After:=ActiveCell
改成
After:=Range("a6")

試看看,反正是改設定,大概不影響,我猜的
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!