Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.71
каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
#1

Excel: можно ли для одной кнопки назначить два макроса - VBA

29.10.2012, 12:04. Просмотров 4685. Ответов 14
Метки нет (Все метки)

Может кто знает, как сделать так, чтобы для кнопки на листе в экселе были события click и dblclick?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2012, 12:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Excel: можно ли для одной кнопки назначить два макроса (VBA):

Как скрепить три макроса для запуска от нажатия одной определённой кнопки ?
Как можно соединить вот эти три макроса,(какой командой в коде это возможно...

Два макроса в Excel. Один перестает работать при добавлении другого
Всем доброе утро. Прошу помощи в проблеме, суть которой заключается в...

Можно ли из макроса минимизировать-максимизировать окно Excel?
Привет всем. Можно ли из макроса минимизировать-максимизировать окно Excel ?...

Как назначить макрос кнопки на панели для быстрого вызова
Назначение макросу кнопки на панели для быстрого вызова на примере в MS Word.

Можно ли с помощью макроса в Excel закрыть текущий открытый проект? (и другое)
Можно ли с помощью макроса в Excel: 1)Закрыть текущий открытый проект (без...

Как можно ускорить работу макроса Excel с большим кол-вом итерационных циклов?
Есть задача, которую решил, но хотел бы ускорить работу. Проблема в том что...

14
Catstail
Модератор
23531 / 11641 / 2034
Регистрация: 12.02.2012
Сообщений: 18,981
29.10.2012, 12:25 #2
Назначается-то без проблем:

Visual Basic
1
2
3
4
5
6
7
Private Sub CommandButton1_Click()
    MsgBox "Клик!"
End Sub
 
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "Двойной Клик!"
End Sub
вот только сделать даблклик физически не предоставляется возможным, если перехватывается простой клик... А зачем это нужно?
1
Sasha_Smirnov
5460 / 1300 / 142
Регистрация: 08.02.2009
Сообщений: 4,008
Записей в блоге: 29
29.10.2012, 12:38 #3
Можно, например, использовать _GotFocus и _DblClick или _MouseMove и просто _Click.
1
каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
29.10.2012, 13:40  [ТС] #4
ну, к примеру у нас есть кнопка
один клик- копирует данные из таблицы в таблицу.
два клика на ту же кнопку- обновляют предыдущий скопированный диапазон, если пользователь, например, изменил что-то

Добавлено через 50 секунд
мне просто интересно, реально ли такое в принципе)
0
Апострофф
Заблокирован
29.10.2012, 13:58 #5
Вариант для трех кнопок мыши разные действия -
Visual Basic
1
2
3
4
5
6
7
Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Select Case Button
Case 1: MsgBox "macro1" 'fmButtonLeft
Case 2: MsgBox "macro2" 'fmButtonRight
Case 4: MsgBox "macro3" 'fmButtonMiddle
End Select
End Sub
2
Hugo121
6211 / 2330 / 390
Регистрация: 19.10.2012
Сообщений: 6,911
29.10.2012, 14:15 #6
Лучший ответ Сообщение было отмечено как решение

Решение

В стандартный модуль:

Visual Basic
1
2
3
4
5
6
7
8
9
Public flag As Boolean
 
Sub macro()
    If flag Then
        MsgBox "Клик!"
    Else
        MsgBox "Двойной Клик!"
    End If
End Sub

В модуль листа:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CommandButton1_Click()
    flag = True
    PauseTime = 0.15
    Start = Timer
    Do While Timer < Start + PauseTime
        DoEvents
    Loop
    macro
End Sub
 
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    flag = False
End Sub
Кнопка Forms.CommandButton.1
3
Catstail
Модератор
23531 / 11641 / 2034
Регистрация: 12.02.2012
Сообщений: 18,981
29.10.2012, 18:12 #7
Hugo121 - здорово, остроумно!
0
Апострофф
Заблокирован
29.10.2012, 18:34 #8
Правда, есть шанс попасть в бесконечный цикл, если щелкнуть кнопку за мгновение до полуночи
0
Hugo121
6211 / 2330 / 390
Регистрация: 19.10.2012
Сообщений: 6,911
29.10.2012, 20:29 #9
Да, мне этот цикл тоже не нравится. Хотя он не бесконечный
Можно иначе сделать на API, на
Private Declare Function GetTickCount Lib "kernel32" () As Long
но сейчас уже убегаю...

Добавлено через 1 час 16 минут
Ну вот, в модуле листа разместить это:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
 
Private Sub CommandButton1_Click()
Dim tm!, ss!
    flag = True
 
    tm = 150    'время задержки (в миллисекундах)
    ss = GetTickCount: DoEvents
    Do While GetTickCount - ss < tm: DoEvents: Loop
 
    macro
End Sub
 
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    flag = False
End Sub
0
каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
30.10.2012, 11:11  [ТС] #10
В общем, вот что в итоге у меня получилось:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
 
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
 Public flag As Boolean
 
Sub macro()
      Dim l&
    If flag = True Then
  
  l = ThisWorkbook.Worksheets("UREN TABEL").Cells(Columns.Rows.Count, 1).End(xlUp).Row
    With Workbooks.Open("C:\Users\kantanovich\Desktop\New folder_1 - Copy\Master exa v1.xlsx").Worksheets("Database WEEKUREN")
        ThisWorkbook.Worksheets("UREN TABEL").Range("A" & l - 6 & ":o" & l).Copy .Cells(.Rows.Count, _
        1).End(xlUp).Offset(1): .Parent.Close True
    End With
    Else
         l = ThisWorkbook.Worksheets("UREN TABEL").Cells(Columns.Rows.Count, 1).End(xlUp).Row
    With Workbooks.Open("C:\Users\kantanovich\Desktop\New folder_1 - Copy\Master exa v1.xlsx").Worksheets("Database WEEKUREN")
        ThisWorkbook.Worksheets("UREN TABEL").Range("A" & l - 6 & ":o" & l).Copy .Cells(.Rows.Count, _
        1).End(xlUp).Offset(-5): .Parent.Close True
    End With
    End If
End Sub
Private Sub CommandButton1_Click()
Dim tm!, ss!
 
    flag = True
     tm = 150    'âðåìÿ Г§Г*äåðæêè (Гў ìèëëèñåêóГ*Г¤Г*Гµ)
    ss = GetTickCount: DoEvents
    Do While GetTickCount - ss < tm: DoEvents: Loop
 
End Sub
 
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   flag = False
End Sub

Но я скорее всего где-то что-то упускаю, потому что через раз запускается и для True выполняет прописанное в Else...(
И на CommandButton1 клики ничего не срабатывает, хотя этот код ей назначен.
0
каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
30.10.2012, 11:20  [ТС] #11
Подставила в код, все работает как надо) единственное что пользователю придется задуматься, чтоб не прогадать кнопку)

Спасибо большое


Добавлено через 1 минуту
Но мне все еще интересно как с даблклик сделать..
0
Hugo121
6211 / 2330 / 390
Регистрация: 19.10.2012
Сообщений: 6,911
30.10.2012, 12:10 #12
каролинка, в CommandButton1_Click() в конце забыли вызвать macro.
Ну и я часть размещал в стандартном модуле - хотя возможно это и не принципиально.
Но в стандартном больше возможностей.
1
каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
30.10.2012, 13:09  [ТС] #13
точно, потеряла macro)
все равно не подхватывает второй клик(

Добавлено через 33 минуты
о, вроде работает все!)
спасибо большое!!!!!!!!
0
Hugo121
6211 / 2330 / 390
Регистрация: 19.10.2012
Сообщений: 6,911
30.10.2012, 13:48 #14
Уф, отлегло
Там смысл в том, что перед выполнением действия по клику дать возможность системе отловить даблклик, и если он произошёл, то это зафиксировать флагом.
Ну а в выполняемом по кнопке макросе сперва проверить состояние флага, чтоб понять, что делалать - работу по клику или по даблклику.
1
каролинка
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 152
30.10.2012, 15:02  [ТС] #15
Я изменила время задержки и все ок стало

 Комментарий модератора 
каролинка, посты целиком не цитируем
0
30.10.2012, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 15:02
Привет! Вот еще темы с решениями:

Создать и назначить макрос для кнопки, чтобы при ее нажатии в ячейке отражалась сумма значений по столбцу
Здравствуйте. Помогите пжлст с этой задачей. Создать и назначить макрос для...

Прошу подсказки для создания кода для макроса в Excel
Добрый день. Возникла ситуация на работе, что необходимо сравнивать данные из...

Оформить код для макроса в Excel
c VBA не знаком((( суть такова что нужно с листа1 складывать например ячейчки...

Макрос для вставки макроса в Excel
Собственно, вопрос в названии. Можно ли написать макрос, который будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru