Диапазон ввода пользователем заданный цвет, значение, жирный шрифт: ошибка времени выполнения ‘1004’: определено приложение — ошибка, определенная объектом

#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