需求

本文基于 Microsoft Office 专业增强版 2016

当需要制作一个 Excel 模板供他人使用,利用宏编写一些模板操作会让模板的功能更加丰富。

开发工具

打开 Excel,文件 > 选项 > 自定义功能区,勾选右侧的“开发工具”。

file

勾选保存后在标题栏就会多出开发工具栏。

file

转换为 xlsm 格式

由于 Excel 默认的 xlsx 格式支持编辑宏,却不支持保存宏,酷似相机的“无卡拍摄”模式,为防止辛勤劳作编辑的宏代码丢失,先将文件转换为 xlsm 格式。

点击文件 > 另存为,选择位置,保存类型选择 Excel 启用宏的工作簿(*.xlsm),并保存。

file

创建按钮

回到启用了宏的工作簿,在“开发工具”栏中点击“插入”,选择左上角的“按钮”控件,待光标变为十字后在表格中绘制出一个按钮。

file

绘制完按钮后,会弹出一个“指定宏”窗口,顺势点击“新建”,就会在 vba 编辑器中创建并为按钮绑定一个宏。

file

file

右键按钮,点击“编辑文字”,可以编辑按钮中显示的文字。出现边框上的圆点后,可拖动改变按钮的大小和位置。

file

创建模板 Sheet

尽量先创建模板 Sheet,再创建操作页面 Sheet,且尽量不删除后再创建,以确保模板的 ID 较小和 ID 的连续性。如果不小心删除了某个 Sheet 又做了创建操作,不妨重新建一个工作簿。

新建一个 Sheet 并重命名,将该 Sheet 编辑为包含各种格式但并未填入数据的模板 Sheet,可以做各种个性化设置,如工作表颜色、插入图片、行高、列宽、字体等,因为后面复制后这些信息都会保留。

而且当前编辑的单元格位置也会保留,如果在意不妨在编辑后点击一下起始单元格。

file

隐藏模板 Sheet

右键 Sheet 标题,点击“隐藏”或“取消隐藏”可以将模板隐藏。

file

编辑宏

右键按钮,点击指定宏 > 编辑,并在最上面编写下面这段代码,其含义为判断指定名称的 Sheet 是否存在。

Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet
    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function

file

在按钮的 sub 中,编写如下代码:

    ' 指定模板工作表
    Const sourceSheet As String = "Payment"
    ' 指定目标工作表
    Const targetSheet As String = "Payment Sheet1"
    ' 判断目标工作表是否存在
    If Not WorksheetExists(targetSheet) Then
        ' 不存在则复制一份模板工作表到最后
        Sheets(sourceSheet).Visible = True
        Sheets(sourceSheet).Copy After:=Sheets(Sheets.Count)
        Sheets(sourceSheet).Visible = False
        On Error Resume Next
        ' 重命名最后一个工作表到目标名称
        Sheets(Sheets.Count).Name = targetSheet
        On Error GoTo 0
    End If

file

效果

点击按钮前,只有一个隐藏了的模板表和一个操作页面表。

file

点击按钮后,复制了一份与模板一模一样的表格。

file

拓展

这样单次复制只是最基础的操作,可根据 Office Visual Basic for Applications (VBA) 参考 | Microsoft Learn,修改,例如按单元格内容复制多个表格。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注