雞婆的Excel自動 儲存格格式...要如何解?!



贊助商連結


wowhsieh
2003-06-27, 03:22 PM
...ㄟ...Excel很貼心的預設值...

當 儲存格 輸入數字100,000時,其格式會自動調為貨幣格式,惟其資料內容則為100000,可是這造成我所寫的一個VBA指令產生錯誤...

for i=1 to 100
If ActiveCell.Characters(i, 1).Font.ColorIndex = 3 Then ActiveCell.Characters(i, 1).Text = "Ψ"
End If

(若儲存格內字元為紅色,則字元改為Ψ)

由於 儲存格 顯示的是100,000而實際資料是100000(我輸入時是打100,000,也希望實際是100,000 但Excel雞婆的變成貨幣格式,而內容變成100000),所以VBA在比對的時候產生 "無法設定種類Characters的Text屬性" (停在第3行指令)

在維持原 儲存格 預設狀態下(不事先調整 儲存格 為文字等格式)的話,有何好方法可解?!

贊助商連結


leonchou
2003-06-27, 06:03 PM
似乎語法有問題..改正後--
For i = 1 To 100
If ActiveCell.Characters(i, 1).Font.ColorIndex = 3 Then
ActiveCell.Characters(i, 1).Text = "Ψ"
End If
Next i
你不設成文字格式,它就會視為數字;
而數字是不能適用Characters.Text屬性的。
當然,也不能手動設定部分格式。

wowhsieh
2003-06-28, 09:23 AM
最初由 Leon Chou 發表
似乎語法有問題..改正後--
For i = 1 To 100
If ActiveCell.Characters(i, 1).Font.ColorIndex = 3 Then
ActiveCell.Characters(i, 1).Text = "Ψ"
End If
Next i
你不設成文字格式,它就會視為數字;
而數字是不能適用Characters.Text屬性的。
當然,也不能手動設定部分格式。


語法有點筆誤啦...,由於是幫別人設計個小程式做自動執行,針對既有的多個檔案而每個檔案內均有多張工作表,而且已經有大量資料在內,所以不太可能再重設回文字模式(因為原先被EXCEL視為數字的儲存格再改回文字格式時,內容文字會變,我輸入10,000但Excel改為內容為10000格式為10,000,當改回文字格式,內容就變成10000).

所以...是不是就無解了?!

沙拉油
2003-06-28, 06:15 PM
我猜想您應該用錯物件了,以下是 VBA F1 的解說

Characters物件代表包含文字的物件內的字元。可用 Characters 物件修改包含在完整文字串內的任意字元序列。
Characters 物件用法
可用 Characters(start, length) 傳回 Characters 物件,其中 start 為起始字元數,而 length 為要傳回的字元數目。

另外,小弟請問你一下三個問題喔∼∼

第一:
如果有一個儲存格內容是 ABC123ABC 然後只有 123 是紅色字元,其他是黑色字元;
你的巨集是要把 123 改成 ΨΨΨ 嗎?也就是該儲存格內容變成 ABCΨΨΨABC 然後一樣 ΨΨΨ 是紅色字元其他仍然是黑色字元嗎?

第二:
如果有一個儲存格內容是 123000,然後該儲存格內的所有數字都是紅色字元(註一),你的巨集是要把儲存格內容改成 ΨΨΨΨΨΨ 嗎?還是要改成 Ψ123000。

第三:(個人疑問)
請問這個字=>> Ψ 它的意思是什麼?

(註一)
儲存格內容如果是數字,則不能對個別的數字設定格式,只能設定整個儲存格的格式。

wowhsieh
2003-06-28, 08:21 PM
最初由 沙拉油 發表
我猜想您應該用錯物件了,以下是 VBA F1 的解說
我也是這麼覺得!

Characters物件代表包含文字的物件內的字元。可用 Characters 物件修改包含在完整文字串內的任意字元序列。
Characters 物件用法
可用 Characters(start, length) 傳回 Characters 物件,其中 start 為起始字元數,而 length 為要傳回的字元數目。

另外,小弟請問你一下三個問題喔∼∼

第一:
如果有一個儲存格內容是 ABC123ABC 然後只有 123 是紅色字元,其他是黑色字元;
你的巨集是要把 123 改成 ΨΨΨ 嗎?也就是該儲存格內容變成 ABCΨΨΨABC 然後一樣 ΨΨΨ 是紅色字元其他仍然是黑色字元嗎?
沒錯!

第二:
如果有一個儲存格內容是 123000,然後該儲存格內的所有數字都是紅色字元(註一),你的巨集是要把儲存格內容改成 ΨΨΨΨΨΨ 嗎?還是要改成 Ψ123000。
全部是Ψ!

第三:(個人疑問)
請問這個字=>> Ψ 它的意思是什麼?
沒什麼,只是做個記號!

(註一)
儲存格內容如果是數字,則不能對個別的數字設定格式,只能設定整個儲存格的格式。

我的用意是,針對一個已被校正過的工作表資料(凡是任一儲存格內的任一字元,更動過的會被標成藍色,而不要的字元則被標成紅色),我要負責將藍色改為黑色,而紅色則刪除之.我先將儲存格內凡是有藍色字元則改為黑色,紅色則先標示為Ψ,到最後再一次將Ψ全部刪除,VBA如下,不知有無更好的寫法?!因為Characters不可對純數字格式做...

For a = 1 To Sheets.Count
Sheets(a).Select
For i = 1 To 50 '執行至第50列
For x = 1 To 15 '執行至第15欄位
ActiveSheet.Cells(i, x).Select '(依序由第一個工作表的第一欄第一列開始執行)
For j = 1 To 150
If ActiveCell.Characters(j, 1).Font.ColorIndex = 3 Then '(若儲存格內為紅色字)
ActiveCell.Characters(j, 1).Text = "Ψ" '(則標註為Ψ)
End If
If ActiveCell.Characters(j, 1).Font.ColorIndex = 5 Then '(若儲存格內為藍色字)
ActiveCell.Characters(j, 1).Font.ColorIndex = 1 '(將藍色字改為黑色)
End If
Next j '(至下一字元)
Next x '(至下一欄)
Next i '(至下一列)
ActiveSheet.Cells.Select '(將所有標註之Ψ字元刪除)
Selection.Replace What:="Ψ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByColumns, MatchCase:=False
Next a '(至下一工作表)

沙拉油
2003-06-29, 03:53 PM
提供您一個建議
在做底下那一個迴圈之前,先引用工作表函數 istext 跟 isnumber(不要用VBA的isnumeric喔!) 確定一下儲存格的內容是數字還是文字
是文字才跑底下的迴圈;是數字的話就直接判斷 ActiveCell.Font.ColorIndex 是否等於 3,不要在用Characters物件了,因為數字不適用Characters物件。

For j = 1 To 150'建議150改為len(ActiveCell)
.
.
.
Next j '(至下一字元)


另外,為什麼引用工作表函數 Isnumber 而不要用 VBA 函數 Isnumeric ,你有興趣的話試一下就知道差異在哪裡了。