Ваш код на правильном пути. Есть несколько способов добиться этого с минимальными изменениями.
Используйте InputBox
для запроса на переформатирование диапазона.
В этом решении я установил Default Value
для поля ввода в качестве адреса для выбранных ячеек, что означает Вы можете выбрать диапазон, который вы хотите переформатировать (как вы пытаетесь сделать), а затем активировать свой код для автоматического заполнения выбранного диапазона:
Sub ConvertDynamicRangeToNumber()
Dim UserRange As String
UserRange = InputBox("Enter the start and end of your range (e.g. A1:C10):", "Enter your range", Selection.Address(False, False))
With Sheet1.Range(UserRange)
.NumberFormat = "#,##0.00_);(#,##0.00)"
.Value = .Value
.HorizontalAlignment = xlRight
End With
End Sub
Использовать выбранный диапазон
Если вы предпочитаете пропустить InputBox
и просто основывать его на выбранных ячейках, вы можете просто Set UserRange = Selection.Address
, но это означает , если выбраны неправильные ячейки и вы выполняете свой код, отмена и у вас может оказаться больше работы, чем вы начали!
Чтобы избежать этого, добавьте MsgBox
, чтобы разрешить прерывание в случае ошибки.
Sub ConvertDynamicRangeToNumber1()
Dim UserRange As String
Dim Confirmation As String
UserRange = Selection.Address(False, False)
Confirmation = MsgBox("You have selected the range " & UserRange & " ." & vbNewLine & _
vbNewLine & "Is this correct?", vbYesNo + vbCritical, "Are you sure?")
If Confirmation = vbYes Then
With Sheet1.Range(UserRange)
.NumberFormat = "#,##0.00_);(#,##0.00)"
.Value = .Value
.HorizontalAlignment = xlRight
End With
Else
Exit Sub
End If
End Sub