【问题标题】:VBA: Getting Excel conditional formatting to work from OutlookVBA:让 Excel 条件格式在 Outlook 中工作
【发布时间】:2015-10-22 13:14:51
【问题描述】:

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

有问题的 VBA 展望部分是:

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 Type:=xlExpression, Formula1:="=LEN(TRIM(A1))=0"

给我错误:“无效的过程调用或参数”

以下代码在 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 表,我真的不能在 excel 表中预先存在这个 vba 代码,我宁愿不必在计算机上的 excel 中放置单独的全局级 vba 代码此代码的最终用户。

任何提示都会很棒,谢谢!

【问题讨论】:

  • @LuukLag 请停止替换 word 宏。标签不好的事实并不意味着不能使用这个词......
  • @Jasper 宏作为一个词也不应该以不正确的方式使用。因为这些东西不是宏,而是 vba 代码。是的,MS-Office 提倡不当使用宏这个词,但我们不应该被它愚弄。此外,更改宏这个词将让新用户了解正确的术语,并使他们更容易在未来的搜索中找到他们正在寻找的东西。您也看过我在编辑时发布的链接吗?

标签: excel vba outlook


【解决方案1】:

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

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

Option Explicit

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

Const xlExpression As Long = 2

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

【讨论】:

  • ++ 是的。还有Const xlAutomatic = -4105Const xlThemeColorDark1 = 1
  • 谢谢!工作得很好。通过对选项明确强制执行的尽职调查,我还发现了一些潜在的错误。 (就像不知道 Outlook 文件夹可以包含不是邮件项的东西)。如果其他人在尝试这个,我必须声明另外两个常量:xlAutomatic = -4105 xlThemeColorDark1 = 1
  • 是的,选项显式起初使用起来有点棘手,但它确实强制执行更好的代码,从长远来看绝对是一个好处——即使你使用早期绑定的对象,你也不可避免地会输入错误的变量name 和 Option Explicit 也会捕捉到这种错误
猜你喜欢
  • 2012-02-01
  • 2011-10-02
  • 2016-10-02
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2017-10-05
  • 2017-11-03
  • 2014-07-07
相关资源
最近更新 更多