2010-01-07 185 views
1

基本上我想保留Excel單元格的現有格式。 如果我使用 ActiveCell.Value2 =「新值」;在Excel單元格上保留格式

ActiveCell顯示「新值」但失去用戶定義的格式(例如紅色字體,藍色背景),所有格式化值都會返回到Excel默認格式值。

注意:如果使用Excel替換單元格值,則Excel將保留用戶的格式。 將此操作記錄爲宏時,Excel使用屬性FormulaR1C1,但根據MSDN,此屬性用於宏。

回答

2

如果我使用ActiveCell.Value2 =「新價值」 的ActiveCell顯示「新價值」,但失去用戶定義的格式化

不,它沒有,我只是測試它(與Excel 2003)。打開一個新的空文件,格式與一些顏色和用戶自定義數字格式一列,並在VBA編輯器的立即窗口中輸入

ActiveCell.Value2="1" 

。現有的格式保持不變。所以,如果你有另一個場景來處理(格式丟失的地方),請詳細描述它。

編輯:如果這種行爲是在VSTO確實不同,作爲一種解決方法,你可以嘗試改變值之前保存ActiveCell有關格式的信息,例如

fci = ActiveCell.Range.Font.ColorIndex 
ici = ActiveCell.Range.Interior.ColorIndex 
pat = ActiveCell.Range.Interior.Pattern 
nf = ActiveCell.Range.NumberFormat 

然後更改值

ActiveCell.Value2 = "new value" 

事後重新分配的格式信息再次

ActiveCell.Range.Font.ColorIndex = fci 
ActiveCell.Range.Interior.ColorIndex = ici 
ActiveCell.Range.Interior.Pattern = pat 
ActiveCell.Range.NumberFormat = nf 

(但要小心,這是'空中密碼')。

+0

我認爲這個問題只發生在使用Excel通過C# - 在VBA中它工作正常。 (這個問題被標記爲C#和VSTO,但實際上沒有提到它在這個問題:0) – ScottF 2010-01-07 07:19:19

+0

對不起,我正在使用VSTO和C#,我發現這種行爲很煩人。 此解決方案沒有幫助,因爲我需要呈現多行和多列(100秒)的報告 – 2010-01-07 22:13:07

+0

您是對的,value2不會更改格式,在清除內容和格式的代碼中存在range.clear調用。 – 2010-01-08 03:45:47