Я тоже видел -12.00
с Selection.NumberFormat
, но начал видеть (12.00)
, как только я переключился на Selection.NumberFormatLocal
. Поэтому я бы предложил заменить Selection.NumberFormat
в вашем коде на Selection.NumberFormatLocal
.
Что-то вроде:
Option Explicit
Sub FormatCycle()
'
' FormatCycle Macro
'
' Keyboard Shortcut: Ctrl+Shift+E
'
Dim currentCell As Range
On Error Resume Next
Set currentCell = Selection
On Error GoTo 0
If currentCell Is Nothing Then Exit Sub ' Could probably check if TypeName is a range
With currentCell
Select Case .NumberFormatLocal
Case "General"
.NumberFormatLocal = "#,##0.00_);(#,##0.00)"
Case "#,##0.00_);(#,##0.00)"
.NumberFormatLocal = "0.00%_);(0.00%)"
Case "0.00%_);(0.00%)"
.NumberFormatLocal = "#,##0.00""x"";(#,##0.00""x"")"
Case "#,##0.00""x"";(#,##0.00""x"")"
.NumberFormatLocal = "General"
Case Else
.NumberFormatLocal = "General"
End Select
End With
End Sub
Другое дело, что вы фактически просматриваете предопределенный список числовых форматов (каждая ветвь в вашем выражении IF
- это то, что было назначено в предыдущей ветке). Следовательно, может быть лучше сохранить все числовые форматы, которые вы хотите просмотреть в массиве, затем найти позицию текущего числового формата (в массиве) и вернуть формат чисел, который следует за ним. Таким образом, если вы хотите ввести в цикл больше числовых форматов, вместо добавления вручную дополнительных ветвей If Else
или Case
, вам нужно будет только добавить новую запись (и) в массив.
С другой стороны, если ваш текущий подход хорош, и это просто быстрый макрос, нет необходимости исправлять то, что не нарушено.