2013-03-15 5 views
0

пользователя Ввод данных в Edit область из ComboBoxпереориентация на Excel UserForm ComboBox

В ComboBox Изменит событие используется для запуска следующего кода;

AppActivate "Microsoft Excel" 
     : 
    'Do some stuff 
     : 
    UserForm1.Show 
    UserForm1.ComboBox1.SetFocus 

Это работает ОК, НО; хотя ComboBox снова имеет Focus (в соответствии с Userform.ActiveControl в любом случае), у него нет указателя на ввод, чтобы указать этот факт, и пользователь должен повторно выбрать ComboBox, прежде чем он сможет продолжить ввод данных.

I хотел бы иметь его так, что вставка указателя появляется снова, и пользователь может продолжить ввод данных непосредственно, без необходимости повторно выбрать ComboBox

Добавление следующей строки кода

SendKeys "{TAB}+{TAB}{RIGHT}" 

одно решение, но это беспорядочно (он генерирует события ComboBox и с помощью SendKeys лучше всего избегать, если возможно, в любом случае)

Может ли кто-нибудь предложить лучшее решение?

В. Почему черные овцы едят меньше белых овец?

A. Потому что не так много из них

ответ

0

После

UserForm1.ComboBox1.SetFocus 

добавить

UserForm1.ComboBox1.SelStart = 0 'set the selected text starting position to 0 
+0

Это не работает на моем ПК? – mikebinz

+0

Можете ли вы опубликовать остальные процессы @ '' Делай какие-то вещи ', может быть, что-то другое заставляет его не работать. –

0

В конце UserForm Change Event добавить код:

Application.OnTime Now + TimeValue("00:00:01"), "GetComboBoxFocus", , True 

Внутри модуля добавьте код:

Sub GetComboBoxFocus() 
    UserForm1.ComboBox1.SetFocus 
End Sub 

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

1

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

Попробуйте этот код:

with UserForm1.ComboBox1 
    .Visible = False 
    .Visible = True 
    .setfocus 
end with 

или в более общем плане, чтобы установить должным образом сосредоточиться, вызовите этот подпункт:

Sub Focus_ControlOfUserForm(ByRef Obj As Object) 'from the Userform, call Focus_ControlOfUserForm(Me) 
Dim ctl As Control 
With Obj 
    Set ctl = .ActiveControl 
    If TypeName(ctl) = "MultiPage" Or TypeName(ctl) = "Frame" Then 
     Set ctl = ctl.SelectedItem.ActiveControl.Name 
    End If 

    With ctl 
     Dim Af As Boolean 
     With Application 
      Af = .ScreenUpdating 
      .ScreenUpdating = False 
     End With 
     '.SetFocus 
     .Visible = False 
     .Visible = True 
     .SetFocus 
     If Af Then Application.ScreenUpdating = True 
    End With 
End With 
End Sub 

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

+0

+1 Сброс '.Visible', а затем' .SetFocus' работал! Мне было трудно получить возможность начать вводить текст в ComboBox после инициализации UserForm. – PatricK

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