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 中工作,但在从另一个应用程序调用时似乎不起作用(不使用早期绑定)。
我有一个 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 中工作,但在从另一个应用程序调用时似乎不起作用(不使用早期绑定)。