【VBA入门】WorkBook 对象 Name操作 宏录制筛选删除代码

news/2024/10/30 13:33:14/

VBA 入门

  • 问题记录
    • 1 了解Excel工作簿、表格关系
      • 1 默认新建WorkBook
      • 2 新建WorkBook并命名工作表添加数据
      • 3新建带有指定数量工作表的工作簿
    • ActiveWorkbook.Names用法
      • (1) 创建名称 (全局名称和局部名称)
  • 宏录制验证删除可行性
  • 大招!!!咨询ChatGPT
  • 参考

问题记录

宏录制的这两行代码注释后不影响总表筛选,所以想删除,但是又不确定是否会造成隐藏BUG,所以对ActiveWorkbook.Names.Add 展开系统学习。

    Selection.AutoFilterActiveWorkbook.Names.Add Name:="Sheet1!_FilterDatabase", RefersTo:="=Sheet1!$A$1:$AG$1", Visible:=False

Selection.AutoFilter
这行代码的作用是执行之后就会出现筛选的按钮,再次执行则取消筛选。
在这里插入图片描述
在这里插入图片描述
这个我虽然知道,但是还是用别人的宏录制展示给萌新看一下。

1 了解Excel工作簿、表格关系

简单来说:workbook包含sheets,而sheets又包含了特定的worksheet

在WorkBook、WorkSheet、Sheets三者间存在的关系是“大于”或“包含”的关系。
1、WorkBook指的是工作簿文件;
2、WorkSheet指的是工作表;
3、Sheets指的是工作表集合;
这样来看关系为:WorkBook>Sheets>WorkSheet

Workbook对象代表一个工作簿,Workbooks集合对象则代表同一Excel进程中打开的所有工作簿对象。

1 默认新建WorkBook

使用Add方法在Workbooks集合中创建新工作簿,所创建的工作簿为活动工作簿。其语法为:
Workbooks.Add(Template)
参数Template可选,决定如何创建新工作簿。如果将该参数设置为已存在的Excel模板文件名称,那么将以该文件作为模板创建工作簿。该参数可以为下列XlWBATemplate常量之一:

xlWBATChart(值-4109,代表图表)、xlWBATExcel4IntlMacroSheet(值4)、xlWBATExcel4MacroSheet(值3)、xlWBATWorksheet(值-4167,代表工作表)

在创建新工作簿时,如果指定该参数,那么将创建包含指定类型工作表的工作簿;如果省略该参数,那么将创建包含一定数量空工作表的工作簿,工作表数为SheetsInNewWorkbook属性所设置的数量。

'应用示例1:创建一个新工作簿
Sub CreateNewWorkbook1()MsgBox "将创建一个新工作簿."Workbooks.Add
End Sub

在这里插入图片描述
运行结束后生成的工作簿5、工作簿6如上图所示。注意: 生成的工作簿对象默认不会保存

2 新建WorkBook并命名工作表添加数据

Sub CreateNewWorkbook2()Dim wb As WorkbookDim ws As WorksheetDim i As LongMsgBox "将创建一个新工作簿,并预设工作表格式."Set wb = Workbooks.AddSet ws = wb.Sheets(1)'断点记录此行效果ws.Name = "产品汇总表" ws.Cells(1, 1) = "序号"ws.Cells(1, 2) = "产品名称"ws.Cells(1, 3) = "产品数量"For i = 2 To 10ws.Cells(i, 1) = i - 1Next i
End Sub

在这里插入图片描述
在这里插入图片描述
对应的工程文件视图中,有两个Sheet1,现在我手动改变Sheet1表格名字,测试wb.Sheets(1)表示所有Sheet表(Sheets)的第一表命名为“产品名称”

3新建带有指定数量工作表的工作簿

Sub testNewWorkbook()MsgBox "创建一个带有10个工作表的新工作簿"Dim wb As WorkbookSet wb = New_Workbook(10)
End SubFunction New_Workbook(wsCount As Integer) As Workbook'创建带有由变量wsCount提定数量工作表的工作簿,工作表数在1至255之间Dim OriginalWorksheetCount As LongSet NewWorkbook = NothingIf wsCount < 1 Or wsCount > 255 Then Exit FunctionOriginalWorksheetCount = Application.SheetsInNewWorkbook'默认初始工作簿中的工作表数Application.SheetsInNewWorkbook = wsCountSet New_Workbook = Workbooks.AddApplication.SheetsInNewWorkbook = OriginalWorksheetCount
End Function

自定义函数New_Workbook可以创建最多带有255个工作表的工作簿。本测试示例创建一个带有10个工作表的新工作簿。

测试 上面代码中Application.SheetsInNewWorkbook函数的用法

Sub test_new()Dim wb, wb2 As WorkbookApplication.SheetsInNewWorkbook = 1'设置初始工作簿中的工作表数Set wb = Application.Workbooks.Addwb.Worksheets(1).Name = "wb_表1" '给第一个工作表设置名称Application.SheetsInNewWorkbook = 3Set wb2 = Application.Workbooks.Addwb.Worksheets(1).Name = "wb2_表1"
End Sub

一个工作簿中有一个工作表,另一个工作簿有三个

ActiveWorkbook.Names用法

在VBA中对名称的基本操作

(1) 创建名称 (全局名称和局部名称)

① 可以使用下面的代码在当前工作簿中创建名称:

ActiveWorkbook.Names.Add Name:="MyName", RefersToR1C1:="=Sheet1!R2C2:R6C4"
'或者
ActiveWorkbook.Names.Add Name:="MyName", RefersTo:="=Sheet1!$B$2:$D$6"

上面的代码在当前工作簿中将工作表Sheet1内的区域B2:D6命名为MyName,该名称为全局名称。在所命名的名称中不能出现空格单元格引用 .

并且,如果对命名区域使用A1样式的引用,则最后使用绝对引用,否则所命名的区域将会不确定。

在所命名的名称前加上工作表名,则创建局部名称,如第一段代码。

也通过引用指定工作表来创建局部名称,如第二段代码。

上面的代码在工作表Sheet2中创建一个局部名称MyName2,代表Sheet2中的单元格区域A1:B3。

ActiveWorkbook.Names.Add Name:="Sheet1!MyName1", RefersTo:="=Sheet1!$B$2:$D$6"
'或者
Worksheets("sheet2").Names.Add Name:="MyName2", RefersTo:="=Sheet2!$A$1:$B$3"

上面的代码在工作表Sheet1中命名区域B2:D6为MyName1,该名称为局部名称。

② 一种简单的命名方法。例如:

Worksheets("Sheet1").Range("B8:C10").Name = "MyName3"

上面的代码将工作表Sheet1中的单元格区域B8:C10命名为MyName3,为全局名称

Worksheets("Sheet2").Range("H15:G16").Name = "Sheet2!MyName4"

上面的代码将工作表Sheet2中的单元格区域H15:G16命名为MyName4,为局部名称

至此能够了理解第二行代码是 对筛选的命名,只要后续代码没有用命名的局域名称进行操作,删除也无伤大雅。

宏录制验证删除可行性

开始宏录制筛选D列采购类型为F的数据
生成的代码如下

Sub Macro1()
'
' Macro1 Macro
' 宏由 Administrator 录制,时间: 2023/08/12Columns("D:D").SelectSelection.AutoFilterActiveWorkbook.Names.Add Name:="Sheet1!_FilterDatabase", RefersTo:="=Sheet1!$D:$D", Visible:=FalseRange("D1:D43012").AutoFilter Field:=1, Criteria1:=Array("F"), Operator:=xlFilterValuesActiveWorkbook.Names.Add Name:="Sheet1!_FilterDatabase", RefersTo:="=Sheet1!$D$1:$D$43012", Visible:=False
End Sub

下面开始删除这两行操作进行Debug,观察是否能够成功筛选。

先取消筛选状态,然后注释这两行代码。观察运行结果。

在这里插入图片描述运行后可以看到采购类型能成功被筛选,所以删除这两行代码可行。

大招!!!咨询ChatGPT

在这里插入图片描述

参考

1 Excel VBA系列之通过筛选拆分数据至多张工作表:

2 Workbook 对象 应用示例

3Excel) (Worksheet.Names 属性(微软官网)
3Excel) (理解工作表中的名称


http://www.ppmy.cn/news/1026960.html

相关文章

2023年录屏软件哪个好用,Camtasia Studio2023安装激活教程最新激活密钥

2023年录屏软件哪个好用&#xff0c;电脑Windows10系统自带录屏不是挺香吗&#xff0c;干嘛还需要安装录屏软件&#xff01;系统自带的录屏功能有一定局限限&#xff0c;想要录制其他文件、软件内容根本不好用&#xff1b;与其费时费力研究系统自带&#xff0c;不如选择好用的录…

tensorflow学习笔记

tensorflow学习笔记 1. 安装2. 验证GPU是否可用3. 静态图说明 tensorflow学习过程中记录的笔记 1. 安装 cuda的安装过程略&#xff0c;参考pytorch的那篇笔记。 一个稳定版本的tensorflow2.5版本匹配&#xff1a; conda create -n hi_hand_det python3.7.0 conda install c…

OpenStack对接Ceph平台

OpenStack对接Ceph平台 目录 OpenStack对接Ceph平台 1、创建后端需要的存储池(ceph-01节点操作)2、创建后端用户 2.1 创建密钥(ceph-01节点操作) 2.1.1 创建用户client.cinder2.1.2 创建用户client.glance2.1.3 创建用户client.cinder-backup2.2 导出密钥(ceph-01节点操作)2.3 …

阿里云服务器部署RabbitMQ流程

阿里云百科分享使用阿里云服务器部署RabbitMQ流程&#xff0c;RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理软件&#xff0c;用于在分布式系统中存储转发消息&#xff0c;有良好的易用性、扩展性和高可用性。本文介绍如何通过ECS实例部署Rabbi…

tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速

tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速 说明 Tensorflow-GPU 已被移除。请安装 tensorflow 。 tensorflow 通过 Nvidia CUDA 支持 GPU 加速操作。 自 2019 年 9月发布 的 TensorFlow2.1 以来&#xff0c;tensorFlow 和 tensorflow-GPU 一直是同…

在CentOS安装Docker

此文章为笔记&#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总&#xff0c;非原创&#xff0c;感谢每个知识分享者。 文章目录 一、安装DOCKER1、前提条件2、查看系统内核3、查看已安装的CentOS版本信息 二、CentOS7安装docker1、安装需要的软件包2、设置docker下载…

Android JNI开发从0到1,java调C,C调Java,保姆级教程详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 第一步首先配置Android studio的NDK开发环境&#xff0c;首先在Android studio中下载NDK…

安卓:LitePal操作数据库

目录 一、LitePal介绍 常用方法&#xff1a; 1、插入数据&#xff1a; 2、更新数据&#xff1a; 3、删除数据&#xff1a; 4、查询数据&#xff1a; 二、LitePal的基本用法&#xff1a; 1、集成LitePal&#xff1a; 2、创建LitePal配置文件&#xff1a; 3、创建模型类…