Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2009, 20:00   #1
Joslen_bomon
Пользователь
 
Регистрация: 13.09.2009
Сообщений: 53
По умолчанию опрос порта по расписанию

Есть код:

Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Private Sub CommandButton1_Click()



[a1] = (Inp(&H378))

End Sub

т.е. по щелчку, в ячейку а1 заноситься значение ПИНов LPT порта.

Необходимо, что бы значения туда заносились не по щелчку а автоматически раз в 5 секунд. как это сделать ?

Как сделать так, что бы код заноса в ячейку активировался при открытии книги, а не при запуска кода в VBA ?
Joslen_bomon вне форума Ответить с цитированием
Старый 03.12.2009, 21:04   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В модуль ЭтаКнига
Код:
Private Sub Workbook_Open()
    Main
End Sub
В стандартный модуль:
Код:
Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Sub Main()
    t = Timer
    Do
        While Timer - t < 0.2: DoEvents: Wend ' интервал 0,2 секунды
        [a1] = Inp(&H378)
        ' Debug.Print Now
        t = Timer
    Loop
End Sub
Пример файла: http://excelvba.ru/XL_Files/Sample__...__23-06-40.zip


(добавлено)
Чтобы в ячейке отображались значения отдельных битов, используйте такой вариант кода:
Код:
Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Sub Main()
    t = Timer
    Do
        While Timer - t < 0.2: DoEvents: Wend ' интервал 0,2 секунды
        [a1] = Long2BinString(Inp(&H378)):        t = Timer
    Loop
End Sub

Function Long2BinString(ByVal a As Long) As String ' число A в двоичном формате
    n = 2: If a < 2 ^ 8 Then n = 1 Else If a > 2 ^ 16 - 1 Then n = 4
    While a > 0: Long2BinString = a Mod 2 & Long2BinString: a = a \ 2: Wend
    Long2BinString = String(8 * n - Len(Long2BinString), "0") & Long2BinString
End Function
В это случае в ячейку вместо числа 255 попадёт строка 11111111, вместо числа 146 - строка 10010010
Пример файла: http://excelvba.ru/XL_Files/Sample__...__23-15-07.zip

Последний раз редактировалось EducatedFool; 03.12.2009 в 21:13.
EducatedFool вне форума Ответить с цитированием
Старый 03.12.2009, 21:17   #3
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Joslen_bomon.
ещё один вариант:
Код:
Sub Main()
    Sheets(1).[a1] = Inp(&H378)
    Application.OnTime Now + TimeSerial(0, 0, 5), "Main"
End Sub
запускать также из модуля Книги.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как запустить макрос по расписанию? zander Microsoft Office Excel 4 19.11.2009 22:50
Выполнение скрипта по расписанию Sparky PHP 7 30.10.2009 16:33
опрос порта ЛПТ shide Общие вопросы Delphi 2 08.10.2009 19:27
Запуск файлов по расписанию Roll1n Софт 6 22.01.2009 20:45
Как получить данные с COM-порта или другого любого порта? DeLure Общие вопросы C/C++ 5 20.09.2007 00:50