Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Классный" таймер, Таймеры в VBA 
:(
    Опции темы
Registr
  Дата 4.1.2005, 16:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здраствуйте, уважаемые, а особенно здраствуйте Cardinal, т.к. это вопрос по мотивам статей
ссылки на которые указаны Вами в посте "Странный такой таймер". Как я понял, в VBA нет
собственного таймера с разрешающей способностью менее 1 сек. Класс VB.Timer конечно
хорош, но проблема в том, что далеко не у всех установлен VB, а значит на других компьютерах
такой таймер работать скорее всего не будет. Вот и захотелось мне написать свой собственный
класс, на основе API функций описанных в одной из ваших статей. Но тут сразу же возникла
проблема: функция AddressOf возращает только адрес процедур находящихся в модуле, а
не в классе, значит события Timer() в моём классе не получится. Получился такой класс с выносом:
общая для всех таймеров процедура EventTimer(). Далее я планировал передавать через один
из параметров класса, строкового типа, индивидуальное имя процедуры, вызываемой при
срабатывании каждого конкретного таймера созданного на основе класса. Но не тут-то было.
В VBA, в отличии от Delphi, нет переменных процедурного типа, и следующий код не катит:

Dim NameProc as String (?может есть что-то более подходящее)
NameProc=Timer1.SubName
Call NameProc smile

Конечно, можно вывернутся, передавать какой нибудь условный параметр, типа NumberSub, а
потом писать:

If NumerSub = 1 Then
Call EvStart1
ElsIf NumerSub = 2 Then
Call EvStart2 ...

Но уж больно это всё, как вы писали, через з...цу получается. Нельзя ли сделать что-нибудь
попроще в этом направлении? smile
  Вверх
Staruha
Дата 4.1.2005, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Цитата
хорош, но проблема в том, что далеко не у всех установлен VB, а значит на других компьютерах
такой таймер работать скорее всего не будет.

- Мне кажется ,что VB как бы везде установлен,где есть VBA. Для примера на работе у меня VB6 - не установлен ,а дома есть. Классный таймер работает и там и там.


--------------------
Возмездие настигнет
PM MAIL   Вверх
~FoX~
Дата 17.1.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 1
Всего: 68



Старуха
Это как ставить будешь smile


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Exception
Дата 9.2.2005, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



Класс Vb.Timer - это библиотека VB6.OLB. Попробуй потаскать ее за собой
PM   Вверх
Akina
Дата 9.2.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(Registr @ 4.1.2005, 17:58)
Как я понял, в VBA нет
собственного таймера с разрешающей способностью менее 1 сек.

Хреново понял.
Цитата(TimerInterval)
You can use the TimerInterval property to specify the interval, in milliseconds, between Timer events on a form. Read/write Long.






--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Exception
Дата 11.2.2005, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



Цитата
You can use the TimerInterval property to specify the interval, in milliseconds, between Timer events on a form. Read/write Long.

Да хоть и так только в реальности меньше 0.2 сек он не пашет smile
PM   Вверх
Akina
Дата 11.2.2005, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Run-time error
Цитата
Да хоть и так только в реальности меньше 0.2 сек он не пашет
Загрузи Аксесс. Создай форму. Брось на нее лейбл. Открой редактор VBA и забей туда следующее
Код

Dim i As Long

Private Sub Form_Load()
Надпись0.Caption = ""
Me.TimerInterval = 10 ' Интервал - 0.01 секунды
i = 0
End Sub

Private Sub Form_Timer()
i = i + 1
If i Mod 100& = 0 Then Надпись0.Caption = Str(i)
End Sub
Сохрани. Открой форму. Впечатления - сюда.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Staruha
Дата 12.2.2005, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Цитата
Загрузи Аксесс

Но мы же были в xl? smile


--------------------
Возмездие настигнет
PM MAIL   Вверх
Exception
Дата 13.2.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



В xl нету у формы такого события. Обидно, но факт.
PM   Вверх
Staruha
Дата 13.2.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Ну вот пришли к тому с чего начали.Поэтому Cardinal и сделал Taimer. smile


--------------------
Возмездие настигнет
PM MAIL   Вверх
Akina
Дата 14.2.2005, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата
мы же были в xl?

ихде это было указано?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Staruha
Дата 14.2.2005, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27





--------------------
Возмездие настигнет
PM MAIL   Вверх
Staruha
Дата 1.4.2005, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Вот такая фенька получилась
Код

Private Sub CommandButton1_Click()
Dim c
Dim f
Oclock
 f = t
For x = 0 To t + x
 Oclock
   c = (t - f)
   Range("B2").Value = c 'для просмотра ,что происходит
  Range("C2").Value = x
   If c = 500 Then
   MsgBox "Прошло пол секунды"
Exit For
  End If
  Next
   
End Sub

модуль
Код

Private Declare Function GetTickCount Lib "kernel32" () As Long
Global t

Sub Oclock()
t = GetTickCount
End Sub


Это сообщение отредактировал(а) Старуха - 1.4.2005, 21:48

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  _._______.rar


--------------------
Возмездие настигнет
PM MAIL   Вверх
cardinal
Дата 1.4.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Цитата(Registr @ 4.1.2005, 14:58)
If NumerSub = 1 Then
Call EvStart1
ElsIf NumerSub = 2 Then
Call EvStart2 ...

Чтобы вызвать процедуру по ее имени надо посмотреть на этот пример smile (см. ниже).

Вообще Registr если обращаетесь лично ко мне, то скидывайте мне плиз сообщение по PM, а то ведь я могу и не узнать... smile

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  howto_callbyname.zip


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.