返回列表 上一主題 發帖

[發問] Excel VBA 儲存格字體變色事宜(不同序頁無法變色)

[發問] Excel VBA 儲存格字體變色事宜(不同序頁無法變色)

使用軟體:Excel 2003 SP3

各位先進好
  小弟在Excel的VBA中寫了兩行程式,是關於Excel儲存格內的字體變色事宜。(用If.....Then的語法)
令小弟不解的是,這兩行程式在該檔的Sheet3執行是可行的(圖1),但在該檔的Sheet1執行卻不行!(圖2)

註:粉紅色框為程式語法。

圖1



圖2



以上,請各位先進不吝指教,祝平安順心。
錢是很寂莫的,所以會想辦法聚在一起!

回復 1# syuan

單純從畫面上看起來你 Sheet3 的 A 欄有文字,
但 Sheet1 卻沒有字,
會不會是這個原因?

TOP

回復 1# syuan

檢查Sheet1的A1儲存格字型顏色設定為何?
學海無涯_不恥下問

TOP

回復  syuan

單純從畫面上看起來你 Sheet3 的 A 欄有文字,
但 Sheet1 卻沒有字,
會不會是這個原因?
luhpro 發表於 2012-9-19 21:59

回Luhpro

小弟依您建議,將字挪到A欄後再執行,的確就能改變字的顏色,感謝您。^^

不過小弟納悶的是,寫在儲存格裡的字是包涵在語法的("A1:AZ1000")的範圍內。照理說字就算不在A欄裡,也應該會變色才是。

但Run起來卻不會,實在讓小弟百思不得其解。

回復  syuan

檢查Sheet1的A1儲存格字型顏色設定為何?
Hsieh 發表於 2012-9-19 23:58


回Hsieh

感謝您的建議,小弟在設定Excel的顏色功能時,發現一件很特別的事。

在點選顏色後,會出現很多的顏色可以選擇,小弟在選擇黑色時,通常會直接點選"自動套色"。(如下圖虛線框處)



當選完"自動套色"時,再執行小弟所寫的那兩句語法時,卻發現字體仍然不會變色!{:3_47:}

小弟一直以為那個"自動套色"的顏色就是黑色,但在執行程式後卻無動靜!而如果顏色直接改回黑色時(如下圖虛線框處)卻又可以變色了。



小弟在想......是不是Excel有兩種黑色?{:2_30:}


註:附上小弟的檔案

test.rar (14.25 KB)


各位先進如有空閒時,能否幫忙小弟看看是哪邊出問題。以上,謝謝。

祝平安順心~~
錢是很寂莫的,所以會想辦法聚在一起!

TOP

回復 2# luhpro


   
回Luhpro

小弟依您建議,將字挪到A欄後再執行,的確就能改變字的顏色,感謝您。^^

不過小弟納悶的是,寫在儲存格裡的字是包涵在語法的("A1:AZ1000")的範圍內。照理說字就算不在A欄裡,也應該會變色才是。

但Run起來卻不會,實在讓小弟百思不得其解。
錢是很寂莫的,所以會想辦法聚在一起!

TOP

本帖最後由 syuan 於 2012-9-21 12:03 編輯

回復 3# Hsieh


   
回Hsieh

感謝您的建議,小弟在設定Excel的顏色功能時,發現一件很特別的事。

在點選顏色後,會出現很多的顏色可以選擇,小弟在選擇黑色時,通常會直接點選"自動套色"。(如下圖虛線框處)



小弟一直以為那個"自動套色"的顏色就是黑色,但在執行程式後卻無動靜!而如果顏色直接改回黑色時(如下圖虛線框處)卻又可以變色了。




小弟在想......是不是Excel有兩種黑色?

test.rar (14.83 KB)
以上為小弟的檔案。

各位先進如有空閒時,能否幫忙小弟看看是哪邊出問題。以上,謝謝。

祝平安順心~~
錢是很寂莫的,所以會想辦法聚在一起!

TOP

本帖最後由 luhpro 於 2012-9-22 04:16 編輯
回復  luhpro
回Luhpro
小弟依您建議,將字挪到A欄後再執行,的確就能改變字的顏色,感謝您 ...
syuan 發表於 2012-9-21 11:59

不知道是不是版本不同的原因,
我跑你的程式並不會變色(sheet1 與 sheet3 都顯示 I can't)
似乎與你所敘述的結果不同,
這樣就無法找到問題的癥結了.

這裡嘗試提出幾個建議看是否能找到問題點:
1. 使用單步執行(按 F8 按鍵)執行至停在 If 那行,
再於即時運算視窗先 Key 一個 ? 並於其右方複製後貼上條件式的內容,
(即 ?Worksheets("sheet3").Cells.Font.Color = vbRed )
看看系統給出的條件式判斷結果為何,
---> 我看到的是 Null (雖非相同但結果接近 非真<True> )

2. 再細部一點於 ? 右方分別接上條件判斷式中 = 左邊 與 右邊 的內容,
看看系統告訴我們兩邊的運算結果各是什麼?
(即 ?Worksheets("sheet3").Cells.Font.Color 與 ?vbRed )
---> 我看到的是 Null 與 255

3. 我們也可以確認單一儲存格的文字顏色代碼是多少,
例 : ?Worksheets("sheet3").[A1].Font.Color
你可以試試看分別將兩個儲存格設成 黑色 與 自動 再測看看是否系統會顯示不同色碼.
---> 我看到的都是 0
其實在你提供的圖片上就可以看出來,
"自動" 那個選項的左方有個方格它的顏色就有告訴你目前 "自動" 所對應的顏色就是黑色的.

4. 不論是 .Range("A1:AZ1000") 還是 .cells 都是在表示 "多個儲存格",
它並不適合用於 If 指令的判斷上,
因為其中的各個儲存格可以分別有不同的顏色,
這將導致判斷式的結果為無法確認結果(Null).
要對多個儲存格作判斷式的處理,
應該在其外先套用 For Each  與 Next 以表示依序對其內所有的儲存格作判斷與處理.
建議程式碼如下 :
  1.     Worksheets("sheet3").Activate
  2.     Dim a As Range
  3.    
  4.     For Each a In Worksheets("sheet3").[B2].CurrentRegion
  5.       If a.Font.Color = vbRed Then a.Font.Color = vbBlack
  6.     Next
複製代碼

TOP

回復 7# luhpro


感謝luhpro大的解說,小弟先去試看看您說的那幾項。{:3_52:}

註:原來if語法不適合用在這種情況啊,我還真不知道....=="
錢是很寂莫的,所以會想辦法聚在一起!

TOP

回復 7# luhpro


    回luhpro 大

小弟試了您建議的1、2、3、4項的方式後,的確出現如您所說的現象。

真是萬分感謝~~

另外,小弟近日發現了range有個叫usedrange屬性,它可以去抓取使用中的儲存格範圍。

小弟試了一下這個屬性,它可以選取儲存格的所有範圍。

不過小弟在語法中加了一個Instr的語法,打算讓程式依條件來讓儲存格內的字變色,

但不管如何改,它就是只會變數字的顏色而已,無法選到其他儲存格內的字(如下圖1)

(圖1)   原本要讓儲存格內的dos字串變紅色,但程式卻讓儲存格內的數字1變紅色(Instr(1.......)


(圖2)  將語法修改後也是改到儲存格內的數字4  (小弟改為Instr(4.......)


從以上的結果看來,它似乎是針對數字在變更,而不是依字串在變更......=="

這讓小弟覺得很困惑,不知是不是小弟的語法有錯。

望各位先進不吝指教,謝謝。

祝週末愉快!
錢是很寂莫的,所以會想辦法聚在一起!

TOP

回復 9# syuan
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim A As Range
  4.     For Each A In Sheets("Sheet1").UsedRange
  5.         If InStr(A, "DOS") Then A.Font.Color = vbRed
  6.     Next
  7. End Sub
複製代碼

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題