Вопрос: Очень нужна помощь VBA+Excel | Добавлено: 08.12.06 13:02 |
Автор вопроса: ![]() |
Здравствуйте, уважаемые!
Пожалуйста, помогите в решении следующих проблем: 1. Как узнать, загружена ли UserForm? 2. Как передать фокус и держать фокус на Text.Box немодальной UserForm (ShowModal=False). Огромное спасибо! |
Ответы | Всего ответов: 19 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #1 | Добавлено: 08.12.06 13:17 |
'--------------------------------------------------------------------------------
' Проект : OfflineClient ' Процедура : IsFormLoaded ' Описание : Возвращает загружена-ли форма ' Кем создан : SNE ' Дата-Время : 07.11.2004-19:12:34 ' ' Параметры : sFormName - Имя формы '-------------------------------------------------------------------------------- Public Function IsFormLoaded(ByVal sFormName As String) As Boolean Dim i_l As Integer For i_l = cNull To Forms.Count - vbNull If sFormName = Forms(i_l).Name Then IsFormLoaded = True: Exit Function Next End Function |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 10 |
Профиль | Цитата | #2 | Добавлено: 08.12.06 13:47 |
Спасибо, Hacker!
Однако, как все просто, когда знаешь и не забыл. А как с Проблемой 2? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 10 |
Профиль | Цитата | #3 | Добавлено: 08.12.06 14:08 |
Уважаемый Hacker!
Есть, оказывается проблема с предложенным тобой кодом, а именно - у меня почему-то напрочь отсутствует коллекция Forms. Что делать? |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 33 Ответов: 81 |
Профиль | Цитата | #4 | Добавлено: 08.12.06 19:50 |
2) TextBox2.focus если внутри формы
или если откуда-то ещё то UserForm.TextBox2.Focus |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 36 Ответов: 326 |
Профиль | Цитата | #5 | Добавлено: 09.12.06 08:30 |
2) обработать: при переходе фокуса на другой объект, написать установку фокуса заново UserForm.TextBox2.setFocus |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 10 |
Профиль | Цитата | #6 | Добавлено: 09.12.06 09:02 |
Спасибо, Fenix!
Спасибо, night_roll! Но это работает только для модальной пользовательской формы (свойство ShowModal=True). У меня же пользовательская форма немодальная (свойство ShowModal=False). Загружаю ее кодом <UserForm.Show 0>. SetFocus как не бымши. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 36 Ответов: 326 |
Профиль | Цитата | #7 | Добавлено: 09.12.06 09:32 |
Но это работает только для модальной пользовательской формы (свойство ShowModal=True)
' UserForm.ShowModal = False
' кидаем TextBox1 ' кидаем TextBox2 Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) TextBox1.SetFocus End Sub и всё работает !? |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 10 |
Профиль | Цитата | #8 | Добавлено: 09.12.06 09:55 |
Спасибо, night_roll!
Но, если в случае <UserForm.TextBox.SetFocus UserForm.Show 1> - - фокус есть, то в случае <UserForm.TextBox.SetFocus UserForm.Show 0> - - фокуса нет. Кстати, <UserForm.ShowModal = False> не работает. Тут можно только <UserForm.Show 0>. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 10 |
Профиль | Цитата | #9 | Добавлено: 09.12.06 11:54 |
Это опять я!
Наверное, я чего-то (в смысле, ничего) не понимаю. Если фокус установлен, то где тогда курсор в этом TextBox-е |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 36 Ответов: 326 |
Профиль | Цитата | #10 | Добавлено: 09.12.06 12:02 |
Если фокус установлен, то где тогда курсор в этом TextBox-е а какая разница где курсор! если фокус установлен, то ввод данных будет производиться в TextBox1 (см. код выше)
|
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 36 Ответов: 326 |
Профиль | Цитата | #11 | Добавлено: 09.12.06 12:06 |
Кстати, <UserForm.ShowModal = False> не работает. у тебя сказано выше, что это свойство, которое устанавливается при создании формы, но это сути не меняет.
отображение наличия фокуса на объекте(кнтроле) зависит от него самого, т.е. как у него это прописано ![]() |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 10 |
Профиль | Цитата | #12 | Добавлено: 09.12.06 13:02 |
В курсоре и вся проблема - необходимо, чтобы в TextBox-е был курсор. Мне нужно обеспечить параллельный ввод и с клавиатуры, и кликом мыши. |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 36 Ответов: 326 |
Профиль | Цитата | #13 | Добавлено: 09.12.06 13:45 |
ты напиши делом, что ты хочешь сделать (хотя бы на этом этапе)?
И что такое Мне нужно обеспечить параллельный ввод и с клавиатуры, и кликом мыши какой ввод можно обеспечить кликом мыши?
|
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 2 Ответов: 10 |
Профиль | Цитата | #14 | Добавлено: 11.12.06 05:14 |
Уважаемый night_roll!
Согласна, первый вопрос поставлен некорректно. С клавиатуры нужно вводить всякую цифирь, кликом мыши - адрес ячейки. Если говорить об аналоге, то это Мастер функций в Excel. |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #15 | Добавлено: 13.12.06 01:04 |
Ты сама непонимаешь что хочешь от компьютера. Это просто женская логика, не в обиду сказанно... У компа только 0 и 1, а "может быть" здесь нет.
Если тебе нужно вводить данные с клавы в текстбокс, то на форме, на который этот текстбокс должен быть фокус. Т.е. .Show 0 абсолютно ненужен. При убивании фокуса с формы, фокус убивается и со всех контролов на этой форме. При возвращении на эту форму, фокус может запоминатся, но только при возвращении. Если хочешь чтобы форма была не активна, соответственно текстбокс был без фокуса, но всеравно туда падало все что нажато - это уже слежение за клавой, хуками например или ещё чем-то там... хоть в цикле... но само оно небудет, и не должно... Если форма показана .Show 0, т.е. она не модальна, перед установкой фокуса форму нужно сделать активную, т.е. показать её по нормальному, или установить фокус на контрол из этой формы, что соответственно саму её сделает активную... |
|