Using ActiveXperts Serial Port Component with VBA (Visual Basic for Applications)
ActiveXperts Serial Port Component is a software development kit (SDK) that enables the user to communicate to a device over a serial interface.
Such a device can be: a weight indicator, a modem, a scanner, or any other device that is equiped with a serial port. It can even be another PC, connected via a NULL modem cable.
ActiveXperts Serial Port Component features the following:
- Direct COM port support (like 'COM1')
- TAPI (Windows Telephony Device) support (like 'Standard 56000 bps Modem');
- Support for RS-232/RS422/RS485, up to 256 simultaneous ports;
- Support for all types of Hayes compatible modems;
- Support for serial cable as well as USB cable or Bluetooth connections;
- Support for Virtual COM ports (i.e. COM ports redirected through the network);
- Hardware flow control (RTS/CTS, DTR/DSR) and software flowcontrol (XON/XOFF) support;
- Configurable baudrate/parity/stopbits, full buffered data transfer, text/binary data transfer.
Step 1: Download and install the ActiveXperts Serial Port Component
Download the ActiveXperts Serial Port Component from the ActiveXperts Download Site and start the installation. The installation guides you through the installation process.
Step 2: Create a new Excel document
Create the form displayed in the image below. To create the buttons, textarea's and drop down menu's, click "View", "Toolbars", "Control toolbox".
(Click on the picture to enlarge)
Step 3: Fill in the dropdown-menu's
Wen you're finished setting up the form, you need to fill in the dropdown menu's. You need to load the content of your submenu when you open your workbook.You can do this using a visual basic code. To edit your visual basic code you need to be in design mode. To get in design mode, click the button "Design mode" on the control toolbox. You can edit the visual basic code behind your form in Excel by clicking the button "View code" below "Design mode" on the control toolbox.
Open "ThisWorkbook".
(Click on the picture to enlarge)
Type the following code in private sub workbook_open():
Make sure you're directing to the right sheet (worksheets("sheet1")).
'load the dropdown menu's With Worksheets("Sheet1").cbComport .AddItem "COM1" .AddItem "COM2" .AddItem "COM3" .AddItem "COM4" .AddItem "COM5" .AddItem "COM6" .AddItem "COM7" .AddItem "COM8" End With With Worksheets("Sheet1").cbSpeed .AddItem "110" .AddItem "300" .AddItem "600" .AddItem "1200" .AddItem "2400" .AddItem "4800" .AddItem "9600" .AddItem "14400" .AddItem "19200" .AddItem "38400" .AddItem "57600" .AddItem "64000" .AddItem "115200" .AddItem "128000" .AddItem "256000" End With With Worksheets("Sheet1").cbDataFormat .AddItem "8,n,1" .AddItem "7,e,1" End With With Worksheets("Sheet1").cbHWFlowControl .AddItem "Disable" .AddItem "Enable" End With With Worksheets("Sheet1").cbSWFlowControl .AddItem "Disable" .AddItem "Enable" End With Worksheets("Sheet1").btnClose.Enabled = False Worksheets("Sheet1").btnOpen.Enabled = True
Step 4: Send an AT command to a connected Hayes compatible modem
In this step the code to send and recieve information from the modem will be written. Type the code below down to sheet1. Make sure the buttons, comboboxes and textarea's have the right names.
The following code shows how to query a modem:
Option Explicit 'set comport as object Public objComport As Object '****************************************************** ' sub open button '****************************************************** Private Sub btnOpen_Click() 'empty the textbox that displays the errors txtOutput.Text = "" 'Create the object Comport Set objComport = CreateObject("AxSerial.ComPort") 'Create logfile objComport.LogFile = txtOutputfile.Text 'Set the comport objComport.Device = cbComport.Text 'Set the baudrate If (cbSpeed.Text = "Default") Then objComport.BaudRate = 0 Else objComport.BaudRate = cbSpeed.Text End If 'set the flowcontrol If (cbHWFlowControl.Text = "Default") Then objComport.HardwareFlowControl = 0 ElseIf (cbHWFlowControl.Text = "Disabled") Then objComport.HardwareFlowControl = 1 Else objComport.HardwareFlowControl = 2 End If 'set the software flowcontrol If (cbSWFlowControl.Text = "Default") Then objComport.SoftwareFlowControl = 0 ElseIf (cbSWFlowControl.Text = "Disabled") Then objComport.SoftwareFlowControl = 1 Else objComport.SoftwareFlowControl = 2 End If 'Set the dataformat If (cbDataFormat.Text = "Default") Then objComport.DataBits = objComport.asDATABITS_DEFAULT objComport.StopBits = objComport.asSTOPBITS_DEFAULT objComport.Parity = objComport.asPARITY_DEFAULT End If If (cbDataFormat.Text = "8,n,1") Then objComport.DataBits = objComport.asDATABITS_8 objComport.StopBits = objComport.asSTOPBITS_1 objComport.Parity = objComport.asPARITY_NONE End If If (cbDataFormat.Text = "7,e,1") Then objComport.DataBits = objComport.asDATABITS_7 objComport.StopBits = objComport.asSTOPBITS_1 objComport.Parity = objComport.asPARITY_EVEN End If 'open the device objComport.Open 'check for errors GetResult End Sub '****************************************************** ' Sub Show results '****************************************************** Private Sub GetResult() Cells(1, 1) = objComport.LastError If objComport.LastError = 0 Then txtOutput = "SUCCESS" 'the connection with the device was succesfull, 'disable the open button and enable the close button btnOpen.Enabled = False btnClose.Enabled = True Else 'say out any error 'for more information about errors visit: 'https://www.activexperts.com/support/errorcodes/ txtOutput = "ERROR " & objComport.LastError & " ( " & _ objComport.GetErrorDescription(objComport.LastError) & " )" End If End Sub '******************************************************* ' Sub Close button '******************************************************* Private Sub btnClose_Click() objComport.Close 'Display the errors GetResult 'clear the reply field txtReply = "" 'enable the openbutton and disable the close button btnOpen.Enabled = True btnClose.Enabled = False End Sub '****************************************************** ' Sub execute your commands '****************************************************** Private Sub btnExecute_Click() 'before displaying the result of the commands given, clear the fields txtOutput.Text = "" txtReply = "" 'execute the given command objComport.WriteString (txtExecute) 'check for errors GetResult 'set time out, so the device wil have enough time to 'execute the command before displaying the result objComport.Sleep (1000) 'say out the results txtReply.Text = objComport.ReadString End Sub
You can download the full samples here.