|
现实需求:
使用Excel表格的VBA编程,既可以通过手动点击按钮等动作,触发运行VBA代码功能;
也需要通过命令行控制,自动执行VBA代码,实现一键执行或供其它程序调用。
(比如仓库管理工作中,可能在月底做汇总、结转、对账等,可以写好代码一键执行)
解决思路:
1. 手动执行VBA功能,只需要在Excel中增加绑定宏的按钮即可,由操作者点击相应的按钮。
2. 通过命令执行,是为了一键执行或供其他工具调用,解决思路为:调bat文件,bat文件通过打开Excel执行VBA功能。
步骤如下:
1.写一个bat批处理命令文件,用于打开Excel表格,同时设置标识参数,用于标识是bat打开的:
2.制作一个Excel工作薄文件,在VBA中增加workbook的open事件,此事件会在文件打开时触发:
3.编写VBA代码检查是否为cmd命令打开表格,根据不同的打开方式执行相应功能,代码如下:
- ' 32 位系统为
- ' Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long
- ' Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long)
- ' Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
- ' 64 位系统为
- Private Declare PtrSafe Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As LongPtr
- Private Declare PtrSafe Function lstrlenW Lib "kernel32" (ByVal lpString As LongPtr) As LongPtr
- Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As LongPtr)
-
- Private Sub Workbook_Open()
- Dim CmdMsg As String
- CmdMsg = "/batOpen" '命令行传递来的参数标识,与bat文件中的参数一致
-
- Dim CmdRaw As LongPtr
- CmdRaw = GetCommandLine()
- Dim CmdLine As String
- CmdLine = CmdToSTr(CmdRaw)
- On Error Resume Next '这句是必须的,防止非bat打开,下面代码会报错
- Dim paraPos As Integer
- paraPos = WorksheetFunction.Search(CmdMsg, CmdLine, 1) '检查打开方式
- If paraPos > 0 Then
- MsgBox "bat"
- Else
- MsgBox "man"
- End If
- End Sub
-
- '被调用的子函数 , 用来将命令行参数转换成字符串类型
- Function CmdToSTr(Cmd As LongPtr) As String
- Dim Buffer() As Byte
- Dim StrLen As LongPtr
- If Cmd Then
- StrLen = lstrlenW(Cmd) * 2
- If StrLen Then
- ReDim Buffer(0 To CInt(StrLen - 1)) As Byte
- CopyMemory Buffer(0), ByVal Cmd, StrLen
- CmdToSTr = Buffer
- End If
- End If
- End Function
复制代码
执行效果:
分别使用bat命令打开Excel表格,以及手动打开Excel表格,执行的效果如下:
1.手工打开表格弹窗
2.命令打开表格弹窗
最终文件:
实现使用bat命令,一键打开Excel表格,自动调用VBA代码功能,代码并不复杂,只是做为基本的演示。
附件是制作好的bat调用命令文件,以及Excel测试表格,可以在此基础上,扩展执行任意自动化操作。 |
-
-
测试表格.xlsm
14.33 KB, 下载次数: 129, 下载积分: 贡献 -2
测试表格.xlsm
-
-
调用命令.bat
172 Bytes, 下载次数: 54, 下载积分: 贡献 -2
调用命令.bat
|