作者: littleboy 2023-10-27 10:22:13

VBA-简介

VBA 代表 Visual Basic for Aapplications,一种来自 Microsoft 的事件驱动编程语言

函数体

1
2
3
4
5
6
7
8
Sub
用于执行一系列操作,不返回值。语法为 Sub SubName(参数1, 参数2, ...) ...
End Sub

Function
用于执行操作并返回一个值。语法为 Function FunctionName(参数1, 参数2, ...) ...
FunctionName = 返回值
End Function

调用方式:

1
2
3
Sub 只能通过 SubName(参数1, 参数2, ...) 调用,

Function 可以通过 变量 = FunctionName(参数1, 参数2, ...) 调用。

这两者的选择取决于你是否需要返回值以及你希望如何组织代码

常见句式:

消息框

MsgBox 函数显示一个消息框并等待用户单击按钮,然后根据用户单击的按钮执行操作。

1
MsgBox(prompt[,buttons][,title][,helpfile,context])

输入框

InputBox 函数提示用户输入值。 输入值后,如果用户单击”确定”按钮或按键盘上的 ENTER 键,InputBox 函数将返回文本框中的文本。 如果用户单击”取消”按钮,该函数将返回一个空字符串 (“”)。

1
InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

异常处理

VBA-异常处理(类比C#的try-catch),

1
2
3

On Error GoTo exitLine
exitLine:“跳转内容”

判断语句

if

1
2
3
4
If swApp Is Nothing Then
MsgBox ("未打开SOLIDWORKS")
Else: MsgBox ("已打开SOLIDWORKS")
End If

程序例子

Word转pdf

新建文本文件txt,写入如下内容并保存成后缀为(.vbs格式)文件。当然你也可以直接点击zip下载链接直接下载vbs文件。

使用时,将word文件拖动到“.vbs文件”即可,等待转换程序完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'Convert .doc or .docx to .pdf files via Send To menu
Set fso = CreateObject("Scripting.FileSystemObject")
For i= 0 To WScript.Arguments.Count -1
docPath = WScript.Arguments(i)
docPath = fso.GetAbsolutePathName(docPath)
If LCase(Right(docPath, 4)) = ".doc" Or LCase(Right(docPath, 5)) = ".docx" Then
Set objWord = CreateObject("Word.Application")
pdfPath = fso.GetParentFolderName(docPath) & "\" & _
fso.GetBaseName(docpath) & ".pdf"
objWord.Visible = False
Set objDoc = objWord.documents.open(docPath)
objDoc.saveas pdfPath, 17
objDoc.Close
objWord.Quit
End If
Next

Word转pdf2

这个方法的原理就是,通过虚拟机将word打印成pdf格式,再用vba这个工具将这个过程批量化。VBA的代码,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub 批量打印WORD文档()
Dim fileToOpen, GetOpenFilename, App, iFile
fileToOpen = Application.GetOpenFilename(filefilter:="Word文档(*.do*),*.do*", FilterIndex:=4, Title:="请选择要处理的文档(可多选)", MultiSelect:=True)
If Not IsArray(fileToOpen) Then
MsgBox "你没有选择文件", vbOKOnly, "提示": Exit Sub
Else
Set App = CreateObject("Word.Application")
For Each iFile In fileToOpen
Set WrdDoc = App.Documents.Open(iFile)
App.Documents(WrdDoc).PrintOut
App.Documents(WrdDoc).Close False
T = T + 1
Next
End If
MsgBox "操作完成!!" & vbCrLf & "打印了 " & T & " 个文件。", vbOKOnly, "提示"
End Sub

参考

Excel_SW

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'定义全局变量
Dim swApp As Object
Dim swDoc As Object

'定义接口
Sub ConnectSW()
Set swApp = CreateObject("SldWorks.Application")
End Sub

'按钮事件
Private Sub CommandButton1_Click()

'调用接口
Call ConnectSW

'执行方法(新建零件的操作)
Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2018\templates\零件.prtdot", 0, swSheetWidth, swSheetHeight)

End Sub

微软VBA手册

教程资源(w3schools.cn)

宏程序异常:重新安装和修复了.net和VC组件

Code Converter C# to VB and VB to C# – Telerik