news 2026/8/7 8:05:57

四、Worksheet对象

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
四、Worksheet对象

在VBA中,SheetsWorksheets都是用来引用工作表的集合,但它们的范围不同

你可以这样理解:WorksheetsSheets的子集

1、工作表的引用(访问)

前面讲 Range 对象时,VBA代码里面的 "Sheet1" ,就是引用 Worksheet 对象。但它不是通过工作表名去访问的,而是工程对象,如下图红框。右边括号里的 "Sheet1" 就是工作表名了。

除了工程对象,还可以通过 Worksheets 和 Sheets 索引(索引号、工作表名)。WorkSheets 集合包含所有的工作表,而 Sheets 集合不仅包含工作表集合 WorkSheets,还包含图表集合 Charts、宏表集合 Excel4MacroSheets 与 MS Excel 5.0 对话框集合 DialogSheets 等。

Sub WorksheetDemo() Dim ws As Worksheet Set ws = Sheet1 '工程对象 Set ws = Worksheets("Sheet1") 'Worksheets(工作表名) Set ws = Sheets("Sheet1") 'Sheets(工作表名) Set ws = Worksheets(1) 'Worksheets(索引号) Set ws = Sheets(1) 'Sheets(索引号) Set ws = ActiveSheet '活动的工作表 End Sub

在确定工作簿里只有普通的工作表 Worksheet,可以放心使用 Sheets,担心出错就用 Worksheets。推荐用工作表名所有来指向工作表:①工程对象虽然可以明确指向,但在操作过程中,可能需要删除/新建工作表,这次是 "Sheet20",可能下次是 "Sheet18";②索引号不是谁先新建谁在前,它是根据工作表顺序。如下图,Worksheets(2) 访问的工作表是 "Sheet1",因为 "Sheet1" 在这个工作簿的第2位;

活动的工作表是最不推荐的,可读性差。如果你想要通过录制宏达到自动化目的,建议把出现的 ActiveSheet 改成 Worksheets(工作表名) 。

2、选择 / 激活工作簿

不重要的方法,但偶尔可以结合工作表事件的 Activate 保护工作表不被查看,或者在输出工作簿时,激活指定的工作表方便查看。

有2种写法,Worksheet.Active 和 Worksheet.Select,后者如果工作表隐藏了,会报错,所以保守起见,要先判断是否被隐藏。

Sub SelectWorksheet() Sheets("Sheet2").Activate ActiveSheet.Range("A1").Formula = "=B1" '此时 ActiveSheet 指向 Sheet2 If Sheets("Sheet1").Visible = True Then '确认 Sheet1 没有隐藏 Sheets("Sheet1").Select ActiveSheet.Range("A1").Formula = "=B1" '此时 ActiveSheet 指向 Sheet1 End If End Sub

3、遍历工作表

一个工作簿文件如果包含多个工作表,在不确定是否有想要的工作表时,可以通过遍历所有工作表查找符合条件的工作表名并返回。

Worksheet.Name返回工作表名。

Worksheets.Count返回工作表个数。

遍历工作表有2种方法,①遍历所有的工作簿对象Worksheets,返回单个工作表对象Worksheet;②通过索引号,逐个指向工作表对象Worksheet

Sub SearchWorksheet() '#### 案例:找到工作表名为 "raw" 和 包含 "规则" 的工作表 Dim myWs1 As Worksheet, myWs2 As Worksheet '---------------------- 遍历方法1 ---------------------- For Each ws In Worksheets '直接遍历对象所有的工作表,返回单个工作表对象 If ws.Name = "raw" Then 'Worksheet.Name 访问工作表名 Set myWs1 = ws ElseIf ws.Name Like "*规则*" Then Set myWs2 = ws End If Next ws '------------------------------------------------------- '---------------------- 遍历方法2 ---------------------- For idx = 1 To Worksheets.Count If Worksheets(idx).Name = "raw" Then '通过索引号 访问工作表 Set myWs1 = Worksheets(idx) ElseIf InStr(Worksheets(idx).Name, "规则") > 0 Then Set myWs2 = Worksheets(idx) End If Next idx '------------------------------------------------------- '#### 以上2种方法 2选1 '判断是否找到了指定工作表:raw If myWs1 Is Nothing Then flag1 = "没找到工作表raw" Else row1 = myWs1.UsedRange.Rows.Count col1 = myWs1.UsedRange.Columns.Count flag1 = "找到工作表raw,数据有 " & row1 & "行 x " & col1 & "列" End If '判断是否找到了指定工作表:规则 If myWs2 Is Nothing Then flag2 = "没找到命名包含""规则""的工作表" Else row2 = myWs2.UsedRange.Rows.Count col2 = myWs2.UsedRange.Columns.Count wsName = myWs2.Name flag2 = "找到命名包含""规则""的工作表,完整命名为""" & wsName & """,数据有 " & row2 & "行 x " & col2 & "列" End If MsgBox flag1 & vbCrLf & flag2 End Sub

vbCrlf 是字符串的换行符。运行结果示例图如下:

4、新建 / 删除工作表

1)新建工作表

语法:Worksheets.Add(Before, After, Count, Type),所有参数可选。

Before:指定工作表的对象,新建的工作表将置于此工作表之前。

After:指定工作表的对象,新建的工作表将置于此工作表之后。

Count:要新建的工作表数。 默认值为 1。

Type:新建的工作表类型。默认值为 xlWorksheet。其他还有 xlChart, xlExcel4MacroSheet, xlExcel4IntlMacroSheet。

Sub AddWorksheet() Worksheets.Add '不填参数,默认在最前面新建1个工作表 Worksheets.Add Before:=Worksheets("raw") '在<raw>工作表之前新建1个工作表 Worksheets.Add After:=Worksheets("测试规则"), Count:=2 '在<测试规则>工作表之前新建2个工作表 '在最末尾新建1个工作表并且命名 Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ws.Name = "最后面的一个工作表" End Sub

2)删除工作表

语法:Worksheet.Delete。正常删除工作表时,会弹窗提示用户确认,在VBA处理过程中,可以用 Application.DisplayAlerts 开启 / 关闭警报窗口,这样,程序运行过程中,用户就不用守着点击确认删除。

Sub DelWorksheet() Application.DisplayAlerts = False '关闭消息窗口 Worksheets("最后面的一个工作表").Delete '删除工作表 Application.DisplayAlerts = True '在末尾处 开启消息窗口 End Sub

5、取消工作表的筛选

本来写前面完4点想开始Workbook的,突然想起还有这个常用的属性AutoFilterMode,又回来补上了。

写VBA不一定是给自己用,有时候取数时,表格做了筛选,这时候可能会有些数据拿不到,所以,每次取数前,对工作表取消筛选,真的很重要。代码也很简单,只要一行。

Sub CancelFilter() Worksheets("raw").AutoFilterMode = False End Sub

其他方法如 保护、移动等等不做讲解,使用场景很少。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 8:04:08

精密整流电路:原理、设计与实战调试指南

1. 从“削峰填谷”到“精准导向”&#xff1a;为什么我们需要精密整流在电子电路的世界里&#xff0c;整流是一个基础得不能再基础的操作&#xff0c;它的任务是把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。我们最熟悉的莫过于电源适配器里那个由…

作者头像 李华
网站建设 2026/8/7 7:58:31

TVA-VLA架构:具身智能规模化落地关键支撑(6)

前沿技术探索&#xff1a;TVA智能体&#xff08;简称TVA&#xff09;TVA智能体&#xff08;亦称“TVA视觉智能体”或“AI智能体视觉”&#xff09;是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它深度融合深度强化学习&#xff08;DRL&#xff09;、卷积…

作者头像 李华
网站建设 2026/8/7 7:55:13

Ubuntu APT国内镜像源更换指南:原理、选型与实战

1. 为什么更换APT源是Ubuntu新机配置的“第一课” 如果你刚装好Ubuntu&#xff0c;或者接手了一台新的Ubuntu服务器&#xff0c;第一件事不是急着装软件&#xff0c;而是先换掉默认的软件源。这几乎是所有老手都会做的标准操作&#xff0c;但很多新手会忽略&#xff0c;或者知其…

作者头像 李华
网站建设 2026/8/7 7:48:06

软件测试实战指南:从核心理论到自动化测试的完整能力构建

1. 项目概述&#xff1a;一份来自一线的“期末”实战指南又到了期末季&#xff0c;无论是高校软件测试课程的结业考核&#xff0c;还是培训机构学员的阶段性验收&#xff0c;一份高质量的测试题集&#xff0c;其价值远不止于“应付考试”。我手头整理的这五套试题&#xff0c;总…

作者头像 李华
网站建设 2026/8/7 7:47:57

rocr-runtime 相关专题:内存序与 host-device 一致性

本文是 23-Signal 信号系统 的配套专题。信号的本质是同步&#xff0c;而同步的底层是「可见性 顺序」。这块牵涉编译器重排、CPU 内存模型、HSA 内存作用域、fine-grain/coarse-grain 一致性、PTE MTYPE 等一连串概念&#xff0c;单列一篇讲透&#xff0c;避免主线章节被淹没…

作者头像 李华