Рабочий код VBA (условное форматирование) в Excel 2003, не работает в Excel 2020 - PullRequest
0 голосов
/ 30 января 2020

Basi c код для применения условного формата к диапазону, когда range.value ниже 7,2, он остается белым, когда выше 8,1, он становится красным. Этот код прекрасно работает в моем документе Excel 2003 Macro-Enabled Workbook, но когда мой брат открывает его на своем рабочем компьютере с Excel 2020, он выдает эту ошибку

Ошибка времени выполнения '5': недопустимо вызов процедуры или аргумент

Private Sub totalEPS(mySelection As Range)
    With mySelection.FormatConditions
        .Delete
        With .Add(Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="=7,2")
            .Interior.Color = 65535
            .StopIfTrue = False
        End With
        With .Add(Type:=xlCellValue, Operator:=xlGreater, Formula1:="=8,1")
            .Interior.Color = 255
            .StopIfTrue = False
        End With
    End With
End Sub

Когда он нажимает Отладка, он останавливается в строке

        With .Add(Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="=7,2")

Я не могу отладить его, потому что он не выдает никакой ошибки на моем компьютере, только на его.

Код использует метод более 50 раз, он 50 раз прекрасно работает на моем ноутбуке и вылетает при первом запуске его. Честно говоря, я не знаю, что случилось.

1 Ответ

3 голосов
/ 31 января 2020

Я подозреваю, что это связано с десятичным разделителем - эта запятая будет точкой в ​​операционной системе en-US.

Попробуйте добавить эту функцию в ваш модуль:

Public Function LocalizeDecimal(ByVal value As Double) As String
    LocalizeDecimal = Replace(CStr(value), ".", Application.International(xlDecimalSeparator))
End Function

Затем отредактируйте аргумент Formula1 примерно так:

With .Add(Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="=" & LocalizeDecimal(7.2))

И:

With .Add(Type:=xlCellValue, Operator:=xlGreater, Formula1:="=" & LocalizeDecimal(8.1))
...