2010-12-22 86 views
0

我有一個基於條件格式化單元格的宏。 這裏是代碼:從c#打開文件時Excel宏沒有正確執行#

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 

Set MyPlage = Sheets("Report").Range("E13:E1500") 
For Each Cell In MyPlage 
    If Cell.Value = "L" Then 
     Cell.Borders.ColorIndex = 1 
     Cell.Font.ColorIndex = 3 
    ElseIf Cell.Value = "K" Then 
     Cell.Borders.ColorIndex = 1 
     Cell.Font.ColorIndex = 44 
    ElseIf Cell.Value = "J" Then 
     Cell.Borders.ColorIndex = 1 
     Cell.Font.ColorIndex = 10 
    ElseIf Cell.Value = "ü" Then 
     Cell.Borders.ColorIndex = 1 
    ElseIf Cell.Value = "" And Cell.Offset(0, 1).Value <> "" Then 
     Cell.Borders.ColorIndex = 1 
    Else 
    Cell.Borders.ColorIndex = 2 
End If 

Next 

該宏在保存工作簿之前執行。 它從excel中完美地工作。

我的問題是,我有一個C#應用程序,打開這個excel文件,並用數據更新它。

當我保存文件(從代碼)並打開文件(從桌面或任何地方)時,我看到宏已經運行,但顏色(格式)對某些單元格不正確。

例如,如果單元格值爲「OK」,則格式化單元格的顏色應爲「紅色」。 當我從Excel中保存工作簿時,所有帶有「OK」值的單元格都是紅色的。大!但是,當我運行我的應用程序打開文件,進行更改並保存它時,一些「OK」單元格是「紅色」(太棒了!),但其他是「綠色」(壞!)。

有沒有人有想法?

謝謝

回答

0

一個建議,可能是值得一試:將VBA代碼到一個新的程序,例如

Public Sub UpdateFormats 
    Set MyPlage = Sheets("Report").Range("E13:E1500") 
    For Each Cell In MyPlage 
    .... 
End Sub 

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    call UpdateFormats 
End Sub 

然後在保存和關閉工作表之前從C#明確調用例程。您也可以從BeforeSave處理程序中調用相同的例程。

這可能允許您在紙張仍然打開的同時觀察正在調用的例程 - 這是在紙張關閉後打開紙張的改進。

0

不,我不能從代碼調用宏,因爲應用程序是將MPP任務報告給XLS文件的應用程序,並且XLS文件格式可以根據使用它的人員進行更改。有時候XLS文件沒有宏。

我找到了我的答案。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 

Set MyPlage = Sheets("Report").Range("E13:E1500") 
For Each Cell In MyPlage 
    If Cell.Value = "L" Then 
     Cell.Borders.ColorIndex = 1 
     Cell.Font.ColorIndex = 3 
    ElseIf Cell.Value = "K" Then 
     Cell.Borders.ColorIndex = 1 
     Cell.Font.ColorIndex = 44 
    ElseIf Cell.Value = "J" Then 
     Cell.Borders.ColorIndex = 1 
     Cell.Font.ColorIndex = 10 
    ElseIf Cell.Value = "ü" Then 
     Cell.Borders.ColorIndex = 1 
     Cell.Font.ColorIndex = 1 
    ElseIf Cell.Value = "" And Cell.Offset(0, 1).Value <> "" Then 
     Cell.Borders.ColorIndex = 1 
     Cell.Font.ColorIndex = 1 
    Else 
    Cell.Borders.ColorIndex = 2 
End If 

Next 

末次 有了這個代碼,格式改變甚至黑色字體爲我沒有specifiy值每一次。這就是爲什麼當一個值改變時,之前有綠色字體的單元格保留了grenn,因爲這個單元格應該是黑色字體。