иметь быстрый доступ к листу, по клавишам Alt+Первая буква

Программирование на Visual Basic for Applications
sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

иметь быстрый доступ к листу, по клавишам Alt+Первая буква

Сообщение sonata » 21.04.2003 (Пн) 10:09

Интересно, в связи с огромным кол-вом листов,
возникло желание иметь доступ к книге, например,
по первой букве Alt+Первая буква имени листа....
Можно ли так?

Fuzzy
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 03.12.2002 (Вт) 12:33

Сообщение Fuzzy » 21.04.2003 (Пн) 11:16

Конечно, можно, вопрос только, как это сделать :))
Я бы предложил на открытие книги повесить бесконечный цикл с DoEvents и в этом цикле через API отлавливать нажатие нужных кнопок.
Но думаю, есть способ попроще

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 22.04.2003 (Вт) 17:18

1) Вставляем в проект пустую форму.
2) Вставляем в лист модуль
3) В модуле листа пишем макрос запускающий форму:
Sub запускФормы()
UserForm1.Show
End Sub
4)Назначаем для него горячие клавишы (допустим CTRL - о)
5) В модуле формы создать событийную процедуру
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii > 256 Then
KeyAscii = KeyAscii - 848
End If
If KeyAscii < 256 And KeyAscii >= 0 Then
For Each w In ThisWorkbook.Worksheets
If Mid(w.Name, 1, 1) = Chr(KeyAscii) Then
ThisWorkbook.Worksheets(w.Name).Select
Exit For
End If
Next w
End If
Unload UserForm1
End Sub

Действуем следующим образом:
1)
запускаем форму через макрос
Ctrl +o
2) Отпустить Ctrl +o
3)На нужном регистре (английский /Русский) нажимаем нужную букву, при необходимости жмем Shift, т.к. программа распознает и заглавные и прописные буквы.
4) Если есть лист в имени которого содержится первая указанная буква, программа передет на него

П.С.
Горячую клавишу для макроса лучше задать программно, что бы не быть связанным с русским и английским регистром.

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 24.04.2003 (Чт) 13:33

Спасибо, за столь подробный ответ.
Форма сама по себе заработала...
Но, вот как все-таки программно задать клавиши для вызова формы?

Можно этот процесс попобробнее?
Я делала так:
1. В ЭтаКнига следующая процедура:

Private Sub Workbook_Open()
Applciation.OnKey "^%{1}", "Show_form"
End Sub

2. Макрос отображения формы Show_form пробовала засунуть и в процедуру формы, а также в Модуль1, но возникала ошибка...
Сама процедура:

Sub Show_form()
UserForm1.Show
End Sub

Что я делаю не так?
Очень жду ответа.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 24.04.2003 (Чт) 13:52

метод Show автоматически вызывает метод Load Если форма уже загружена, то при повторной загрузке возникает ошибка, если я конечно не ошибаюсь...... :roll:

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 24.04.2003 (Чт) 13:53

Sonata:
имя объекта Application было написано не правильно!
Надо вот так:
Application.OnKey "^%{1}", "Show_Form"
или вообще без него:
OnKey "^%{1}", "Show_Form"
:wink:

Calvin:
Load и загружает форму в память и показывает ее на экран.
Метод Show -показывает на экран уже загруженную форму, но если она не загруженна автоматически она загружается.
Hide - скрывает форму, но она остается в памяти.
UnLoad - скрывает форму и выгружает ее из памяти

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 24.04.2003 (Чт) 14:25

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

Sub Show_form()
UserForm1.Show
End Sub

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 24.04.2003 (Чт) 14:42

Вообще в обычном модуле.....но смотря откуда вызывать. Если допустим из формы, то это процедуру можно пихать и в окно кода формы.....

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 24.04.2003 (Чт) 14:55

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

Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 24.04.2003 (Пользователь)
'
' Сочетание клавиш: Ctrl+p
'

UserForm1.Show
End Sub

То, потом форма зацикливается и ее заже не закрыть, без Ctrl+Alt+Del

Очень хочется завершить данный вопрос..

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 24.04.2003 (Чт) 15:00

Sonata:
Процедура должна быть в модуле макросов.
Там к сожалению можно применять только алфавитную клавишу, 1 - нельзя, например малую j , тогда макрос будет срабатывать и на большой J и на русской букве О о.
Последний раз редактировалось Vitaly1 24.04.2003 (Чт) 15:09, всего редактировалось 1 раз.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 24.04.2003 (Чт) 15:03

Calvin
Процедура, которой назначают макрос должна быть только в модуле макросов

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 24.04.2003 (Чт) 15:09

Ну я пробовала по-разному, и с буквами тоже...
А можно Вас попросить выслать работающий пример?
Очень была бы признательна.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 24.04.2003 (Чт) 15:19

2 Vitaly1
просто тут довольно частный случай. Вот допустим, если поместить в окно кода формы1 вышеуказанную процедуру, в которой вызывается допустим форма2, то это работает.....

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 24.04.2003 (Чт) 16:45

Sonata:
Пример выслал. Цифру оказывается тоже можно задавать для запуска макроса, но при этом, в отличии от буквенной клавиши, цифровая клавиша в фигурные скобки не берется,
Application.OnKey "^%1", "Show_Form"


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 54

    TopList