How do I permanently set the port to 9100 when printing from Excel VBA to the “ZPL Printer” Zebra label printer Chrome plug-in emulator
我昨天安装了ZPL打印机模拟器Chrome插件,并且可以从NotePad向它发送作业。鉴于下面的VBA代码似乎正在向模拟器发送数据,并给出了在窗口底部短暂弹出的消息,提示已接收到数据。但是,从消息中可以清楚地看到端口号是动态的。第一次通过时,消息显示为"从客户端127.0.0.1端口52616接收到686字节"。其他运行将端口列出为52635、52649,以此类推(它们的确在增加)。由于此仿真器正在侦听端口9100,因此没有任何作业在屏幕上打印...空白。
如何修改以下代码为所有作业设置端口9100?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Sub FourByTwo() Dim MyPrinter, NumLabels As Integer MyPrinter ="\\\\127.0.0.1\\ZebraSim" NumLabels = 1 Open MyPrinter For Output As #1 Print #1,"^PQ" & NumLabels Print #1,"^LT0" Print #1,"^MD3" Print #1,"^POI" Print #1,"^CI34^FO0,730^A0,20,18,E:ARIALNB.FNT^FH^FDSample 1^FS" Print #1,"^CI34^FO0,670^A0,20,18,E:ARIALNB.FNT^FH^FDSample 2^FS" Print #1,"^CI34^FO0,610^A0,20,18,E:ARIALNB.FNT^FH^FDSample 3^FS" Print #1,"^CI34^FO0,550^A0,20,18,E:ARIALNB.FNT^FH^FDSample 4^FS" Print #1,"^CI34^FO0,490^A0,20,18,E:ARIALNB.FNT^FH^FDSample 5^FS" Print #1,"^CI34^FO0,430^A0,20,18,E:ARIALNB.FNT^FH^FDSample 6^FS" Print #1,"^CI34^FO0,370^A0,20,18,E:ARIALNB.FNT^FH^FDSample 7^FS" Print #1,"^CI34^FO0,310^A0,20,18,E:ARIALNB.FNT^FH^FDSample 8^FS" Print #1,"^CI34^FO0,250^A0,20,18,E:ARIALNB.FNT^FH^FDSample 9^FS" Print #1,"^CI34^FO0,190^A0,20,18,E:ARIALNB.FNT^FH^FDSample 10^FS" Print #1,"^CI34^FO0,130^A0,20,18,E:ARIALNB.FNT^FH^FDSample 11^FS" Print #1,"^CI34^FO0,70^A0,20,18,E:ARIALNB.FNT^FH^FDSample 12^FS" Close #1 End Sub |
请注意,当我尝试使用GetPrinterPort2函数确定端口时,该函数返回空字符串...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Public Function GetPrinterPort2(strPrinterName As String) As String Dim objReg As Object, strRegVal As String, strValue As String Const HKEY_CURRENT_USER = &H80000001 Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\ oot\\default:StdRegProv") strRegVal ="Software\\Microsoft\\Windows NT\\CurrentVersion\\PrinterPorts" objReg.GetStringValue HKEY_CURRENT_USER, strRegVal, strPrinterName, strValue GetPrinterPort2 = Mid$(strValue, 10, 5) End Function Sub FourByTwo() Dim MyPrinter As String, NumLabels As Integer, ZebraSimPort MyPrinter ="\\\\127.0.0.1\\ZebraSim" ZebraSimPort = GetPrinterPort2(MyPrinter) '... End Sub |
使用GetPrinterPort2函数将ActivePrinter设置为 请注意,由于我最后将返回打印到真正的Zebra打印机,所以我不想修改ZPLII代码发送到打印机的方式,只是为了使此模拟器正常工作。换句话说,我想坚持使用"打开#1 /打印#1 /关闭#1"技术将命令发送到打印机。基本上,我只希望能够轻松地在模拟器和真实打印机之间切换。 使用
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Dim objReg As Object, strRegVal As String, strValue As String
Const HKEY_CURRENT_USER = &H80000001
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\
oot\\default:StdRegProv")
strRegVal ="Software\\Microsoft\\Windows NT\\CurrentVersion\\PrinterPorts"
objReg.GetStringValue HKEY_CURRENT_USER, strRegVal, strPrinterName, strValue
GetPrinterPort2 = Replace(Mid$(strValue, 10, 5),",","")
End Function
Sub FourByTwo()
Dim strPrinter As String, actPrinter As String, numLabels As Integer
numLabels = 1
With Application
actPrinter = .ActivePrinter
strPrinter ="ZebraSim"
.ActivePrinter = strPrinter &" on" & GetPrinterPort2(strPrinter)
Open .ActivePrinter For Output As #1
Print #1,"^PQ" & numLabels
Print #1,"^LT0"
Print #1,"^MD3"
Print #1,"^POI"
Print #1,"^CI34^FO0,730^A0,20,18,E:ARIALNB.FNT^FH^FDSample 1^FS"
Close #1
.ActivePrinter = actPrinter
End With
End Sub
2
3
4
5
6
7
8
9
10
11
12
Dim MyPrinter As String, NumLabels As Integer
MyPrinter ="\\\\127.0.0.1\\ZebraSim:9100"
NumLabels = 1
Open MyPrinter For Output As #1
Print #1,"^PQ" & NumLabels
Print #1,"^LT0"
Print #1,"^MD3"
Print #1,"^POI"
Print #1,"^FO100,100^A0,25,25^FDSample 1^FS"
Close #1
End Sub
在测试此项目时,我还发现在ZPL打印机界面的"设置"对话框中选中"
还要注意,我简化了打印"示例1"的行,认为字符映射和字体规范可能会影响事物。原始代码(带有字体规范)在NotePad上运行良好,但我认为我应该将其排除在外。
我将ZPLII代码移回了记事本中,以验证我仍然可以从该应用程序中进行打印...我无法。这是因为XA和XZ命令始终缺失。在此过程中的某个地方,我对整个端口问题感到分心,却忘记在代码中包含这些关键行。
因此现在下面的代码将打印到下一个可用端口,这并不是我真正想做的(我想每次强制将其打印到9100),但是它可以满足我的需要。<铅>
此外,如果我发现如果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Sub FourByTwo() Dim MyPrinter As String, NumLabels As Integer MyPrinter ="\\\\127.0.0.1\\ZebraSim:9100" NumLabels = 1 Open MyPrinter For Output As #1 Print #1,"^XA" Print #1,"^PQ" & NumLabels Print #1,"^LT0" Print #1,"^MD3" Print #1,"^POI" Print #1,"^FO100,100^A0,25,25^FDSample 1^FS" Print #1,"^XZ" Close #1 End Sub |