XLSB 个人宏文件变量错误
XLSB Personal Macro file Variable Error
免责声明:这不是我的代码。我从一个常规的 xlsm 文件中取出一个宏,并将它放在一个 xslb 文件中,以便于分析。该宏在 xlsm 中工作正常,但在 xlsb 文件中遇到变量问题。
ColumnToFormat
标识特定列。我确认该列存在于我的 Locals window.
的工作表中
主子
ColumnToFormat = Application.WorksheetFunction.Match("OR_TR_OLD_BAL", ActiveSheet.Rows(1), False)
Call FormatAmounts
然而,当我启动 运行 FormatAmounts
时,变量消失并且 Excel 抛出运行时错误 1004;应用程序定义或对象定义错误。测试 xlsm 文件时,不会发生这种情况。变量从主子传递到辅助子。请参阅下面的 FormatAmounts
小节。
Sub FormatAmounts()
ActiveSheet.Columns(ColumnToFormat).Select
Selection.TextToColumns Destination:=Range(ActiveSheet.Columns(ColumnToFormat).Address), DataType:= _
xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:= _
False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Selection.NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
End Sub
将 ColumnToFormat 值传递给子过程并通过使用 Application.Match 到变体并测试变体的错误来在主子过程中添加错误控制。
sub main()
dim ColumnToFormat as variant
ColumnToFormat = Application.Match("OR_TR_OLD_BAL", ActiveSheet.Rows(1), 0)
if not iserror(ColumnToFormat ) then FormatAmounts clng(ColumnToFormat)
end sub
Sub FormatAmounts(c as long)
with ActiveSheet.Columns(c)
.TextToColumns Destination:=.cells(1), DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
.NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
end with
End Sub
免责声明:这不是我的代码。我从一个常规的 xlsm 文件中取出一个宏,并将它放在一个 xslb 文件中,以便于分析。该宏在 xlsm 中工作正常,但在 xlsb 文件中遇到变量问题。
ColumnToFormat
标识特定列。我确认该列存在于我的 Locals window.
主子
ColumnToFormat = Application.WorksheetFunction.Match("OR_TR_OLD_BAL", ActiveSheet.Rows(1), False)
Call FormatAmounts
然而,当我启动 运行 FormatAmounts
时,变量消失并且 Excel 抛出运行时错误 1004;应用程序定义或对象定义错误。测试 xlsm 文件时,不会发生这种情况。变量从主子传递到辅助子。请参阅下面的 FormatAmounts
小节。
Sub FormatAmounts()
ActiveSheet.Columns(ColumnToFormat).Select
Selection.TextToColumns Destination:=Range(ActiveSheet.Columns(ColumnToFormat).Address), DataType:= _
xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:= _
False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Selection.NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
End Sub
将 ColumnToFormat 值传递给子过程并通过使用 Application.Match 到变体并测试变体的错误来在主子过程中添加错误控制。
sub main()
dim ColumnToFormat as variant
ColumnToFormat = Application.Match("OR_TR_OLD_BAL", ActiveSheet.Rows(1), 0)
if not iserror(ColumnToFormat ) then FormatAmounts clng(ColumnToFormat)
end sub
Sub FormatAmounts(c as long)
with ActiveSheet.Columns(c)
.TextToColumns Destination:=.cells(1), DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
.NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
end with
End Sub