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
| 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