Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Длительное нажатие кнопки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Длительное нажатие кнопки (Макросы/Sub)
Длительное нажатие кнопки
АлексейАльтман Дата: Суббота, 20.04.2019, 19:50 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте.

Подскажите как в макросе - учесть долгое нажатие кнопки (кнопки-фигуры имеется ввиду).
Например если нажать один раз - то макрос выполнится один раз.

Как изменить макрос, чтобы он при нажатии на кнопку (и не отпускании ее) - зацикленно бы запускал макрос с интервалом в одну секунду ?
И переставал бы его воспроизводить - при отпускании кнопки.

То есть как мне кажется можно эту проблему решить: допустим событие 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]
К сообщению приложен файл: 8214562.xls (35.5 Kb)
 
Ответить
СообщениеЗдравствуйте.

Подскажите как в макросе - учесть долгое нажатие кнопки (кнопки-фигуры имеется ввиду).
Например если нажать один раз - то макрос выполнится один раз.

Как изменить макрос, чтобы он при нажатии на кнопку (и не отпускании ее) - зацикленно бы запускал макрос с интервалом в одну секунду ?
И переставал бы его воспроизводить - при отпускании кнопки.

То есть как мне кажется можно эту проблему решить: допустим событие 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]

Автор - АлексейАльтман
Дата добавления - 20.04.2019 в 19:50
АлексейАльтман Дата: Вторник, 23.04.2019, 18:03 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте.

Подскажите как в макросе - учесть долгое нажатие кнопки (кнопки-фигуры имеется ввиду).
Например если нажать один раз - то макрос выполнится один раз.
 
Ответить
СообщениеЗдравствуйте.

Подскажите как в макросе - учесть долгое нажатие кнопки (кнопки-фигуры имеется ввиду).
Например если нажать один раз - то макрос выполнится один раз.

Автор - АлексейАльтман
Дата добавления - 23.04.2019 в 18:03
krosav4ig Дата: Вторник, 23.04.2019, 19:05 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
[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
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Среда, 24.04.2019, 00:42
 
Ответить
Сообщение[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
[/vba]

Автор - krosav4ig
Дата добавления - 23.04.2019 в 19:05
bmv98rus Дата: Вторник, 23.04.2019, 19:26 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4098
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
АлексейАльтман, Перечисленных событий для Shape стандартных нет, Четно скажу в классах не спец и возможно ли через них описать событие и использовать - не скажу. Если замените на ActiveX объекты, то получится.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеАлексейАльтман, Перечисленных событий для Shape стандартных нет, Четно скажу в классах не спец и возможно ли через них описать событие и использовать - не скажу. Если замените на ActiveX объекты, то получится.

Автор - bmv98rus
Дата добавления - 23.04.2019 в 19:26
krosav4ig Дата: Среда, 24.04.2019, 00:41 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
изменил свой предыдущий пост


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеизменил свой предыдущий пост

Автор - krosav4ig
Дата добавления - 24.04.2019 в 00:41
АлексейАльтман Дата: Среда, 24.04.2019, 02:07 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
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.
Подскажите - что сделать, чтобы и фигура тоже двигалась рывками, а не только добавлялись бы числа в ячейку ?
К сообщению приложен файл: 1_2.xls (44.5 Kb)


Сообщение отредактировал АлексейАльтман - Среда, 24.04.2019, 02:07
 
Ответить
Сообщение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.
Подскажите - что сделать, чтобы и фигура тоже двигалась рывками, а не только добавлялись бы числа в ячейку ?

Автор - АлексейАльтман
Дата добавления - 24.04.2019 в 02:07
krosav4ig Дата: Среда, 24.04.2019, 22:29 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
АлексейАльтман, [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
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеАлексейАльтман, [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
[/vba]

Автор - krosav4ig
Дата добавления - 24.04.2019 в 22:29
АлексейАльтман Дата: Четверг, 25.04.2019, 02:16 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
krosav4ig, теперь все нормально.
Спасибо большое.
 
Ответить
Сообщениеkrosav4ig, теперь все нормально.
Спасибо большое.

Автор - АлексейАльтман
Дата добавления - 25.04.2019 в 02:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Длительное нажатие кнопки (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!