我有一个基于条件格式化单元格的宏。 这是代码:
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 :(得分: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处理程序中调用相同的例程。
这可能允许您在纸张仍然打开时观察被调用的例程 - 这是在关闭后打开纸张的改进。
答案 1 :(得分:0)
否我无法从代码中调用宏,因为appli是一个将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
End Sub 使用此代码,格式每次都会更改,即使是我没有指定值的黑色字体。这就是为什么当一个值发生变化时,带有绿色字体的单元格之后仍然是一个应该有黑色字体的单元格。