Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

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

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

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

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

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

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

Можно ли из макроса минимизировать-максимизировать окно Excel? - VBA
Привет всем. Можно ли из макроса минимизировать-максимизировать окно Excel ? Можно ли из макроса передать сообщение другому окну...

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

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

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

14
Catstail
Модератор
22823 / 11189 / 1812
Регистрация: 12.02.2012
Сообщений: 18,427
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
5432 / 1277 / 138
Регистрация: 08.02.2009
Сообщений: 3,971
Записей в блоге: 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
5916 / 2079 / 335
Регистрация: 19.10.2012
Сообщений: 6,222
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
Модератор
22823 / 11189 / 1812
Регистрация: 12.02.2012
Сообщений: 18,427
29.10.2012, 18:12 #7
Hugo121 - здорово, остроумно!
0
Апострофф
Заблокирован
29.10.2012, 18:34 #8
Правда, есть шанс попасть в бесконечный цикл, если щелкнуть кнопку за мгновение до полуночи
0
Hugo121
5916 / 2079 / 335
Регистрация: 19.10.2012
Сообщений: 6,222
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
5916 / 2079 / 335
Регистрация: 19.10.2012
Сообщений: 6,222
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
5916 / 2079 / 335
Регистрация: 19.10.2012
Сообщений: 6,222
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
Привет! Вот еще темы с ответами:

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

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

Адаптация макроса Excel для запуска из приложения Access - VBA
Добрый день! Имеем: запрос в MS Access, сохраняющий результат в Excel- файле, макрос окрашивания ячеек в VBA Excel. Как возможно прописать...

Выполнение макроса для всех ячеек столбца Excel - VBA
Здравствуйте! Мне нужно сделать так что бы макрос выполнялся для всех ячеек столбца. Этот пример разработан для одной строки,...


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

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

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