В ходе дискуссии в топике "Примечания и их перемещение" ( http://www.planetaexcel.ru/forum.php?thread_id=14184 ) узнал о возможности использования Application.InputBox не только для ввода стрингов, но и при указании разных значений Type: Type:=0.............A formula Type:=1.............A number Type:=2.............Text (a string) Type:=4.............A logical value (True or False) Type:=8.............A cell reference, as a Range object Type:=16...........An error value, such as #N/A Type:=64...........An array of values
В заинтересовавшем меня варианте, при Type:=8 данный метод во многих случаях с успехом заменяет создание форм с элементом RefEdit, что существенно упрощает код программы.
Сейчас пытаюсь усовершенствовать один из своих макросов, выводивший на лист данные, начиная с ActiveCell (т.к. не хотелось делать UserForm с элементом RefEdit, при помощи которого задавалась бы начальная ячейка). Чтобы поменьше переделывать уже отлаженный макрос, решил просто активизировать ячейку, указанную в Application.InputBox("Notes", "Header", Type:=8), а дальше пусть старый макрос работает... НаписАл:
Sub test_InputBox() On Error GoTo Cancel_Input With Application .DisplayAlerts = False Application.InputBox("Укажите ячейку", "Выбор ячейки", Type:=8).Activate .DisplayAlerts = True: On Error GoTo 0 End With MsgBox "Go My Macros!" Exit Sub Cancel_Input: MsgBox "Error " & Err.Number & " (" & Err.Description & ")" End Sub НА ТЕКУЩЕМ ЛИСТЕ работает. Указанная ячейка активируется. Не пойму, как активизировать ячейку на другом листе. Вылетаю в ошибку "Error 1004 (Метод Activate из класса Range завершен неверно)"
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
Я догадываюсь, что нужно использовать Parent чтобы обратиться к листу... Но это возможно только по отношению к Range, а как раз его-то я назначать и не хотел... Похоже, без назначения вспомогательного диапазона не обойтись...
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
Лучше такие потенциальные места выделять в отдельную функцию, чтобы иметь возможность отлавливать другие ошибки в коде Public Function GetUserSelect() As Range On Error GoTo errHandle Set GetUserSelect = Application.InputBox("Prompt", "Title", Type:=8) Exit Function errHandle: Set GetUserSelect = Nothing End Function и анализировать результат Set rCell = GetUserSelect If Not rCell Is Nothing Then End If
Доброго времени суток! Подниму тему. Как обработать три InputBox-а подряд. Все предложенные выше методы для одного рабатают без проблем. При "Отмене" на втором InputBox-е выскакивает ошибка типов, на третьем - "Объект занят".
With Application .DisplayAlerts = False Set RnMain = .InputBox( _ prompt:="Выделите диапазон", Default:="график", Type:=8) If Err Then Err.Clear: Exit Sub On Error GoTo 0
Set Rn1 = .InputBox( _ prompt:="Выберите ячейку 1", Type:=8) If Err Then Err.Clear: Exit Sub On Error GoTo 0
Set Rn2 = .InputBox( _ prompt:="Выберите ячейку 2", Type:=8) If Err Then Err.Clear: Exit Sub On Error GoTo 0 End With
А в чём проблема запросить подряд три InputBox? Если правильно понял: Sub TestCancel() Dim Rng1 As Range, Rng2 As Range, Rng3 As Range On Error Resume Next Set Rng1 = Application.InputBox("Prompt1", "Title1", Type:=8) If Not Rng1 Is Nothing Then MsgBox Rng1.Address Else MsgBox "Не выбрано 1" Set Rng2 = Application.InputBox("Prompt2", "Title2", Type:=8) If Not Rng2 Is Nothing Then MsgBox Rng2.Address Else MsgBox "Не выбрано 2" Set Rng3 = Application.InputBox("Prompt3", "Title3", Type:=8) If Not Rng3 Is Nothing Then MsgBox Rng3.Address Else MsgBox "Не выбрано 3" End If End If End If End Sub
Sub TestCancel() Dim Rng1 As Range, Rng2 As Range, Rng3 As Range On Error Resume Next Set Rng1 = Application.InputBox("Prompt1", "Title1", Type:=8) If Rng1 Is Nothing Then Exit Sub
Set Rng2 = Application.InputBox("Prompt2", "Title2", Type:=8) If Rng2 Is Nothing Then Exit Sub
Set Rng3 = Application.InputBox("Prompt3", "Title3", Type:=8) If Rng3 Is Nothing Then Exit Sub