VBA:让 Excel 条件格式在 Outlook 中工作

VBA: Getting Excel conditional formatting to work from Outlook

我有一个 Outlook VBA 脚本,它正在执行一些电子邮件解析并将结果放入脚本创建的新 excel 文档中。

其中有问题的 VBA outlook 部分是:

sub test
    Dim oXLApp As Object, oXLwb As Object, oXLws As Object

    '~~> Establish an EXCEL application object
    On Error Resume Next
    Set oXLApp = GetObject(, "Excel.Application")

    '~~> If not found then create new instance
    If Err.Number <> 0 Then
        Set oXLApp = CreateObject("Excel.Application")
    End If
    Err.Clear
    On Error GoTo 0
    Set oXLwb = oXLApp.Workbooks.Add
    Set oXLws = oXLwb.Sheets("Sheet1")

    ' lots of stuff here that parses emails and puts them in the spreadsheet

    Call formatRN(oXLws)
end sub

Sub formatRN(xlsheet As Object)

    ' row and column sizes
    xlsheet.Cells.RowHeight = 15
    xlsheet.Columns("A:A").ColumnWidth = 50
    xlsheet.Columns("B:B").EntireColumn.AutoFit
    xlsheet.Columns("C:C").EntireColumn.AutoFit
    xlsheet.Columns("D:D").ColumnWidth = 50
    xlsheet.Columns("E:E").ColumnWidth = 50
    xlsheet.Columns("F:F").ColumnWidth = 50
    xlsheet.Columns("G:G").ColumnWidth = 50
    xlsheet.Columns("H:H").ColumnWidth = 50
    xlsheet.Columns("I:I").ColumnWidth = 50


    ' conditional format for empty cells
    xlsheet.Columns("A:I").Select
    xlsheet.Columns("A:I").FormatConditions.Add Type:=xlExpression, Formula1:="=LEN(TRIM(A1))=0"
    xlsheet.Columns("A:I").FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With xlsheet.Columns("A:I").FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.499984740745262
    End With
    xlsheet.Columns("A:I").FormatConditions(1).StopIfTrue = False


End Sub

行: xlsheet.Columns("A:I").FormatConditions.Add 类型:=xlExpression, Formula1:="=LEN(TRIM(A1))=0"

给我错误:"Invalid proceedure call or argument"

但以下代码在 Excel 中运行良好。我不确定问题是什么:

sub test()
    Dim xlsheet As Worksheet
    Set xlsheet = ActiveSheet

    xlsheet.Columns("A:I").Select
    xlsheet.Columns("A:I").FormatConditions.Add Type:=xlExpression, Formula1:="=LEN(TRIM(A1))=0"
    xlsheet.Columns("A:I").FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With xlsheet.Columns("A:I").FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.499984740745262
    End With
    xlsheet.Columns("A:I").FormatConditions(1).StopIfTrue = False
end sub

因为我在脚本中制作 excel sheet,所以我真的不能让这个 vba 代码预先存在于 excel sheet,我宁愿不必为此代码在最终用户的计算机上的 excel 中放置一个单独的全局级别 vba 代码。

任何提示都非常有用,谢谢!

如果您正在使用后期绑定 Excel(没有明确引用 Microsoft Excel 对象模型),就像您正在做的那样,那么枚举常量是该模型的一部分,例如 xlExpression 将被解释为具有零值的未声明变量。它的值应该是 2

将此放在代码的顶部,以警告您将来出现所有此类问题:

Option Explicit

然后,像这样声明你的变量:

Const xlExpression As Long = 2

您从 Excel 获得的代码在 在 Excel 中使用时不依赖于对 Excel 对象的外部引用模型和关联的枚举常量,这就是为什么代码在 Excel 中工作,但在从另一个应用程序调用时似乎不起作用(不使用早期绑定)。