常用

加水印

  • Module(模块,代码文件)

    • Sub AddFullPageWatermark ← 主功能:添加水印

      • 调用 RemoveAllWatermarks ← 添加前先清旧水印

      • 创建 + 复制水印…

    • Sub RemoveAllWatermarks ← 辅助功能:删除水印

      • 遍历所有形状,删掉叫”FullPageWM”的
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
Option Explicit

' ============================================
' 功能:Word 满屏斜向文字水印(覆盖图片版,自动铺满全文档)
' ============================================

Sub AddFullPageWatermark()
Dim doc As Document
Dim baseShp As Shape
Dim dupShp As Shape

' ═══════════════════════════════════════════
' 【可调整的参数】
' ═══════════════════════════════════════════
' ①【水印文字设置】← 改这里调整水印外观
Const WM_TEXT As String = "仅用于毕业证学位证领取 他用无效" ' ← 水印文字内容
Const WM_FONT As String = "楷体" ' ← 字体名称
Const WM_FONT_SIZE As Single = 16 ' ← 字号(磅),越大字越大
Const WM_COLOR As Long = 12632256 ' ← 颜色,12632256=灰色,可用 RGB(192,192,192)
Const WM_TRANSPARENCY As Single = 0.4 ' ← 透明度 0~1,越大越透明(0=不透明,1=完全透明)
Const WM_ROTATION As Single = -45 ' ← 旋转角度(负数=逆时针),-45=斜向,0=水平,-90=垂直

' ②【间距设置】← 改这里调整水印密度和位置
Const H_SPACING As Single = 220 ' ← 水平间距(磅),越小横向越密,越大越疏
Const V_SPACING As Single = 80 ' ← 垂直间距(磅),越小纵向越密,越大越疏
Const START_LEFT As Single = -50 ' ← 页面左边起始位置(磅),越大整体越靠右
Const START_TOP As Single = -500 ' ← 页面上边起始位置(磅),越大整体越靠下

' ③【页面尺寸】← 一般不用改,A4纸默认595×842
Const PAGE_WIDTH As Single = 595 ' ← 页面宽度(磅),A4=595,Letter=612
Const PAGE_HEIGHT As Single = 842 ' ← 页面高度(磅),A4=842,Letter=792

Dim i As Integer, j As Integer
Dim leftPos As Single, topPos As Single
Dim totalCols As Integer, totalRows As Integer

Set doc = ActiveDocument
Application.ScreenUpdating = False

' 先清除旧水印
Call RemoveAllWatermarks

' 计算需要多少列/行才能铺满一页(向上取整)
totalCols = Int((PAGE_WIDTH - START_LEFT) / H_SPACING) + 2
totalRows = Int((PAGE_HEIGHT - START_TOP) / V_SPACING) + 2

' 获取锚点
Dim anchorRange As Range
Set anchorRange = doc.Sections(1).Range.Paragraphs(1).Range

' 创建第一个水印
Set baseShp = doc.Shapes.AddTextEffect( _
PresetTextEffect:=msoTextEffect1, _
Text:=WM_TEXT, _
FontName:=WM_FONT, _
FontSize:=WM_FONT_SIZE, _
FontBold:=msoFalse, _
FontItalic:=msoFalse, _
Left:=START_LEFT, _
Top:=START_TOP, _
Anchor:=anchorRange)

With baseShp
.Name = "FullPageWM"
.Rotation = WM_ROTATION
.LockAspectRatio = msoTrue

With .Fill
.Visible = msoTrue
.Solid
.ForeColor.RGB = WM_COLOR
.Transparency = WM_TRANSPARENCY
End With

.Line.Visible = msoFalse
.WrapFormat.Type = wdWrapFront
.WrapFormat.AllowOverlap = True
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.RelativeVerticalPosition = wdRelativeVerticalPositionPage
.LockAnchor = True
End With

' 按计算出的行列铺满
For i = 0 To totalRows - 1
For j = 0 To totalCols - 1
If i = 0 And j = 0 Then GoTo NextPos

leftPos = START_LEFT + j * H_SPACING
topPos = START_TOP + i * V_SPACING

Set dupShp = baseShp.Duplicate

With dupShp
.Left = leftPos
.Top = topPos
.Name = "FullPageWM"
.WrapFormat.Type = wdWrapFront
End With

NextPos:
Next j
Next i

Application.ScreenUpdating = True
MsgBox "满屏水印添加完成!铺满 " & totalCols & " 列 × " & totalRows & " 行", vbInformation
End Sub


' ============================================
' 删除所有水印
' ============================================
Sub RemoveAllWatermarks()
Dim doc As Document
Dim shp As Shape
Dim i As Integer

Set doc = ActiveDocument
Application.ScreenUpdating = False

For i = doc.Shapes.Count To 1 Step -1
Set shp = doc.Shapes(i)
If shp.Name = "FullPageWM" Then
shp.Delete
End If
Next i

Application.ScreenUpdating = True
MsgBox "水印已清除!", vbInformation
End Sub

基础知识

VBA、VB、VBScript 区别与联系

三者都基于BASIC 语法,同宗同源,但定位、运行环境、用途完全不同,一句话概括:

  1. VB(Visual Basic 6.0):老牌桌面编译型程序开发语言,做 Windows 桌面软件;
  2. VBA(Visual Basic for Applications)Office 内嵌脚本语言,依附 Office 软件运行;
  3. VBScript(VBS):Windows 系统自带轻量解释脚本,系统运维、网页前端旧脚本。

一、详细对比

  1. VB6(Visual Basic 6)
  • 核心特点

    • 编译型语言:写完代码编译成 .exe 可执行文件,独立 Windows 运行,不需要依附其他软件。

    • 完整 IDE 开发环境,有窗体拖拽设计(按钮、文本框、窗口),主打Windows 桌面客户端软件开发

    • 基于 COM 组件,可以调用 Windows API、数据库、ActiveX 控件。

  • 现状

    • 微软早已停止维护 VB6,属于过时技术,现在桌面开发主流 C#、VB.NET(.NET 体系,和 VB6 不是一回事)。
  • 后缀:工程.vbp,程序编译后.exe

  1. VBA(Visual Basic for Applications)
  • 核心特点

    • 嵌入式解释语言不能独立运行,必须寄生在 Office(Word/Excel/PPT/Access)、AutoCAD、WPS 等软件内部。

    • 内置在 Office 里,打开「开发工具 - VBA 编辑器」即可写代码,专门用来自动化办公:批量表格处理、报表、批量 Word 文档、自动 PPT、Access 数据库。

    • 语法几乎和 VB6 一模一样,大部分 VB6 语法可以直接搬到 VBA 用,但缺少独立窗体编译能力,只能依托宿主软件。

  • 日常用途

    • Excel 批量计算、批量生成文件、一键整理数据、报表自动化,职场最常用。
  • 后缀:Office 宏文件 .xlsm/.docm/.pptm(带宏的文档),模块文件.bas

  1. VBScript(简称 VBS)
  • 核心特点

    • Windows 系统自带的轻量脚本语言,纯文本编写,后缀.vbs,双击就能由 Windows 脚本宿主 (wscript/cscript) 直接解释运行,无需安装编译器

    • 精简版 VB,砍掉了窗体界面、类库、部分高级语法,主打系统运维、简单自动化

    • 曾经用于 IE 浏览器前端脚本(现已彻底淘汰)、ASP 动态网页(老式网站)。

  • 运行两种模式

    • wscript.exe:弹窗图形界面

    • cscript.exe:黑窗口控制台运行

  • 常见用途

    • 读写本地文件、操作注册表、批量重命名文件、简单 Windows 自动化、小型运维脚本。

二、核心异同点

相同点

  1. 语法规则高度一致:变量定义、循环 (for/if/do)、数组、函数写法基本通用;
  2. 底层依托 Windows COM 组件,都能调用系统对象(文件、Shell、注册表);
  3. 大小写不敏感。

关键区别

维度 VB6 VBA VBScript
运行载体 独立 EXE 程序 Office/WPS/AutoCAD 等宿主软件 Windows 系统本身
编译方式 编译成 exe,二进制程序 纯脚本解释,随宿主运行 纯文本即时解释
可视化界面 支持拖拽窗体、窗口程序 只能做弹窗,无独立主窗口 默认无窗体,仅简易弹窗 msgbox
变量声明 支持强类型 Dim a As Integer 完整支持强类型 默认变体类型 Variant,不支持直接指定类型
能否独立运行 ✅ 完全独立 ❌ 必须依附 Office ✅ Windows 自带可直接跑
典型文件后缀 .vbp 工程、.exe 程序 .xlsm (Excel 宏)、.bas 模块 .vbs 脚本文件

三、语法小示例,直观感受

  1. VB6 / VBA 写法(可指定变量类型)
1
2
3
4
5
Sub Test()
Dim i As Integer
i = 10
MsgBox i
End Sub
  1. VBScript(不能写 As 类型,只有 Variant 变体)
1
2
3
Dim i
i = 10
MsgBox i

四、容易混淆的误区

  1. VB.NET ≠ VB6

    VB.NET是.NET 框架的现代语言,属于新一代,和老旧 VB6 没有继承关系,不要混为一谈。

  2. VBA 不能脱离 Office 单独做成 exe,想要把 VBA 逻辑做成独立程序,要用 VB6 或VB.NET重写。

  3. VBS不能在 Mac、Linux 运行,仅限 Windows;VBA 随 Office 跨 Windows/Mac;VB6 基本只在 Windows。

  4. 安全性:VBS 脚本容易被病毒利用,现在 Windows 默认限制;Office 的 VBA 宏默认禁用,需要手动开启。

五、怎么选

  1. 职场办公、Excel 自动化 → 学 VBA(性价比最高)
  2. 简单 Windows 批量运维、本地小脚本 → 学 VBScript
  3. 老旧 Windows 桌面软件开发(怀旧 / 老系统维护)→ 了解 VB6,新项目不推荐使用。