2016-01-08 5 views
0

Я пытаюсь использовать поле ввода для выбора диапазона на листе. Теоретически это просто. Пользователь выбирает команду на рабочем листе, которая открывает пользовательскую форму. Пользовательская форма позволяет выбирать одну из нескольких опций. После отправки формы я хочу, чтобы пользователь мог выбрать диапазон из активного листа.Диапазон выбора InputBox из Userform

После представления пользовательской формы появляется поле ввода диапазона, но не позволяет выбирать на активном листе.

Если я вызываю входной ящик непосредственно с листа (не пропуская пользовательскую форму), поле ввода работает правильно. Однако в этом приложении мне нужна пользовательская форма для выбора.

Я попытался повторно активировать лист, программно выбрав диапазон по умолчанию, скрывая и выгружая пользовательскую форму.

Фундаментально это все, что я делаю:

Public Function functionName() 

    Dim rng As Range 

    Set rng = Application.InputBox("select range", Type:=8) 

End Function 

Это только, кажется, не работает, когда она вызывается из модуля с помощью пользовательской формы.

+1

попробуйте 'UserForm1.Show False', когда вы показываете форму – Fadi

ответ

1

Если предположить, что функции, чтобы пользователь получить диапазон выглядит следующим образом (обратите внимание, что я ставлю это в стандартном модуле, а не в коде UserForm):

Public Function GetRange() As Range 

    Dim rInput As Range 

    On Error Resume Next 
    Set rInput = Application.InputBox("select range", Type:=8) 
    On Error GoTo 0 

    If rInput Is Nothing Then 
     Set GetRange = Nothing 
    Else 
     Set GetRange = rInput 
    End If 

End Function 

Тогда ваш код при закрытии UserForm и имея пользователю выбрать диапазон должен выглядеть следующим образом (обратите внимание, что я ставлю это в CommandButton, который закрывает UserForm первый, а затем запрашивает у пользователя, чтобы выбрать диапазон Надень это, где ваш Unload Me находится.):

Private Sub CommandButton1_Click() 

    Unload Me 

    Dim r As Range 

    'Get the range from the input box and verify user did not press cancel 
    On Error Resume Next 
    Set r = GetRange 
    On Error GoTo 0 
    If r Is Nothing Then Exit Sub 'Pressed cancel so no range is returned, cannot proceed 

    'Do what you want with the selected range here 
    MsgBox "'" & r.Parent.Name & "'!" & r.Address 

End Sub 
+0

Мне нужно будет поиграть с этим, чтобы соответствовать моему приложению, но это позволяет мне выбрать диапазон, в котором я нуждаюсь! Спасибо!! –

+0

Я уже пытался выгрузить пользовательскую форму, я не уверен, почему этот метод работает над тем, что я пытался раньше? Может быть, это место, где я выгружал пользовательскую форму? –

+0

@JoshBaker Мне нужно было посмотреть, каков ваш фактический код. Единственный предоставленный вами код был некоторым упрощенным псевдокодом. Не видя, что вы конкретно пытаетесь, я могу только догадываться. – tigeravatar

1

Похоже, ваша форма пользователя заложен как Модальный.

По умолчанию Userforms отображаются как модальные, что означает, что выполнение кода прекратится до тех пор, пока пользователь каким-либо образом не взаимодействует с формой. Это также мешает пользователю делать такие вещи, как выбор диапазонов или изменение листов и т. Д.

Вы можете показать форму как немодальную либо путем изменения свойства «Модальное» в окне дизайна VBE, либо предоставления аргумента при вызове форма:

MyUserForm.Show   '// Uses default modal property of True* 
MyUserForm.Show True  '// Implicitly state that the form should be modal. 
MyUserForm.Show False  '// Implicitly state that the form should NOT be modal. 

* Предполагая ShowModal имущества была оставлена ​​по умолчанию «True» во время разработки.

+0

Я пытался использовать это, но когда я использовал ложную опцию, пользовательская форма не загружалась –

+0

. Немодальная форма не фокусирует фокус так, что она может быть открыта, но если ваш код затем использует '.Activate', форма будет где-то в фоновом режиме, и вам нужно будет вывести ее на передний план. Поместите контрольную точку в код и посмотрите, что с ним происходит. –

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