Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Таймер для VBA(EXCELL) Добавлено: 21.12.03 11:38  

Автор вопроса:  starmen

 В  VBA(EXCELL) не нашел таймера,но он мне нужен по зарез.Чем можно заменить Таймера или как написать програмно ,чтобы таймер как VB6 действовал по заданному интервалу времени.например так

Private Sub Timer1_Timer()
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

Sub SleepVB(Seconds)
    ;Dim Start
    Start = Timer
    Do While Timer < Start + Seconds
          DoEvents
    Loop
End Sub

Вот, например, задержка в 5 сек: Call SleepVB(5). 

Ответить

Номер ответа: 3
Автор ответа:
 Legik



ICQ: 292375033 

Вопросов: 3
Ответов: 72
 Профиль | | #3 Добавлено: 23.12.03 10:29

Такой вариант для таймера вряд ли подойдет.

С таким таймером тормоза гарантированы. Процессор будет занят на 100%!

Ответить

Номер ответа: 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

Симпатичный у тебя язычок.

107 строк предложить не могу, сие понятно из моего первого ответа.

Ответить

Номер ответа: 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

2 Legik :  правда симпатичный? рада что тебе понравился.. ;)

2 starmen : не думаю что мы сможем для тебя такой таймер сделать.. а тебе наши советы не нравятся? не то немного? я бы на воем месте .осх-ы посмотрела в нете.. наверняка кто-нибудь да делал что-то подобное.. думаю что не только у тебя возникала потребность в такое штуке..

Ответить

Номер ответа: 8
Автор ответа:
 kvakak



Вопросов: 0
Ответов: 7
 Профиль | | #8 Добавлено: 14.01.04 14:10

Видимо актуальность данного вопроса уже пропала, но, на всякий случай, приведу работающий код "самодельного" APIшного таймера. Проверял на WindowsXP/OfficeXP. (И до сих пор удивляюсь. что подобный "примитив" сработал.)

Итого: открываем Word/Excel, Alt-F11, вставляем модуль, а него такой код:

Public elpTm As Long
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

Sub main()
 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

 '================Для Excel'а
 ActiveCell.Value = elpTm
 ActiveCell.Offset(1, 0).Select
If elpTm > 10 Then tmrKill
End Sub

'Запускать надо main.

Ответить

Номер ответа: 9
Автор ответа:
 starmen



Вопросов: 25
Ответов: 17
 Профиль | | #9 Добавлено: 21.01.04 14:39
 Спасибо за ответ.

Ответить

Номер ответа: 10
Автор ответа:
 Dimella



Вопросов: 0
Ответов: 1
 Профиль | | #10 Добавлено: 24.01.04 18:11

Почитай о недостающем 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

Если надо скину на электронку

 

Ответить

Номер ответа: 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.

Option Explicit

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.

Option Explicit
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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам