簡體   English   中英

從C#打開文件時Excel宏無法正確執行

[英]Excel macro doesn't execute correctly when opening file from c#

我有一個宏,可以根據條件格式化單元格。 這是代碼:

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保存工作簿時,所有具有“確定”值的單元格均為紅色。 大!

但是,當我運行打開文件,進行更改並保存的應用程序時,某些“確定”單元格為“紅色”(很好!),而另一些為“綠色”(不好!)。

有人有主意嗎?

謝謝

一個可能值得嘗試的建議:將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處理程序中調用同一例程。

這可能使您可以觀察到仍在打開床單時調用的例程-與在關閉床單后必須打開床單相比有所改善。

不,我無法從代碼中調用宏,因為該應用程序是將MPP任務報告給XLS文件的應用程序,並且XLS文件格式可以根據使用它的人而改變。 Somethimes 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

End Sub使用此代碼,即使對於我未指定值的黑色字體,格式每次也會更改。 這就是為什么當值更改時,對於應該具有黑色字體的單元格,之前帶有綠色字體的單元格保持為grenn之后的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM