Подскажите как в макросе - учесть долгое нажатие кнопки (кнопки-фигуры имеется ввиду). Например если нажать один раз - то макрос выполнится один раз.
Как изменить макрос, чтобы он при нажатии на кнопку (и не отпускании ее) - зацикленно бы запускал макрос с интервалом в одну секунду ? И переставал бы его воспроизводить - при отпускании кнопки.
То есть как мне кажется можно эту проблему решить: допустим событие MouseDown над этой кнопкой - запускает некий таймер с данным макросом. А событие MouseUp - остановка таймера (и соответственно макроса тоже)
Люди приводят вот такой код, только я не знаю - как его подключить к своему файлу [vba]
Код
Dim Checker As Boolean
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Checker = True: Timer1.Interval = 100 End Sub
Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Checker = False: Timer1.Interval = 0 End Sub
Private Sub Timer1_Timer() Form1.Caption = Val(Form1.Caption) + 1 End Sub
[/vba]
Здравствуйте.
Подскажите как в макросе - учесть долгое нажатие кнопки (кнопки-фигуры имеется ввиду). Например если нажать один раз - то макрос выполнится один раз.
Как изменить макрос, чтобы он при нажатии на кнопку (и не отпускании ее) - зацикленно бы запускал макрос с интервалом в одну секунду ? И переставал бы его воспроизводить - при отпускании кнопки.
То есть как мне кажется можно эту проблему решить: допустим событие MouseDown над этой кнопкой - запускает некий таймер с данным макросом. А событие MouseUp - остановка таймера (и соответственно макроса тоже)
Люди приводят вот такой код, только я не знаю - как его подключить к своему файлу [vba]
Код
Dim Checker As Boolean
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Checker = True: Timer1.Interval = 100 End Sub
Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Checker = False: Timer1.Interval = 0 End Sub
Private Sub Timer1_Timer() Form1.Caption = Val(Form1.Caption) + 1 End Sub
Подскажите как в макросе - учесть долгое нажатие кнопки (кнопки-фигуры имеется ввиду). Например если нажать один раз - то макрос выполнится один раз.
Здравствуйте.
Подскажите как в макросе - учесть долгое нажатие кнопки (кнопки-фигуры имеется ввиду). Например если нажать один раз - то макрос выполнится один раз.АлексейАльтман
#If Win64 Then #If VBA7 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Private Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong) #End If #Else #If VBA7 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If #End If
Sub Мак1() While GetAsyncKeyState(1) And &H8000 Sleep 300: DoEvents [C3] = [C3] + 1 Wend End Sub
[/vba]
[vba]
Код
#If Win64 Then #If VBA7 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Private Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong) #End If #Else #If VBA7 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If #End If
Sub Мак1() While GetAsyncKeyState(1) And &H8000 Sleep 300: DoEvents [C3] = [C3] + 1 Wend End Sub
АлексейАльтман, Перечисленных событий для Shape стандартных нет, Четно скажу в классах не спец и возможно ли через них описать событие и использовать - не скажу. Если замените на ActiveX объекты, то получится.
АлексейАльтман, Перечисленных событий для Shape стандартных нет, Четно скажу в классах не спец и возможно ли через них описать событие и использовать - не скажу. Если замените на ActiveX объекты, то получится.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
krosav4ig, да. Большое спасибо. Я проверил и этот - вроде бы действует.
Но вот я смотрите что имел ввиду: Вот такой макрос: [vba]
Код
#If Win64 Then #If VBA7 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Private Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong) #End If #Else #If VBA7 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If #End If
Sub Мак1() While GetAsyncKeyState(1) And &H8000 Sleep 300: DoEvents [C3] = [C3] + 1 ActiveSheet.Shapes.Range(Array("Rounded Rectangle 2")).IncrementLeft 24 Wend End Sub
[/vba]
Он как бы делает две операции - 1.Добавляет 1 в ячейку, 2.Двигает фигуру. Вот если нажать на кнопку - то фигура не двинется с места (а двинется она лишь тогда когда будет отпущена эта кнопка). Хотя числа - добавляются в ячейку без проблем (а не по отжатию кнопки). Такое ощущение, что срабатывает некое отключение обновления экрана навроде screenupdate=false. Подскажите - что сделать, чтобы и фигура тоже двигалась рывками, а не только добавлялись бы числа в ячейку ?
krosav4ig, да. Большое спасибо. Я проверил и этот - вроде бы действует.
Но вот я смотрите что имел ввиду: Вот такой макрос: [vba]
Код
#If Win64 Then #If VBA7 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Private Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As LongLong) As LongLong Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong) #End If #Else #If VBA7 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Function GetAsyncKeyState Lib "user32" (ByVal kState As Long) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If #End If
Sub Мак1() While GetAsyncKeyState(1) And &H8000 Sleep 300: DoEvents [C3] = [C3] + 1 ActiveSheet.Shapes.Range(Array("Rounded Rectangle 2")).IncrementLeft 24 Wend End Sub
[/vba]
Он как бы делает две операции - 1.Добавляет 1 в ячейку, 2.Двигает фигуру. Вот если нажать на кнопку - то фигура не двинется с места (а двинется она лишь тогда когда будет отпущена эта кнопка). Хотя числа - добавляются в ячейку без проблем (а не по отжатию кнопки). Такое ощущение, что срабатывает некое отключение обновления экрана навроде screenupdate=false. Подскажите - что сделать, чтобы и фигура тоже двигалась рывками, а не только добавлялись бы числа в ячейку ?АлексейАльтман
Sub Мак1() While GetAsyncKeyState(1) And &H8000 Sleep 300: DoEvents [C3] = [C3] + 1 ActiveSheet.Shapes.Range(Array("Rounded Rectangle 2")).IncrementLeft 24 With Application: .WindowState = .WindowState: End With Wend End Sub
[/vba]
АлексейАльтман, [vba]
Код
Sub Мак1() While GetAsyncKeyState(1) And &H8000 Sleep 300: DoEvents [C3] = [C3] + 1 ActiveSheet.Shapes.Range(Array("Rounded Rectangle 2")).IncrementLeft 24 With Application: .WindowState = .WindowState: End With Wend End Sub