Access 2007中的VBA6语法和OPOS打印机OCX驱动程序
我使用的是“OPOS”打印机和Access 2007,我试图让一些访问VBA代码与驱动程序交互。
到目前为止,我得到了这个VBA6程序,我试图啃入Access VBA:
Form1.frm:
VERSION 5.00
Object = "{CCB90150-B81E-11D2-AB74-0040054C3719}#1.0#0"; "OPOSPOSPrinter.ocx"
Begin VB.Form Step1
BorderStyle = 1 'fixed
Caption = "Step1: ""Hello OPOS"" is printed "
ClientHeight = 1590
ClientLeft = 45
ClientTop = 330
ClientWidth = 3795
LinkTopic = "MDIForm1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 1590
ScaleWidth = 3795
StartUpPosition = 3 'Windows default value
Begin VB.CommandButton cmdPrint
Caption = "Print Now"
Height = 450
Left = 1155
TabIndex = 0
Top = 525
Width = 1515
End
Begin OposPOSPrinter_CCOCtl.OPOSPOSPrinter OPOSPOSPrinter1
Left = 3120
OleObjectBlob = "Step1.frx":0000
Top = 960
End
End
Attribute VB_Name = "Step1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
' Step 1: "Hello OPOS" gets printed
Option Explicit
Private Sub cmdPrint_Click()
'send a string to the printer using method PrintNormal
'vbCrLf is VisualBasic standard newline
OPOSPOSPrinter1.PrintNormal PTR_S_RECEIPT, "Hello OPOS" + vbCrLf
End Sub
Private Sub Form_Load()
With OPOSPOSPrinter1
'open device
.Open "Unit1"
'Claim exclusive access
.ClaimDevice 1000
'enable the device
.DeviceEnabled = True
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
With OPOSPOSPrinter1
'stop device
.DeviceEnabled = False
'Release exclusive access
.ReleaseDevice
'Done with the printer
.Close
End With
End Sub
也
包含这个其他文件:OposAll.bas
...在VBA项目文件中可以看到:
Type=Exe
Form=Step1.frm
Module=OPOS; ........IncludeOposAll.bas
Object={CCB90150-B81E-11D2-AB74-0040054C3719}#1.0#0; OPOSPOSPrinter.ocx
IconForm="Step1"
Startup="Step1"
HelpFile=""
Title="SamplePrint1"
Command32=""
Name="SamplePrint1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="MECS"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
ThreadPerObject=0
MaxNumberOfThreads=1
[MS Transaction Server]
AutoRefresh=1
我很难想出如何将其转换为可用的Access VBA代码。
我的问题可能看起来很愚蠢,但请记住,我不知道VBA6和Access 2007 VBA。 但使用DLL版本相当容易,我认为这也是可行的。
1)愚蠢的问题:这段代码代表什么? 它初始化一些对象吗? Access似乎不喜欢OPOSPOSPrinter1
一部分,有没有另外一种方法在Access中完成这项工作?
Begin OposPOSPrinter_CCOCtl.OPOSPOSPrinter OPOSPOSPrinter1
Left = 3120
OleObjectBlob = "Step1.frx":0000
Top = 960
End
2)这也许是最重要的问题: 是否有更好的方式与Access 2007 VBA中的OCX驱动程序进行通信?
正如我在MS网站中发现的,在Access 2007中,您需要以某种模糊的方式召唤ActiveX注册对话框:
Open a trusted database, or enable macros in the database.
Press CTRL+G to open the Immediate window.
Type the following code, and then press ENTER.
DoCmd.RunCommand acCmdRegisterActiveXControls
接下来,我注册了我的奇特OCX控件,并将其列为OPOS POSPrinter Control 1.13.001 [Public, by CRM/RCS-Dayton]
。
之后,我从同样隐藏的插入ActiveX按钮中添加新注册的控件:
一旦控件添加到我的表单中,我继续添加用于加载和卸载驱动程序的代码:
Private Sub Form_Load()
With OPOSPOSPrinter1
'open device
.Open "Unit1"
'Claim exclusive access
.ClaimDevice 1000
'enable the device
.DeviceEnabled = True
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
With OPOSPOSPrinter1
'stop device
.DeviceEnabled = False
'Release exclusive access
.ReleaseDevice
'Done with the printer
.Close
End With
End Sub
正如你所看到的,与原始的VBA6格式相比,它完全没有改变。 哦,这句法: WITH <resource> (Body) END WITH
仅仅是VBA相当于C# using
或全新的try (<autoclosable>)
中的Java。 所以当你说WITH OPOSPOSPrinter1
你指向你刚添加的ActiveX控件。 检查Access为其选择的名称。
导入opos.bas
很简单,可能是因为Ribbon®在这个过程中根本没有涉及。 在代码编辑器中,右键单击项目树并单击“导入...”。 .bas
文件逐字输入为“模块”,转到图。 也许是因为它只是一堆变量定义。
打印命令也编译不变:
Private Sub Command1_Click()
OPOSPOSPrinter1.PrintNormal PTR_S_RECEIPT, "Hello OPOS" + vbCrLf
End Sub
我还没有测试过这种mon but,但我轻轻承诺,在收集设备反馈后,我会进行更新。
最后,回答我自己的愚蠢问题。 我的问题1)中的语法是VBA6声明新控件的方法。 访问似乎正在其他地方做。
链接地址: http://www.djcxy.com/p/54027.html