Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.01.2009, 22:01   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Поиск по нажатию Энтер

Как макросом организовать Поиск по нажатию Энтер
Сама задача.
У меня в Лист14 в столбце А, 8-ми значные, положительные числа, по колонке передвигаюсь стрелками.
Нужно -стал на любом числе, нажал Энтер и макрос "перебросил меня" на тот Лист из 13 -ти в столбец К(только там может быть) это число.

Аналог Ctrl + F, только там, много действий, моя бабушка не может эту услугу применить
valerij вне форума
Старый 25.01.2009, 22:15   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Как макросом организовать Поиск по нажатию Энтер
Валера, гораздо проще будет заменить бабушку на другого сотрудника, нежели написать макрос

Сейчас подумаем, что можно сделать...
Может, всё же договоримся насчёт какой-либо другой кнопки? Ну, типа F8 ... F12.
Будет намного проще. Клавиша Enter не предназначена для запуска макросов...

То есть, конечно, макрос можно прицепить и на неё,
Код:
Application.OnKey "~", "test"
но он будет запускаться и после завершения ввода в ячейку, что не есть хорошо...

Цитата:
макрос "перебросил меня" на тот Лист из 13 -ти в столбец К
Не совсем понял, куда должен осуществляться переход...

Последний раз редактировалось EducatedFool; 25.01.2009 в 22:24.
EducatedFool вне форума
Старый 25.01.2009, 22:22   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Не совсем понял, куда должен осуществляться переход...
На тот лист(из 13), где будет это число, оно, значение числа, может быть только одно и только в кол. К

Ну как в Ctrl + F, набираем число, ставим в параметрах в книге, найти все

Почему, Энтер, все таже бабушка, хорошо знает эту клавишу, давай пробел или F12

Последний раз редактировалось valerij; 25.01.2009 в 22:46.
valerij вне форума
Старый 25.01.2009, 23:08   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Почему, Энтер, все таже бабушка, хорошо знает эту клавишу, давай пробел
Интересно, сколько всего кнопок она знает? Скоро на клаве известные ей кнопки закончатся..
С таким уровнем её знаний тебе до конца жизни придётся писать всё новые и новые макросы.


Вставь код в любой модуль.
Запусти один раз МакросДляБабушки.

При нажатии пробела на ячейке в столбце А листа 14, если в этой ячейке находится 8-значное число, будет произведён переход на первую найденную ячейку в столбцах К листов с 1 по 13.
Код:
Sub МакросДляБабушки()
    Application.OnKey " ", "ПоискЗначенияНаДругихЛистах"
End Sub

Sub ПоискЗначенияНаДругихЛистах()
    If ActiveCell.Parent.Index <> 14 Then Exit Sub
    If ActiveCell.Column <> 1 Then Exit Sub
    a = Trim$(ActiveCell): If Not a Like "########" Then Exit Sub

    Dim res As Range, ra As Range
    For i = 1 To 13
        Set ra = ThisWorkbook.Worksheets(i).Columns("K")
        Set res = ra.Find(a, ra.Cells(1))
        If Not res Is Nothing Then Application.Goto res: Exit For
    Next
End Sub
EducatedFool вне форума
Старый 25.01.2009, 23:19   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Интересно, сколько всего кнопок она знает? Скоро на клаве известные ей кнопки закончатся..
С таким уровнем её знаний тебе до конца жизни придётся писать всё новые и новые макросы.
Вставь код в любой модуль.
С пробелом, будет пять!
Все разобрался, все ОК
Тупо скопировал код, даже не взглянул на
Application.OnKey " ", "ПоискЗначенияНаДругихЛистах"

Последний раз редактировалось valerij; 25.01.2009 в 23:24.
valerij вне форума
Старый 25.01.2009, 23:52   #6
cent
Пользователь
 
Аватар для cent
 
Регистрация: 26.12.2008
Сообщений: 73
По умолчанию

Цитата:
бабушка, хорошо знает эту клавишу, давай пробел
Цитата:
МакросДляБабушки
Молодцы
Улыбнуло от души
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах
cent вне форума
Старый 26.01.2009, 00:09   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от cent Посмотреть сообщение
Молодцы
Улыбнуло от души
Это не шутки ради для тех кто не в курсе, почему все так!

Работает у меня, моя близкая родственница ей 79 лет, ПК никогда в жизни не видела, но уже два года под ХР!!!

Игорь все ОК!

А скажи мона чуть сузить диапазон, не всю коллонку К, а только в К34:К39 с шагом 51 ??

Делал так, не -а
Код:
For i = 1 To 13
        For iCol = 0 To 30
            Set ra = ThisWorkbook.Worksheets(i).[K34:K39].Offset(iCol * 51)
            If Not ra Is Nothing Then Application.Goto ra: Exit For
            Set res = ra.Find(a, ra.Cells(1))
            If Not res Is Nothing Then Application.Goto res: Exit For
        Next
Next

Последний раз редактировалось valerij; 26.01.2009 в 00:16.
valerij вне форума
Старый 26.01.2009, 00:41   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
А скажи мона чуть сузить диапазон, не всю коллонку К, а только в К34:К39 с шагом 51 ??
Можно, но не нужно. Скорость работы макроса от этого только снизится...

Можно написать так: Set ra = ThisWorkbook.Worksheets(i).[K34:K1600]
вместо Set ra = ThisWorkbook.Worksheets(i).Columns( "K") - тогда будет чуточку быстрее.

А вот перебирать в цикле отдельные участки ячеек из столбца К, или же сначала формировать диапазон, содержащий в себе эти поддиапазоны, - не лучший способ. (отрицательно скажется на производительности кода)

Да и зачем? Я ведь проверял макрос - отрабатывает он моментально.
Даже если бы поиск занимал в 100 раз больше времени - бабушка всё равно бы ничего не успела заметить

PS: Предупреждаю - есть вероятность того, что этот макрос осложнит тебе жизнь... Наверняка те восьмизначные числа, поиск которых осуществляет макрос, не являются уникальными в рамках книги.
Представь, что будет, если бабушка таким образом попадёт не на нужное число, а на такое же в другой строке другого листа, и что-нибудь там наизменяет... Потом без бутылки не разобраться будет.

Последний раз редактировалось EducatedFool; 26.01.2009 в 00:46.
EducatedFool вне форума
Старый 26.01.2009, 01:00   #9
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Можно, но не нужно. Скорость работы макроса от этого только снизится....
Да я это понимаю, вкратце, в столбце К есть два таких числа, одно это ввод(то, что надо если что менять) оно в [К34:К39] с шагом 51 и второе, вывод - число полученное после сверки в диап. [К22:К33], макрос работает мгновенно, но находит первое попавшиеся число именно тут [К22:К33], боюсь ОНА не въедет!

Игорь, бог с этим, я ей разъясню какие числа надо ТАК, пробелом. искать!
Как сделать, что бы по центру моника был найденный результат поиска!

Последний раз редактировалось valerij; 26.01.2009 в 01:07.
valerij вне форума
Старый 26.01.2009, 01:13   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
в столбце К есть два таких числа, одно это ввод(то, что надо если что менять) оно в [К34:К39] с шагом 51 и второе, вывод
Ну, раз так, то ничего не поделать... придётся искать только в нужных ячейках.

Код:
Sub МакросДляБабушки()
    Application.OnKey " ", "ПоискЗначенияНаДругихЛистах"
End Sub

Sub ПоискЗначенияНаДругихЛистах()
    If ActiveCell.Parent.Index <> 1 Then Exit Sub
    If ActiveCell.Column <> 1 Then Exit Sub
    a = Trim$(ActiveCell): If Not a Like "########" Then Exit Sub

    Dim res As Range, ra As Range
    For i = 1 To 13
        Set ra = ThisWorkbook.Worksheets(i).[K34:K39]
        For j = 1 To 30: Set ra = Union(ra, ra.Offset(j * 51)): Next j

        Set res = ra.Find(a, ra.Cells(1))
        If Not res Is Nothing Then Application.Goto res: Exit For
    Next
End Sub
Теперь макрос заметно притормаживает
(на строке For j = 1 To 30: Set ra = Union(ra, ra.Offset(j * 51)): Next j )

Можно, в принципе, не объединять диапазоны, а 30 раз подряд запускать Find на каждом листе, но сомневаюсь, что это увеличит скорость...

И ещё, Валера, помни: с этого момента твои макросы ни в коем случае не должны вылетать с ошибками...
Не дай бог перезапустится Excel, и МакросДляБабушки не сработает автоматически - твоя бабушка клавишей "пробел" позатирает весь твой файл, прежде чем до неё дойдёт, что что-то здесь не так...
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По нажатию Enter Andr Общие вопросы Delphi 8 22.12.2008 16:58
Сортировка по нажатию кнопки Nate-p Microsoft Office Access 2 25.06.2008 08:35
Рисование по нажатию клавиши на клавиатуре... zvuk01 Помощь студентам 1 25.12.2007 17:49
Картинка появляется по нажатию кнопки! MAKEDON Общие вопросы Delphi 3 12.12.2007 22:49
переход курсора по нажатию клавиши matus Общие вопросы Delphi 3 22.11.2007 22:33