1.工作簿的引用方法
在不同的工作簿之间转换需要指定引用的工作簿,通常有下面几种方法:
使用工作簿名称
使用工作簿的索引号
使用ThisWorkbook
使用ActiveWorkbook
使用工作簿名称
要注意工作簿必须已经打开
dim wb As Workbook
Set wb=Workbooks("工作簿.xlsx")
使用工作簿的索引号
这种方法适用于需要遍历所有打开的工作簿时
Sub 通过索引号使用工作簿()
Dim i As Integer
Dim totalWorkbooks As Integer
'获取打开的工作簿总数
totalWorkbooks = Workbooks.count
'遍历所有打开的工作簿
For i = 1 To totalWorkbooks.count
'激活每一个工作簿
Workbooks(i).Activate
'输出当前工作簿名称
MsgBox "当前工作簿:" & ActiveWorkbook.Name
'其他对当前工作簿的操作
Next i
End Sub
使用ThisWorkbook
ThisWorkbook时钟只想包含当前正在运行的VBA代码的工作簿(代表当前宏代码所在的工作簿)
Sub 使用ThisWorkbook()
' 直接使用ThisWorkbook
ThisWorkbook.Activate
' 在ThisWorkbook中进行操作
ThisWorkbook.Sheets("Sheet1").Range("A1").Value = "这是当前运行代码的工作簿"
' 输出信息
MsgBox "当前工作簿名称: " & ThisWorkbook.Name
End Sub
使用ActiveWorkbook
ActiveWorkbook指向当前激活的工作簿,它可能会随着用户的操作而改变
Sub 使用ActiveWorkbook()
' 声明变量
Dim currentName As String
' 获取当前激活的工作簿名称
currentName = ActiveWorkbook.Name
' 在ActiveWorkbook中进行操作
ActiveWorkbook.Sheets("Sheet1").Range("A1").Value = "这是当前激活的工作簿"
' 输出信息
MsgBox "当前激活的工作簿: " & currentName
End Sub
2.新建工作簿文件
使用Add方法新建工作簿
Sub 新建工作簿()
' 声明一个工作簿变量
Dim newWorkbook As Workbook
' 使用Add方法创建新的工作簿,并将其赋值给newWorkbook变量
Set newWorkbook = Workbooks.Add
' 给新工作簿命名(可选)
newWorkbook.SaveAs Filename:="C:\Users\YourName\Desktop\新工作簿.xlsx"
' 激活新创建的工作簿
newWorkbook.Activate
' 在新工作簿的第一个工作表的A1单元格写入文本
newWorkbook.Sheets(1).Range("A1").Value = "这是一个新的工作簿!"
' 显示消息框,通知用户新工作簿已创建
MsgBox "新的工作簿已创建并保存在桌面上!", vbInformation, "操作成功"
End Sub
3.打开指定的工作簿
可以通过Open方法打开一个工作簿
Sub 打开指定工作簿()
' 声明变量
Dim wb As Workbook
Dim filePath As String
' 指定要打开的文件路径
filePath = "C:\Users\YourName\Desktop\要打开的文件.xlsx"
' 使用Open方法打开工作簿
Set wb = Workbooks.Open(Filename:=filePath)
' 激活刚刚打开的工作簿
wb.Activate
' 在A1单元格写入文本
wb.Sheets(1).Range("A1").Value = "这个工作簿已经被VBA打开了!"
' 显示消息框
MsgBox "工作簿 '" & wb.Name & "' 已成功打开!", vbInformation, "操作成功"
End Sub
Open方法的所有参数
完整语法:
Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
参数解释:
FileName
类型:String
描述:要打开的文件的完整路径和文件名。
示例:”C:\Users\YourName\Desktop\example.xlsx”
UpdateLinks
类型:Variant
描述:指定是否更新文件中的链接。
可选值:0 = 不更新, 1 = 更新外部链接, 2 = 更新远程链接, 3 = 更新全部链接
示例:UpdateLinks:=0
ReadOnly
类型:Variant
描述:是否以只读模式打开文件。
可选值:True 或 False
示例:ReadOnly:=True
Format
如果Excel正在打开一个文本文件,则该参数用于指定分隔符,如果省略本参数,则是用当前的分隔符
类型:Variant
描述:指定文件格式(主要用于非Excel文件)。
示例:Format:=6 (6 表示 CSV 格式)
Password
类型:String
描述:打开受密码保护的工作簿时使用的密码。
示例:Password:=”MyPassword123″
WriteResPassword
类型:String
描述:用于写保护的密码。
示例:WriteResPassword:=”WritePassword123″
IgnoreReadOnlyRecommended
类型:Variant
描述:是否忽略”建议以只读方式打开”的提示。
可选值:True 或 False
示例:IgnoreReadOnlyRecommended:=True
Origin
类型:Variant
描述:指定文本文件的来源。
示例:Origin:=xlMSDOS
Delimiter
类型:Variant
描述:指定文本文件的分隔符。
示例:Delimiter:=”,”
Editable
类型:Variant
描述:指定是否可以编辑查询表。
可选值:True 或 False
示例:Editable:=True
Notify
类型:Variant
描述:如果为True,在文件被其他用户修改时通知用户。
可选值:True 或 False
示例:Notify:=True
Converter
类型:Variant
描述:指定要使用的文件转换器的索引。
示例:Converter:=1
AddToMru
类型:Variant
描述:是否将文件添加到最近使用的文件列表中。
可选值:True 或 False
示例:AddToMru:=True
Local
类型:Variant
描述:对于HTML文件,指定是否将文件保存在本地文件系统中。
可选值:True 或 False
示例:Local:=True
CorruptLoad
类型:Variant
描述:指定如何打开损坏的工作簿。
可选值:xlNormalLoad, xlRepairFile, xlExtractData
示例:CorruptLoad:=xlRepairFile
4.判断指定工作簿是否已打开
推荐使用遍历的方法,遍历所有已打开的工作簿,检查是否有匹配的文件名
Function 工作簿是否打开(文件路径 As String) As Boolean
Dim wb As Workbook
Dim 文件名 As String
文件名 = Dir(文件路径) ' 获取文件名
For Each wb In Workbooks
If wb.Name = 文件名 Then
工作簿是否打开 = True
Exit Function
End If
Next wb
工作簿是否打开 = False
End Function
Sub 测试工作簿是否打开()
Dim 文件路径 As String
文件路径 = "C:\Users\YourName\Desktop\测试文件.xlsx"
If 工作簿是否打开(文件路径) Then
MsgBox "工作簿已经打开!", vbInformation, "提示"
Else
MsgBox "工作簿未打开。", vbInformation, "提示"
End If
End Sub
5.保存工作簿的方法
使用Workbook对象的Save方法保存工作簿的更改,如果是新创建的尚未保存的工作簿,它会调出“另存为”对话框。
ThisWorkbook.Save
直接保存为另一文件名
如果需要将工作簿另存为一个文件名,可以使用Workbook对象的SaveAs方法:
Sub 另存为新文件()
Dim 新文件路径 As String
新文件路径 = "C:\Users\YourName\Desktop\新工作簿.xlsx"
ThisWorkbook.SaveAs Filename:=新文件路径, FileFormat:=xlOpenXMLWorkbook
MsgBox "工作簿已另存为: " & 新文件路径, vbInformation, "另存为成功"
End Sub
6.保存指定工作表为工作簿文件
如果要将工作簿中的工作表单独保存为一个工作簿文件,可以使用Worksheet对象的copy方法,将指定的工作表复制到一个新建的工作簿
Sub 保存指定工作表为新工作簿()
Dim 源工作簿 As Workbook
Dim 新工作簿 As Workbook
Dim 源工作表 As Worksheet
Dim 新文件路径 As String
' 设置源工作簿和工作表
Set 源工作簿 = ThisWorkbook
Set 源工作表 = 源工作簿.Worksheets("Sheet1") ' 替换为您想要保存的工作表名称
' 创建新工作簿
Set 新工作簿 = Workbooks.Add
' 复制工作表到新工作簿
源工作表.Copy Before:=新工作簿.Sheets(1)
' 删除新工作簿中的默认工作表
Application.DisplayAlerts = False ' 禁用删除工作表的警告
新工作簿.Sheets(新工作簿.Sheets.Count).Delete
Application.DisplayAlerts = True ' 重新启用警告
' 设置新文件路径并保存
新文件路径 = "C:\Users\YourName\Desktop\新工作簿.xlsx"
新工作簿.SaveAs 新文件路径
' 关闭新工作簿(可选)
新工作簿.Close
MsgBox "工作表已保存为新工作簿:" & 新文件路径, vbInformation, "保存成功"
End Sub
7.设置工作簿文档属性信息
使用DocumentProperties集合对象的builtinDocumentProperties属性可以设置文档的属性信息
Sub 设置内置文档属性()
With ThisWorkbook
' 设置标题
.BuiltinDocumentProperties("Title").Value = "年度财务报告"
' 设置主题
.BuiltinDocumentProperties("Subject").Value = "2023财年概览"
' 设置作者
.BuiltinDocumentProperties("Author").Value = "张三"
' 设置公司
.BuiltinDocumentProperties("Company").Value = "ABC有限公司"
' 设置备注
.BuiltinDocumentProperties("Comments").Value = "本报告包含敏感信息,请勿外传"
' 设置关键词
.BuiltinDocumentProperties("Keywords").Value = "财务, 年报, 2023"
End With
MsgBox "文档属性已更新", vbInformation, "设置成功"
End Sub
8.返回窗口的可视区域地址
VBA中使用VisibleRange属性返回当前窗口的可视区域(Excel窗口中当前可见的单元格范围)
Public 上次可视区域 As String
Sub 开始监控可视区域()
' 存储初始可视区域
上次可视区域 = ActiveWindow.VisibleRange.Address
' 设置定时器,每秒检查一次
Application.OnTime Now + TimeValue("00:00:01"), "检查可视区域变化"
End Sub
Sub 检查可视区域变化()
Dim 当前可视区域 As String
当前可视区域 = ActiveWindow.VisibleRange.Address
If 当前可视区域 <> 上次可视区域 Then
MsgBox "可视区域已更改!" & vbNewLine & _
"从: " & 上次可视区域 & vbNewLine & _
"到: " & 当前可视区域, vbInformation
上次可视区域 = 当前可视区域
End If
' 继续监控
Application.OnTime Now + TimeValue("00:00:01"), "检查可视区域变化"
End Sub
Sub 停止监控可视区域()
On Error Resume Next
Application.OnTime Now + TimeValue("00:00:01"), "检查可视区域变化", , False
On Error GoTo 0
End Sub
1 thought on “3.Workbook对象——《VBA常用技巧代码解析》”