#excel #vba
#excel #vba
Вопрос:
Попытка задать значение, полужирный шрифт и цвет диапазона пользовательского ввода
Sub Q3()
Dim Rng As Range
Set Rng = Application.InputBox("Range:", Type:=8)
Set ActiveSheet.Range(Rng).Select.Value = "test"
Range(Rng).Select.Bold = True
Range(Rng).Select.Font.Color = -16776961
End Sub
Ошибка 1004 Определено приложение — ошибка, определенная объектом
Еще одна попытка кода:
Sub Q3()
Dim Rng As Range
Set Rng = Application.InputBox("Range:", Type:=8)
Set ActiveSheet.Range(Rng).Select.Value = "test"
Range(Rng).Select.Bold = True
Range(Rng).Select.Font.Color = -16776961
End Sub
Ошибка 1004 Ошибка метода ‘Range’ объекта ‘_Global’
Ответ №1:
Ваш синтаксис отключен. Rng
это уже диапазон, поэтому нет необходимости заключать его в «Диапазон» (или выбирать).
Возможно, вы захотите сначала проверить, что что-то возвращается полем ввода.
Sub Q3()
Dim Rng As Range
Set Rng = Application.InputBox("Range:", Type:=8)
With Rng
.Value = "test"
.Font.Bold = True
.Font.Color = -16776961
End With
End Sub
Комментарии:
1. Теперь я могу запускать код без ошибок из VBA. При попытке добавить кнопку на рабочий лист отображается сообщение о том, что «Ссылка должна быть на лист макроса»
2. Вероятно, потому, что Q3 является ссылкой на ячейку, поэтому измените имя вашей процедуры.
Ответ №2:
В дополнение к ответу @SJR вам необходимо использовать обработку ошибок, чтобы отслеживать случай, если пользователь нажимает Cancelкнопку. В противном случае вы столкнетесь с ошибкой, потому InputBox
что возвращает логическое False
значение, которое не может быть Set
для переменной объекта.
Option Explicit
Public Sub ProcedureQ3()
Dim Rng As Range
On Error Resume Next 'next line throws error if user presses cancel
Set Rng = Application.InputBox("Range:", Type:=8)
On Error Goto 0 're-activate error reporting
If Rng Is Nothing Then Exit Sub 'exit if user pressed cancel
With Rng
.Value = "test"
.Font.Bold = True
.Font.Color = -16776961
End With
End Sub