
В общих чертах...
Имеется книга Excel, в которой (после запуска, разумеется) нужно автоматически, спустя некое время, периодически обновлять данные.
Прикрутил на панель инструментов свою с: CommandBarComboBox, для выбора из списка или ввода своего значения периода обновления, и CommandBarButton. Кнопку сделал триггером (нажал - зафиксировалась).
Замысел таков: выбрал в ComboBox-е период, нажал кнопку - пошел таймер, периодически запускающий основную процедуру. Кнопку отжал: процедура автоматического обновления (если была запущена, то после завершения, если был период ожидания, то сразу) остановилась.
Замысел замыслом, но проблема в создании обработчика события клика на кнопке. Кнопку нажал, таймер стартует, процедура запускается, таймер стартует... и далее по кругу, а кнопку наглухо заклинивает.

Код (вернее та его часть, что на модуле с основной процедурой) примерно следующий:
- Код: Выделить всё
Public AutoRefrBttn As CommandBarButton ' перекл-е режимов работы
Public RefrPerCbBx As CommandBarComboBox ' период обновления
Sub SwtchMode()
With AutoRefrBttn
If .State = msoButtonUp Then
.Caption = " [ Автом. ] "
.State = msoButtonDown
pt = TmRsm
DataRefr pt
ElseIf .State = msoButtonDown Then
.Caption = " [ Ручн. ] "
.State = msoButtonUp
End If
End With
End Sub
'
' Автоматическое обновление данных с заданным интервалом
Private Sub DataRefr(pt As Integer)
Dim TmrStrt
If pt = Empty Then Exit Sub
TmrStrt = Timer
With AutoRefrBttn
Do While Timer < TmrStrt + pt _
Or .State = msoButtonUp
DoEvents
' <здесь что-то надо воткнуть?>
Loop
MaineSub
' <и здесь, наверное?>
DataRefr pt
End With
End Sub
'
' Ф-ия пересчета времени обновления
Function TmRsm()
Dim strRfrPer As String
Dim bytChNr As Byte
strRfrPer = RefrPerCbBx.Text
bytChNr = Asc(Mid(strRfrPer, 1, 1))
If bytChNr > 47 And bytChNr < 58 Then
TmRsm = CDec(strRfrPer) * 60
Else
MsgBox "Неправильно задан период", vbExclamation, _
"Внимание"
End If
End Function
Вопрос: можно ли сделать "триггером" одну CommandBarButton (если да, то как правильно обрабатывать клик на ней)? Или придется извращаться и "лепить" два "батона" - "сиамских близнеца" "косящих" под "триггер" - пока один (одна) честно показывает свой "фейс", второй (вторая) "прикидывается ветошью" под первой и "не отсвечивает".

(Ентот варьянт я уже попробовал, если правильно подобрать размер текста, чтобы не было дерганья при "пересменке", то трудно заметить подвох. Есть правда еще вариант: запускать таймер и процедуру из ComboBox-a. Тогда "заклинивает" уже его, а кнопка нормально отрабатывает. Но это уже не по-нашенски

