1

「OPOS」プリンターと Access 2007 を使用しており、ドライバーと対話する VBA コードにアクセスしようとしています。

これまでのところ、Access VBA を噛み砕こうとしているこの VBA6 プログラムを入手しました。

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; ..\..\..\..\Include\OposAll.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)ばかげた質問: このコードは何を表しているのですか? オブジェクトを初期化していますか?アクセスはそのOPOSPOSPrinter1部分を気に入らないようですが、アクセスでこれを行う別の方法はありますか?

   Begin OposPOSPrinter_CCOCtl.OPOSPOSPrinter OPOSPOSPrinter1
      Left            =   3120
      OleObjectBlob   =   "Step1.frx":0000
      Top             =   960
   End

2)これはおそらく最も重要な質問です。Access 2007 VBA から OCX ドライバーと通信するより適切な方法はありますか?

4

1 に答える 1

1

MS の Web サイトで見つけたように、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 の挿入] ボタンから新しく登録されたコントロールを追加しました。

私見 MS の従業員は、OS のバックドアを使用して、Ribbon® で何かを見つけようとする絶望的なユーザーを笑っています。

コントロールがフォームに追加されたら、ドライバーをロードおよびアンロードするためのコードを追加しました。

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は、C# に相当する VBAまたはJavausingのまったく新しいものです。try (<autoclosable>)つまり、WITH OPOSPOSPrinter1追加したばかりの activex コントロールを指しているということです。Access が選択した名前を確認します。

のインポートopos.basは簡単でした。おそらく、Ribbon® がプロセスにまったく関与していなかったためです。コード エディターでプロジェクト ツリーを右クリックし、[インポート...] をクリックします。.basファイルはそのまま「モジュール」としてインポートされます。変数定義の集まりにすぎないからかもしれません。

print コマンドも変更せずにコンパイルします。

Private Sub Command1_Click()
    OPOSPOSPrinter1.PrintNormal PTR_S_RECEIPT, "Hello OPOS" + vbCrLf
End Sub

私はまだ怪物性をテストしていませんが、デバイスからのフィードバックを集めた後に更新することを軽く約束します.

最後に、私自身のばかげた質問に答えます。私の質問の構文1)は、新しいコントロールを宣言する VBA6 の方法です。アクセスは別の場所でやっているようです。

于 2013-06-19T13:21:16.013 に答える