Страница: 1 |
В VBA(EXCELL) не нашел таймера,но он мне нужен по зарез.Чем можно заменить Таймера или как написать програмно ,чтобы таймер как VB6 действовал по заданному интервалу времени.например так Private Sub Timer1_Timer()
Sub SleepVB(Seconds) Вот, например, задержка в 5 сек: Call SleepVB(5). Такой вариант для таймера вряд ли подойдет. С таким таймером тормоза гарантированы. Процессор будет занят на 100%! Симпатичный у тебя язычок. 107 строк предложить не могу, сие понятно из моего первого ответа. 2 Legik : правда симпатичный? рада что тебе понравился.. 2 starmen : не думаю что мы сможем для тебя такой таймер сделать.. а тебе наши советы не нравятся? не то немного? я бы на воем месте .осх-ы посмотрела в нете.. наверняка кто-нибудь да делал что-то подобное.. думаю что не только у тебя возникала потребность в такое штуке.. Видимо актуальность данного вопроса уже пропала, но, на всякий случай, приведу работающий код "самодельного" APIшного таймера. Проверял на WindowsXP/OfficeXP. (И до сих пор удивляюсь. что подобный "примитив" сработал.) Итого: открываем Word/Excel, Alt-F11, вставляем модуль, а него такой код: Public elpTm As Long Sub main() 'Этопришлось вынести в отдельную процедуру, 'Это обработчик таймера - "таймерная" процедура.. '================Для Excel'а 'Запускать надо main. Почитай о недостающем Timer здесь http://www.microsoft.ru/offext/developers/advices/advice.aspx?id=52 А здесь скачай в архиве - ietimer.ocx http://www.visual.2000.ru/develop/vb/source/ietimer.zip Такой же элемент управления как и в VB 6.0 Если надо скину на электронку Страница: 1 |
Вопрос: Таймер для VBA(EXCELL)
Добавлено: 21.12.03 11:38
Автор вопроса: starmen
Form1.Show
End Sub
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
Legik
ICQ: 292375033
Вопросов: 3
Ответов: 72
Профиль | | #1
Добавлено: 22.12.03 08:50
Точно не знаю, сам никогда не использовал, но попробуй использовать API функции работы с таймером.
Номер ответа: 2
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #2
Добавлено: 22.12.03 21:56
 im Start
Start = Timer
Do While Timer < Start + Seconds
DoEvents
Loop
End Sub
Номер ответа: 3
Автор ответа:
Legik
ICQ: 292375033
Вопросов: 3
Ответов: 72
Профиль | | #3
Добавлено: 23.12.03 10:29
Номер ответа: 4
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #4
Добавлено: 23.12.03 17:11
Legik , не знаю как у остальных, но у меня точно тормозов не было, но если тебе не нравятся эти 7 строк, то можешь предложить свои.. 107..
Номер ответа: 5
Автор ответа:
Legik
ICQ: 292375033
Вопросов: 3
Ответов: 72
Профиль | | #5
Добавлено: 24.12.03 08:42
Номер ответа: 6
Автор ответа:
starmen
Вопросов: 25
Ответов: 17
Профиль | | #6
Добавлено: 24.12.03 10:30
Ребята давайте жить дружно .ПЛЗ сделайте для меня таймер точ-точ как в VB 6 для VBA(Excell)
Номер ответа: 7
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #7
Добавлено: 24.12.03 14:08
Номер ответа: 8
Автор ответа:
kvakak
Вопросов: 0
Ответов: 7
Профиль | | #8
Добавлено: 14.01.04 14:10
Public tmrID As Long
Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
tmrID = SetTimer(&H0, &H0, 1000, AddressOf tmrPrc)
End Sub
'т.к. таймер не желал "убиваться" в таймерной процедуре tmrPrc
Sub tmrKill()
KillTimer &H0, tmrID
End Sub
Public Sub tmrPrc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTimer As Long)
'(Примеры для Word закоментирован)
elpTm = elpTm + 1
'===============Для Word'а
'With Selection
' .InsertAfter Str(elpTm)
' .Collapse Direction:=wdCollapseEnd
'End With
ActiveCell.Value = elpTm
ActiveCell.Offset(1, 0).Select
If elpTm > 10 Then tmrKill
End Sub
Номер ответа: 9
Автор ответа:
starmen
Вопросов: 25
Ответов: 17
Профиль | | #9
Добавлено: 21.01.04 14:39
Спасибо за ответ.
Номер ответа: 10
Автор ответа:
Dimella
Вопросов: 0
Ответов: 1
Профиль | | #10
Добавлено: 24.01.04 18:11
Номер ответа: 11
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #11
Добавлено: 14.02.07 17:49
Конечно можно подключить осх, но если делаешь макрос для нескольких компов то такой вариант вряд-ли подойдёт потому что на каждый надо тащить эту осх а это ГМРй
Номер ответа: 12
Автор ответа:
APS
ICQ: 234458121
Вопросов: 38
Ответов: 107
Профиль | | #12
Добавлено: 02.04.08 11:08
Ребята, курим справку VBA. Вот пример из нее:
The following example uses events to count off seconds during a demonstration of the fastest 100 meter race. The code illustrates all of the event-related methods, properties, and statements, including the RaiseEvent statement.
The class that raises an event is the event source, and the classes that implement the event are the sinks. An event source can have multiple sinks for the events it generates. When the class raises the event, that event is fired on every class that has elected to sink events for that instance of the object.
The example also uses a form (Form1) with a button (Command1), a label (Label1), and two text boxes (Text1 and Text2). When you click the button, the first text box displays "From Now" and the second starts to count seconds. When the full time (9.84 seconds) has elapsed, the first text box displays "Until Now" and the second displays "9.84"
The code for Form1 specifies the initial and terminal states of the form. It also contains the code executed when events are raised.
Private WithEvents mText As TimerState
Private Sub Command1_Click()
Text1.Text = "From Now"
Text1.Refresh
Text2.Text = "0"
Text2.Refresh
Call mText.TimerTask(9.84)
End Sub
Private Sub Form_Load()
Command1.Caption = "Click to Start Timer"
Text1.Text = ""
Text2.Text = ""
Label1.Caption = "The fastest 100 meters ever run took this long:"
Set mText = New TimerState
End Sub
Private Sub mText_ChangeText()
Text1.Text = "Until Now"
Text2.Text = "9.84"
End Sub
Private Sub mText_UpdateTime(ByVal dblJump As Double)
Text2.Text = Str(Format(dblJump, "0")
DoEvents
End Sub
The remaining code is in a class module named TimerState. Included among the commands in this module are the Raise Event statements.
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText()
Public Sub TimerTask(ByVal Duration As Double)
Dim dblStart As Double
Dim dblSecond As Double
Dim dblSoFar As Double
dblStart = Timer
dblSoFar = dblStart
Do While Timer < dblStart + Duration
If Timer - dblSoFar >= 1 Then
dblSoFar = dblSoFar + 1
RaiseEvent UpdateTime(Timer - dblStart)
End If
Loop
RaiseEvent ChangeText
End Sub