Переменная XLSB Personal Macro file Ошибка - PullRequest
0 голосов
/ 11 июня 2018

Отказ от ответственности: это не мой код.Я взял макрос из обычного файла xlsm и поместил его в файл xslb, чтобы он был удобен для анализа.Макрос работает правильно в xlsm, но сталкивается с проблемой переменной в файле xlsb.

ColumnToFormat определяет конкретный столбец.Я подтвердил, что столбец присутствует на рабочем листе в моем окне Locals.

enter image description here

Main Sub

ColumnToFormat = Application.WorksheetFunction.Match("OR_TR_OLD_BAL", ActiveSheet.Rows(1), False)

Call FormatAmounts

Когда я начинаювыполнение FormatAmounts, однако переменная исчезает, и Excel выдает ошибку RunTime 1004;Ошибка приложения или объекта.При тестировании файла xlsm этого не происходит.Переменная передается из основной подпрограммы в вспомогательную подпрограмму.См. FormatAmounts sub ниже.

enter image description here

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

1 Ответ

0 голосов
/ 11 июня 2018

Передайте значение 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
...