如何在Access2007上添加mscomm控件?

首次提问所以采纳率0。想要在Access2007的窗体上上添加mscomm控件用于跟Arduino板的串行通信。已经在SysWOW64,System32中用 regsvr32 <路径>/mscomm.ocx注册过了,在VB6.0中也成功添加mscomm控件并实现了与arduino板的通信。但是在Access 2007的 窗体设计工具-插入ActiveX控件 功能中没有找到mscomm控件(Microsoft Communication Control也没找到),请各位不吝赐教。
另:根本目的是实现Access VBA与arduino板的串行通信,如果有其他办法能实现也行,目前找到的教程都是让用mscomm控件

下图是我在64位access 2016 vba下调用vb6的activex exe,已提示无效端口号,说明调用mscomm成功,你可以参考下

img

我已经用AccessVBA做了一个自己用的ERP程序(业余人员),现在想要外挂一个控制公司里的柜子的锁开关的功能,初步期望是电脑端Access通信arduino板通信595芯片接继电器控制锁,现在用VB6 mscomm控件已经实现了,现在需要在AccessVBA中实现

我猜你应该对vb6是比较熟悉的,但是access中的不是vb,是vba,跟vb是两回事,看起来像vb,但其实是脚本型语言,而且只能依附具体应用程序如access来存在,它能添加的控件受微软限制,并没有像你想象那样可以随便加。
我这里提供一个方法,那就是通过对象引用,vba是可以随意添加对象引用的。而这个对象其实就是dll文件,分两步:
第一步:在vb6中创建activeX dll工程,然后创建窗体,窗体中添加mscomm控件,窗体代码提供public sub或public function调用mscomm实例,然后在class类中添加需要公开的接口函数,执行的时候,先创建窗口,然后调用窗口public方法或函数。最后编译为dll文件备用。
第二步:进到access的vba中,点菜单栏的工具菜单下的引用,弹出引用对话框,接下来浏览到你的dll,完成添加引用。然后在你vba窗体中new 你这个引用的dll中的class对象,调用其方法,实现你的功能。

注意:如果需要用到事件,在你的class中需要加withevents关键字。如果想不用事件实现通知,可以维护状态变量,在调用端轮循,循环语句中加doevents。
现在精通vb6的人不多,有需要我尽量为你解难,大家共同学习。

如果这个回答对你有帮助,请采纳,谢谢。

在vb6中创建activeX dll工程SendArduion,创建窗体Form1,添加控件mscomm1,窗体代码如下

Public Sub SendON(StrSend As String)
'初始化串口
MSComm1.CommPort = 3
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If

'将输入的字符串视为十六进制数
Dim OutBuffer() As Byte
Dim tem As Variant
Dim e As Integer
Dim q As Integer
Dim LenOfText As Integer
LenOfText = Len(StrSend) / 2 - 1
ReDim OutBuffer(LenOfText)
q = 0
For e = 1 To Len(StrSend) Step 2
tem = Mid(StrSend, e, 2)
OutBuffer(q) = Val("&H" & tem)
Debug.Print Val("&H" & tem)
q = q + 1
Next


'将数值输出到串口
MSComm1.Output = OutBuffer
End Sub

新建类模块Send,代码如下

Public Sub SendArduino(StrSend As String)
Set Form123 = Form1
Form123.SendON (StrSend)
End Sub

生成SendArduino.dll,注册成功
access窗体 包含文本框input和按钮command1,引用SendArduino.dll窗体代码如下

Private Sub Command1_Click()
Dim Str As String
Str = Me.input
Dim Sendit As SendArduion.Send
Set Sendit = New SendArduion.Send
Sendit.SendArduino (Str)

End Sub

运行报警activex部件不能创建对象 429

img

大概这样
你再试试看

感谢砻谷踏碓,问题成功解决。绝大部分操作跟楼上一样,改了两个地方 1.VB不是创建ActiveX dll而是ActiveX EXE,之后也不用注册直接引用就行;2.在Form1窗体代码最后加上MSComm1.PortOpen = False (另:me.show doevents me.hide doevents不加似乎也能正常运行)