Вот краткий модуль кода VBA, который может отправлять и получать сообщения через последовательный порт ПК. Это не очень элегантно, но просто и должно работать на современных версиях Excel и Windows.
Вы оставлены наедине с собой, чтобы расширить функциональность и сохранить или проанализировать сообщения. Это просто показывает низкоуровневый материал для работы с последовательным портом.
Первые 5 строк объявляют миллисекундную библиотечную функцию «Сон» (на основе версии Excel).
Подпрограмма SerialPort () описывает шаги для открытия порта, передачи некоторых данных, получения некоторых данных, повторной попытки получения некоторых данных (чтобы показать, что он действительно не сталкивается с ошибкой «конец файла») и закройте порт.
#If VBA7 Then ' Excel 2010 or later
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
#Else ' Excel 2007 or earlier
Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As Long)
#End If
Public Sub SerialPort()
' open a COM port, transmit a message, gather results, close the port.
' open the COM port as file #1
Debug.Print "Open COM port 4"
Open "COM4:115200,N,8,1" For Binary Access Read Write As #1
transmit$ = Chr(2) + "Hello, World." + Chr(13)
receiveDummy$ = "~~~"
' transmit a message
Put #1, , transmit$
Debug.Print "Message sent."
' wait a bit for a response
Sleep 100
' check for received message
Debug.Print "Look for incoming message."
On Error Resume Next
Do While True
receive$ = receiveDummy$ 'dummy value
Input #1, receive$
If receive$ = receiveDummy$ Then Exit Do 'the string didn't change, so move on
Debug.Print receive$
Loop
On Error GoTo 0
' do it again to show that the empty input queue doesn't stop the flow
Debug.Print "Look again for incoming message (should not stop on error)."
On Error Resume Next
Do While True
receive$ = receiveDummy$ 'dummy value
Input #1, receive$
If receive$ = receiveDummy$ Then Exit Do 'the string didn't change, so move on
Debug.Print receive$
Loop
On Error GoTo 0
' close the serial port
Debug.Print "Close COM port."
Close #1
Debug.Print "Done."
End Sub