VBA是什么

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。

VBA的实践

说来好玩,SGS公司需要建立一个数据库,但是他们的认证报告都是统一格式的Word,需要将Word中的有效字段抓取出来形成Excel。Word报告是海量的,几万份,估计是这十年SGS杭州分公司所有的认证报告吧。我听着这个项目很有意思,也想把自己所学的知识转化为生产力,所以就去了解了一下VBA。
在Word中 视图-》宏选项,就可开始编程。

操作目标

word中的内容如下

要把黄色部分变成一个excl中的表格。

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Private Sub Document_Close()
Dim oApp As Object
Dim oappwork, 公司简介
Set oApp = CreateObject("Excel.Application")
Set oappwork = oApp.Workbooks.Add
Set 公司简介 = oappwork.Sheets(1)
Dim arr
arr = Split(ActiveDocument.Path, "\")
MsgBox "当前文件夹名为:" & arr(UBound(arr))
'MsgBox "当前文件夹名为:" & arr
行 = 1
公司简介.Cells(1, 1) = "Report Number"
公司简介.Cells(2, 1) = "Audit Date"
公司简介.Cells(3, 1) = "Company Name"
公司简介.Cells(4, 1) = "Showroom"
公司简介.Cells(5, 1) = "Address"
公司简介.Cells(6, 1) = "Product"
For i = 1 To 20
If InStr(ActiveDocument.Paragraphs(i).Range.Text, "Report Number") > 0 Then
公司简介.Cells(1, 2) = Replace(ActiveDocument.Paragraphs(i).Range.Text, "Report Number: ", "")
End If
Next
Set oTable = ActiveDocument.Tables(1)
Dim tmp As Integer
tmp = 1
For Each aCell In oTable.Rows(1).Cells
tmp = tmp + 1
Set myRange = ActiveDocument.Range(Start:=aCell.Range.Start, End:=aCell.Range.End - 1)
'MsgBox myRange.Text
If tmp >= 3 Then
公司简介.Cells(2, 2) = myRange.Text
End If
Next aCell
Set oTable = ActiveDocument.Tables(2)
Dim txt As String
txt = oTable.Cell(Row:=1, Column:=3).Range.Text
公司简介.Cells(3, 2) = VBA.Replace(txt, "", "")
txt = oTable.Cell(Row:=2, Column:=3).Range.Text
公司简介.Cells(4, 2) = VBA.Replace(txt, "", "")
txt = oTable.Cell(Row:=3, Column:=3).Range.Text
公司简介.Cells(5, 2) = VBA.Replace(txt, "", "")
txt = oTable.Cell(Row:=4, Column:=3).Range.Text
公司简介.Cells(6, 2) = VBA.Replace(txt, "", "")
oApp.Visible = False
oappwork.SaveAs "D:\Example.xlsx"
oApp.Quit
Set oApp = Nothing
End Sub
Private Sub Document_Open()
Dim a
a = InputBox("输入密码")
If a = "123456" Then
Else
MsgBox ("密码错误")
Application.Quit 0
End If
End Sub