RS232 with VBA

Posted on 2003-11-04
Last Modified: 2008-08-27
Didn't know whether to put this in Languages or Database, so lets start here.

I am (attempting to !) write an application which communicates with a connected instrument via RS232. The problem I am having is that I cannot find any method of using VBA to control the RS232 ports. Can anyone help me with this?

I have done extensive searching on the web and can only find various methods using mscomm.ocx which does not come as part of Access.

I am sure there is a way but don't know what it is.

Please help.
Question by:wheatpark
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

Accepted Solution

L30 earned 125 total points
ID: 9680053
ummm, what is RS232? MS Access has a lot of features you can inlude in it. You have to look at the references. If you are looking at messing around with ports in MS Access I reccomend you look at Windows Sockets. There's a lot you can do there. The reference to the Windows sockets can be included on any MS Access forms. The name of the file is

mswinsck.ocx and usually found on C:\Windows\System32 or C:\Winnt\System32 for Pro editions

the winsock control will give you unlimited flexibility and power as far as ports go

If you need more info then provide more details
LVL 18

Assisted Solution

bonjour-aut earned 125 total points
ID: 9680312
have a look at :

if you evaluate your time, you will not be cheaper off, i think
at least you can try the sofware for free

regards, Franz
LVL 18

Assisted Solution

lludden earned 125 total points
ID: 9680408
Writing serial I/O routines is not for the faint of heart.  Check out for one of the best controls for doing serial I/O
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

LVL 54

Assisted Solution

nico5038 earned 125 total points
ID: 9680879
You'll have to use the OPEN statement to get a buffer linked to the device.
When it's connected to the COM1 port you can use e.g.:
    Open "COM1" For Output As #1
    Print #1, Chr$(7)
    Close #1
Like stated in:


Author Comment

ID: 9685202
Thanks so far.
The equipment connected to the serial port is really simple. Each control string sent is only 6 bytes long. The communication format is fixed at 9600 baud, 8 data bits, 1 stop bit and no parity.

The mentioned OCX's look interesting (but perhaps a little too involved for me). The website for the gleaf variant does not work correctly (I cannot click the 'Own It Now' button).

What I need to do is as follows:-

Open the com port (COM1) with the above comm setting.

Write the 6 bytes to the com port

Read back 5 bytes from the connected equipment (the acknowledgement)

Close the COM port.

This sounds so simple and yet I am struggling to do it.

Thanks all for your help so far but this is still not solved.

Author Comment

ID: 9686270
Ok, I have found in my C:\Winnt\System32 the MSCOMM32.OCX. This seems to be a big step towards solving the problem. My code is as follows:-

Private Sub btnPSUOff_Click()
    Dim SendChar(5) As Byte
    If Not SPComms.PortOpen Then   ' Open the comm port if not already open
      SPComms.PortOpen = True
    End If
    If Not SPComms.PortOpen Then
      MsgBox "cannot open comm port "
    End If
    SendChar(0) = 6
    SendChar(1) = 1
    SendChar(2) = 31
    SendChar(3) = 14
    SendChar(4) = 1
    SendChar(5) = 105
    SPComms.Output = SendChar()

    SPComms.PortOpen = False        'Close Port
End Sub

This is called from a button press on a form which includes the Microsoft Comm Control (from the ocx file above). My intention is to send six Hex bytes to the attached instrument: #06#01#1F#0E#01#69
This works perfectly well using advanced serial port monitor.

Note also, I have another button which does the following code (although I have set these values as defaults inside the control):-

Private Sub btnInitialise_Click()
    SPComms.CommPort = 1        'Set to use COM1
    SPComms.DTREnable = True    'Don't think this matters
    SPComms.Handshaking = 0     'No Handshaking
    '0="No Handshaking"
    '1="XOn/XOff handshaking"
    '2="Request-to-send/clear-to-send handshaking."
    '3="Request-to-send, XOn/XOff handshaking."
    SPComms.Settings = "9600,n,8,1"     '9600 Baud, No Parity, 8 Data bits, 1 Stop Bit
End Sub
LVL 54

Expert Comment

ID: 9687977
Sounds good, as always a lot of trail and error, but I see you did it well !
What's remaining ?


Author Comment

ID: 9688024
I'm sorry but in reading it again, my last post wasn't clear.

It should send the six bytes to COM1 to the attached instrument (which does work using 'Advance Serial Port Monitor' however, this does not give the desired result using my code above.

I am sure that once I crack this, everything else I need to do will be incredibly simple.

I appreciate your help.
LVL 54

Expert Comment

ID: 9688241
Did you try to send:
    dim strSendChar as string
    strSendChar= chr(6)&chr(1)&chr(31)&chr(14)&chr(1)&chr(105)
    SPComms.Output = strSendChar


Author Comment

ID: 9692614
Unfortunately I did. Reading a reference I found at

tells me "To send text data using the Output property, you must specify a Variant that contains a string. To send binary data, you must pass a Variant which contains a byte array to the Output property."

The above code was the closest I could get to it.

Author Comment

ID: 9692709
Note, have just found some excellent help here:

But this still does not solve the problem.
LVL 54

Expert Comment

ID: 9692781
Hmm, did you also look into:

In "the old days" only sending the characters to the output device was enough, but perhaps also a trailing vbCRLF is needed to generate a linefeed and show the device the data is complete...


Author Comment

ID: 9692844
Unfortunately sending vbCR or vbLF or vbCRLF has no effect.

Much information, all of little help.

I think my next check will be to connect the output of this PC to another running 'Advance Serial Port Monitor' so I can see exactly what is being put out. However, my lead is at home and I won't be able to do this until tomorrow.

I'll let you know what this tells me.

LVL 32

Expert Comment

ID: 10022351
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

Split: L30 {http:#9680053} & bonjour-aut {http:#9680312} & lludden {http:#9680408} & nico5038 {http:#9680879}

Please leave any comments here within the next seven days.

EE Cleanup Volunteer

Featured Post

Use Case: Protecting a Hybrid Cloud Infrastructure

Microsoft Azure is rapidly becoming the norm in dynamic IT environments. This document describes the challenges that organizations face when protecting data in a hybrid cloud IT environment and presents a use case to demonstrate how Acronis Backup protects all data.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Preparing an email is something we should all take special care with – especially when the email is for somebody you may not know very well. The pressures of everyday working life stacked with a hectic office environment can make this a real challen…
Microsoft Access is a place to store data within tables and represent this stored data using multiple database objects such as in form of macros, forms, reports, etc. After a MS Access database is created there is need to improve the performance and…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

624 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question