2015-12-10 1 views
1

Я создал Userform с несколькими кнопками опций в составе крупного макроса. UserForm будет загружаться, если есть определенная ошибка расчета, и попросит пользователя выбрать метод для исправления ошибки. Один параметр включает элемент управления RefEdit и позволяет пользователю выбирать новую начальную ячейку (и пропускать ошибки и ячейки между текущим и новым диапазоном).UserForm RefEdit - код для повторной инициализации выбора диапазона

Я использовал событие _Exit, чтобы установить некоторую проверку ошибок (например, для обеспечения выбора допустимого диапазона или для обеспечения диапазона 1x1), но мне не удалось найти способ принудительного управления элементом RefEdit «повторно инициализировать». Я попытался использовать метод RefEdit.SetFocus, но это не приводит к результату, который я хочу.

В принципе, есть ли команда, которую я могу использовать, которая отражает действие щелчка на кнопке dropbutton на элементе управления RefEdit?

Private Sub RefEdit_NewStartCell_Exit(ByVal Cancel As MSForms.ReturnBoolean) On Error Resume Next Set UserRange = Range(RefEdit_NewStartCell.Text) If Err.Number <> 0 Then MsgBox "Invalid range selected" RefEdit_NewStartCell.SetFocus End If On Error GoTo 0

+0

только немой вопрос: когда есть ошибка не будет 'Отмена = true' все, что вам нужно? (я уверен, что я ошибся) –

+0

Не уверен, я не слишком хорошо знаком с тем, как работает Отказ. Это просто заменит эту линию? 'If Err.Number <> 0 Then' – CrazyPianoMan

+0

' Cancel = True' просто предотвратит такое действие: в этой книге: 'Private Sub Workbook_BeforeClose (Cancel As Boolean): Cancel = True: End Sub', если вы попытаетесь закройте рабочую книгу, чтобы запустить BeforeClose. Если (в конце Sub) 'Cancel = True', действие будет отменено самостоятельно => вы не сможете закрыть книгу. если RefEdit_NewStartCell_Exit работает одинаково, то 'If Err.Number <> 0 Then Cancel = True' будет препятствовать его завершению, и вы будете придерживаться выбора до' Range (RefEdit_NewStartCell.Text) 'не имеет ошибки в Exit ... но я не уверен ... просто попробуйте :) –

ответ

0

Это не «реальный» ответ, но обходной путь (в большинстве случаев первенствует врезались использованием REFEDIT, поэтому я не мог запустить тесты ... извините)

Делают это с REFEDIT если и хотите (я использовал текстовое поле):

Private Sub TextBox1_Enter() 

    On Error Resume Next 
    Set UserRange = Nothing 
    UserForm1.Hide 

    While UserRange.Count <> 1 
    Set UserRange = Application.InputBox("Select Range", , , , , , , 8) 
    Wend 

    CommandButton1.SetFocus 
    TextBox1.Value = UserRange.Address 
    UserForm1.Show 

End Sub 

Надеюсь, кто-то получил лучший ответ скоро^^;.

По крайней мере InputBox будет возвращать только допустимый диапазон (нет необходимости, чтобы проверить, что)

 Смежные вопросы

  • Нет связанных вопросов^_^