JSA宏教程WPS表格常用内置对象——单元格区域(Range)对象(一)
一、关于单元格区域Range对象
Range对象之所以叫单元格区域对象,因为它既可以是某一个单元格、还可以是选定区域(该区域包含一个或多个连续单元格区域),或者某一三维区域(三维区域:多个工作表的相同单元格区域,比如:从Sheet1的A1单元格到Sheet4的A1单元格)。
如何设置一个三维区域,请看下面操作。
这个对象是用户接触的最多的对象,用户在工作表中所做的每个操作都可能与单元格区域对象相关。因此要学好JSA宏,这个对象的基础一定要打牢。
本章节计划分四节进行:Range对象的属性和方法各用两节课进行讲解和演练。
二、属性
以下Range对象的属性内容来自于WPS开发文档,小编仅做分类处理。
小编将属性按以下规则进行分类:
对象(Application、Parent、Worksheet、Range)、外观、内容、包含这几个方面。
名称 | 说明 |
Application | 如果不使用对象识别符,则该属性返回一个代表 ET 应用程序的 Application 对象。如果使用对象识别符,则该属性返回一个代表指定对象的创建程序的 Application 对象(可对一个 OLE 自动化对象使用该属性来返回该对象的应用程序)。只读。 |
Parent | 返回指定对象的父对象。只读。 |
Worksheet | 返回一个 Worksheet 对象,该对象表示包含指定区域的工作表。只读。 |
Rows | 返回一个 Range 对象,它代表指定单元格区域中的行。Range 对象,只读。 |
Columns | 返回一个 Range 对象,该对象代表指定区域中的列。 |
Cells | 返回一个 Range 对象,该对象代表指定区域中的单元格。 |
EntireColumn | 返回一个 Range 对象,该对象表示包含指定区域的整列(或多列)。只读。 |
EntireRow | 返回一个 Range 对象,该对象表示包含指定区域的整行(或多行)。只读。 |
End | 返回一个 Range 对象,该对象代表包含源区域的区域尾端的单元格。等同于按键 End+ 向上键(xlUp)、End+ 向下键(xlDown)、End+ 向左键(xlToLeft)或 End+ 向右键(xlToRight)。Range 对象,只读。 |
MergeArea | 返回一个 Range 对象,该对象代表包含指定单元格的合并区域。如果指定的单元格不在合并区域内,则该属性返回指定的单元格。只读。Variant 类型。 |
Areas | 返回一个 Areas 集合,该集合表示多重区域选择中的所有区域。只读。 |
Previous | 返回一个代表“上”一个单元格的 Range 对象。通常是设定单元格区域左上角单元格的左邻一个单元格 |
ColumnWidth | 返回或设置指定区域中所有列的列宽。Variant 类型,可读写。 |
RowHeight | 以磅为单位返回或设置指定区域中所有行的行高。如果指定区域中的各行的行高不等,则返回 null。Variant 类型,可读写。 |
Left | 返回一个 Variant 值,它代表从列 A 的左边缘到区域的左边缘的距离(以磅为单位)。 |
Top | 返回或设置一个 Variant 值,它代表行 1 上边缘到区域上边缘的距离(以磅为单位)。 |
Width | 返回一个 Variant 值,它代表区域的宽度(以磅单位表示)。 |
Height | 返回或设置一个 Variant 值,该值代表区域的高度(以磅为单位)。 |
Hidden | 返回或设置一个 Variant 值,它指明是否隐藏行或列。 |
AddIndent | 返回或设置一个 Variant 值,它指明当单元格中文本的对齐方式为水平或垂直等距分布时,文本是否为自动缩进。 |
HorizontalAlignment | 返回或设置一个 Variant 值,它代表指定对象的水平对齐方式。 |
VerticalAlignment | 返回或设置一个 Variant 值,它代表指定对象的垂直对齐方式。 |
NumberFormat | 返回或设置一个 Variant 值,它代表对象的格式代码。 |
Font | 返回一个 Font 对象,它代表指定对象的字体。 |
Formula | 返回或设置一个 Variant 值,它代表 A1 样式表示法和宏语言中的对象的公式(不支持数组溢出的公式)。 |
Formula2 | 返回或设置一个 Variant 值,它代表 A1 样式表示法和宏语言中的对象的公式(支持数组溢出的公式)。 |
Text | 返回或设置指定对象中的文本。String 型,只读。 |
Value2 | 返回或设置单元格值。Variant 类型,可读写。 |
Name | 返回或设置一个 Variant 值,它代表对象的名称。 |
ID | 返回或设置一个 String 值,它代表将页面另存为网页时指定单元格的识别标志。 |
Row | 返回区域中第一个子区域的第一行的行号。Long 类型,只读。 |
Column | 返回指定区域中第一块中的第一列的列号。Long 类型,只读。 |
Count | 返回一个 Long 值,它代表集合中对象的数量。 |
MergeCells | 如果区域包含合并单元格,则为 True。Variant 型,可读写。 |
三、练习
1、对象(Application、Parent、Worksheet、Range)属性的练习。
- 通过Parent属性,获取其父对象的名称。
- 通过Worksheet属性,获取Worksheet的标签名称
function getObjectName(){
let parentName = Application.Range("A1").Parent.Name;
let sheetName = Application.Range("A1").Worksheet.Name;
//在此,小编为了避免使用ActiveSheet对象,刻意使用了Application对象。
alert("父对象名称:"+parentName+"/"+"所在工作表名称:"+sheetName);
/*经过测试,顺序得到了Range("A1")的父对象和其所在工作表名称,由此可见:
1、Et会自动根据对象的层级从顶层至底层逐级自动获取。但其获取的原则是哪个表激活了,就从哪个表取
2、Range的Parent对象和Range的Worksheet对象是一样的,获取到的都是工作表对象。这也不难理解,因为
单元格和单元格区域都是属于工作表的。
*/
}
- 通过Rows、Columns属性,获取相对应Range的引用范围(即Address)
- 通过Cells属性,获取所有Cell的Address
- 通过EntireColumn、EntireRow属性,获取相应引用范围(Address)
function getRegionAddress(){
//region变量,用来存放设定的A2:E20这个单元格区域
let region = ActiveSheet.Range("A2:E20");
//Rows、Columns属性
let addressRows = region.Rows.Address();//Rows属性,返回的单元格区域中的行
let addressColumns = region.Columns.Address();//Columns属性,返回的单元格区域中的列
//但是我们看到程序运行的结果,这两个的地址是一样的。也就是它们所获取的区域还是一样大小,
//不同的是,Rows是以行为集合,columns是以列为集合。
//通过Cells属性,获取所有Cell的Address
let cellAddress = [];//定义一个数组,用来存放每一个单元格的地址
for(let cell of region)//集合遍历的循环语句
{
cellAddress.push(cell.Address());
}
//通过EntireColumn、EntireRow属性,获取相应引用范围(Address)
let addressEntireRow = region.EntireRow.Address();//整行
let addressEntireColumn = region.EntireColumn.Address();//整列
//整行属性,是获取选定单元格区域的所有行
//整列属性,是获取选定单元格区域的所有列
alert(`设定的单元格区域是:${region.Address()}<br><br>
addressRows:${addressRows},addressColumns:${addressColumns}<br><br>
addressEntireRow:${addressEntireRow},addressEntireColumn:${addressEntireColumn}<br><br>
Range的每个单元格地址:${cellAddress}`);
}
- 通过End属性,了解End属性的4个参数。
End属性是一个需要参数的属性,与其它属性不同,它的属性共可取四个值,分别对应的是键盘上的上(xlUp)下(xlDown)左(xlToLeft)右(xlToRight)按键。下面我们来看看这个属性的不同之处
function getReionEndAddress(){
//设定一个单元格区域
let region = ActiveSheet.Range("A2:E20");
//为了确定End属性的左右上下这几个类型是定的,特意让宏选定C11单元格
region.Range("C11").Select();
//将通过End属性获取到的四个单元格的地址存放在endAddress数组中。
let endAddress = [];
endAddress = [
region.End(xlToLeft).Address(),//左
region.End(xlToRight).Address(),//右
region.End(xlUp).Address(),//上
region.End(xlDown).Address()//下
];
alert(`
设定的单元格${region.Address()}区域:<br>
最左单元格是:${endAddress[0]}<br>
最右单元格是:${endAddress[1]}<br>
最上单元格是:${endAddress[2]}<br>
最下单元格是:${endAddress[3]}<br>
`)
}
由此可见End的属性:
1、最左单元格始终是设定单元格区域的左上角的单元格;
2、最右单元格则是相当于在选定左上单元格后,按下了CTRL + 向右键;
3、最上单元格则是相当于在选定左上单元格后,按下了CTRL + 向上键;
4、最下单元格则是相当于在选定左上单元格后,按下了CTRL + 向下键;
- 练习MergeArea属性
// 练习MergeArea属性
// 合并C9:D11单元格
function getMergeAreaAddress()
{
let region = ActiveSheet.Range("C9:D11");
alert(`设定单元格区域:${region.Address()}中合并单元格区域是:${Range('C9').MergeArea.Address()}`);
}
MergeArea属性,只能用在合并的单元格中。并且是以合并单元格的最左上单元格的地址作为单元格区域的选定单元格。因为这个属性只能应用于单个单元格。选多了就无法正确获取相关内容。
- 通过Areas属性,遍历每一个Area的引用范围(Address)
// 通过Areas属性,遍历每一个Area的引用范围(Address)
function getAreasAddress(){
//定义多个单元格区域。
let regions = ActiveSheet.Range("A1:C10,C9:D11,E2:H11,A13:E17");
let areaAddress = [];//定义一个数组分别用来存放上述区域的地址。
for(let ar of regions.Areas)
{
areaAddress.push(ar.Address());
}
alert(`${areaAddress}`);
}
这里要注意Range的多个单元格区域的写法:"A1:C10,C9:D11,E2:H11,A13:E17"。
- 练习Previous属性。
// 练习Previous属性。
function getPreviousAddress(){
let region = ActiveSheet.Range("C9:D11");
alert(`
设定单元格区域:${region.Address()}的
Previous单元格区域是:${region.Previous.Address()}`);
}
由此可见某单元格区域的Previous单元区域就是其左上角单元格的左邻单元格。在上图的示例中,C9:D11的左上角单元格是C9,而C9的Previous属性的单元格是B9。
以上就是关于Range对象以及Rnage的对象(Application、Parent、Worksheet、Range)属性相关内容。
以上代码复制后即可运行。
小编的演示文档会保存起来,免费提供给大家学习,如有需要关注后私信说明要哪一章节的演示文档。
请注意:演示文档与小编的教程同步即是小编的教程到哪一步,演示文档就到哪一章节。