您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页ExcelVBA:RangeObject

ExcelVBA:RangeObject

来源:叨叨游戏网


Microsoft Excel VBA : Range object

Range Object

一Range object表示一或多个 cells,这可以是在一个worksheet上的单个Cell,单个row, 单个Column, 一或多个Areas, 或者在多个worksheets上的同一些cells(3-D range)。 Area: 术语area(或Block)常指由若干行若干列交叉出的那些Cells,它们组成一个矩形区。 Region: 常指这样的Area,它被四周的(一或多个)空行或空列或边界包围着。

Worksheet object和Range object有许多属性都能返回一个Range object,这些属性包括: Range, Cells, Columns, Rows, Selection 等

( Application object 也有这些属性,可那不过是ActiveSheet的这些属性的简写。)

自注:其实Range作为method来理解更好些,因为在Range字后必须提供参数,如Range(“B6”), 该“方法”返回一个由参数指定的Range object。

(从技术角度说,方法和Read only属性本来是一回事, 都能返回Object。区别仅在于 方法可以象过程那样调用,而只读属性只能象函数那样出现在表达式里。)

而obj.Cells, Columns 和 Rows属性返回Range object,其范围分别是Worksheet或 已知的Range对象obj上的所有cells,columns,和rows。因此把它们理解成集合更好些 何况还可以引用Rows(i),Columns(j)和Cells(i,j)。可惜Row/Column/Cell不是的 objects,从而Rows,Columns,和 Cells也就不是Collections。

Worksheet上有256 columns, 65536 rows和256*65536=16777216 cells。它们的任一部分 或全部都可以构成一个Range object。 如以下语句 ActiveSheet.Columns.Font.Bold = True ActiveSheet.Columns.Formula = 5

把所有Cells都送了数5(要执行很长时间,用Rows或Cells属性代替Columns也同义)。 Columns,Rows,Cells返回的Range object有Count属性,Worksheet.Columns.Count=256, Rows.Count= 65536,Cells.Count=16777216。但因为它们不是Collection,因此你不能 声明一个变量为Rows或Row类型的,而只能声明为Range类型的。例如,以下是正确的: Dim r As Range

Set r = Application.Columns

MsgBox r.Count „256 列数, 同 r.Columns.Count (a) Set r = Application.Rows

MsgBox r.Count „65536 行数, 同 r.Rows.Count (b) Set r = Range(\"B5:D6\")

MsgBox r.Count „6 Cells数 (c) MsgBox r.Columns.Count „3 列数 MsgBox r.Rows.Count „2 行数

由此看来, Range object应该有一属性指示它的结构特征 – 是Address属性(好象只记下 Reference还不行,如何区分r.Count是Columns,Rows还是Cells的Count?)。

此外,可以用obj.Columns(j),Rows(i),Cells(i,j)引用在range中特定的列,行和Cell 所构成的Range object,其中 i=1,2,…, j=1,2,…。(但Excel并不限定i和j必须在 obj.Rows.Count和 obj.Columns.Count的范围之内。

Range属性 ( for Application, Worksheet, Range objects):

Read only。

Syntax 1: obj.Range( “ ”) 返回一个Range Object。 其中range expr可以包括:

* A1 style range references, 如 B5, 同 $B$5, B$5 (不管$符号) * 在worksheet上的Named ranges, 如 MyRange1 * Range operators:

: range 如 Range(“B5:D4”) ( 同 “D4:B5” ) , union 如 Range(“A1:B2,C3:D4”)

(space) intersection 如 Range(“A1:C5 B3:D4”) 即B3:C4 优先级:range,intersection,union,还可以使用圆括号,如 Range(\"C5:E8,A1:C5 B3:D7\") 是 Range( “C5:E8,B3:C5” ) Range(\"(C5:E8,A1:C5) B3:D7\") 是 Range( “C5:D7,B3:C5” ) 注意,在Range()的参数中不能使用R1C1 style参照。 Syntax 2: obj.Range( R1, R2 )

其中 R1和R2各是一个以矩形(或单个Cell)为范围的range,可以是: Range Object, “Named Range”, “B3”, 或 “D2:E8” 类的range

Range(R1,R2)返回一个以矩形为范围的Range object,该矩形的左上角和右下角(或左下角 和右上角)由R1和R2确定,使R1和R2都“刚好”落在其中(“外切”矩形)。

注意, Range(r1,r2)与Range(r2,r1) 同效。

例: Range( “A2”, “F6”) 是 Range( “A2:F6” ),不是 Range( “A2,F6”)。 Range( “A2:D3”, “C4:F6”) 同上,是 Range( “A2:F6” ) Range( “A2:D3”, “MyRange1”), Range(“A2:D3”,r1), Range( r1, “MyRange1”), Range(r1,r2) 这里,MyRange1是Named Range,r1和r2是Range objects

语法1主要用来构造一个Range,它含一个area或由多个 areas的合集(union)组成(虽然也容许 intersection操作),而语法2主要用来根据对角线构造一个矩形Range。

* 如果Obj是Worksheet,在range expr中的A1 style参照是Sheet上的绝对Cell地址。 * 如果Obj是Application,则Application.Range(…) (通常省写Application.)相当于 Application.ActiveSheet.Range(…)

但如果当前Active的不是Worksheet(而是Cartsheet),则Error。

* 如果Obj是Range Object,则A1 style参照是相对于该Range左上角而言的,即“A1” 表示Range的左上角cell,以它为坐标原点计列号和行号,如: Set r1 = Range(\"B3,E5:F8\") „ 坐标原点是B3.

r1.Range(\"A1:B2\").Value = 66 „ A1:B2表示r1的左上角4个Cells。 同 Range(“B3:D4”).Value=66。注意,Range(“B3:D4”)已经不落在r1中了。即r1只是确定了 参照的坐标原点,仅此而已。并不要求r1.Range(…)的范围属于r1的范围。

在语法1和2中的其他元素仍可用,因为对任何Ranges,Excel总是能把它表示成 A1 style, 这里仅仅是改变了坐标原点。

Range()例子:

Reference Meaning Range(\"A1\") Cell A1 Range(\"A1,B5\") Cells A1 and B5

Range(\"A1:B5\") Cells A1 through B5 (左上角到右下角) Range(“A5:B1”) 范围同上 (左下角到右上角) Range(\"C5:D9,G9:H16\") A multiple-area selection Range(\"A:A\") Column A Range(\"1:1\") Row 1

Range(\"A:C\") Columns A through C Range(\"1:5\") Rows 1 through 5 Range(\"1:1,3:3,8:8\") Rows 1, 3, and 8 Range(\"A:A,C:C,F:F\") Columns A, C, and F

Range(\"Range1,Range2\") (Named ranges)Range1 and Range2 (union) Range(“D1:D5,Range1”) Union of two ranges

Range(“D1:D5 Range1”) Intersection of two ranges ( 交集!) Range(\"MyBook.xls!MyRange\") MyBook.xls上的Range

Range(\"[Report.xls]Sheet1!Sales\") Report.xls的Sheet1上的 Range

下表假设已定义了Range变量r1,r2: Dim r1, r2, myMultipleRange As Range Set r1 = Sheets(\"Sheet1\").Range(\"A1:B2\") Set r2 = Sheets(\"Sheet1\").Range(\"C3:D4\")

Range(“r1,r2”) „ Error ! Range(“B2”, “D4”) B2:D4

Range(“D4”, “B2”) B2:D4 Range(r1,r2) 或 Range(r2,r1) A1:D4 Range(“A2”,r2) A2:D4

Range(\"E2:F5\Range(\"E2:F5\Range(\"E2:F5\Range(“E2:F5”,r2) C2:F5 Range(\"E2:F5\

A1 style ranges和 Named ranges的简写: Worksheets(\"Sheet1\").[A1:B5].ClearContents [Range1].Value = 30

[A1:B3,Range2].Formula= “This”

注意,Named ranges是在Worksheet上定义的range名字,不是Range object,

不要和上述的r1,r1相混,Range Name是要放在引号中的(简写放在方括号中),而r1不用。

用code设置Named range: Range(\"D4:D9\").Select

ActiveWorkbook.Names.Add Name:=\"RangeName1\

Working with 3-D Ranges

If you are working with the same range on more than one sheet, use the Array function to specify two or more sheets to select. The following example formats the border of a 3-D range of cells. Sub FormatSheets()

Sheets(Array(\"Sheet2\ Range(\"A1:H1\").Select

Selection.Borders(xlBottom).LineStyle = xlDouble End Sub

Columns属性 ( for Application, Worksheet, Range objects): Rows属性 ( for Application, Worksheet, Range objects): Cells属性 ( for Application, Worksheet, Range objects):

Read only. 返回Range object。

Obj.Columns 返回的Range object(的范围)是Obj的所有的列。 Obj.Rows 返回的Range object是Obj的所有的行。 Obj.Cells 返回的Range object是Obj的所有的cells。

Application.Columns实际是指Application.Activesheet.Columns,另两个属性也类似。 例如,

Set r2 = Range(\"B3:C5,D3:G5\")

(1) r2.Columns.Value = \"7\" „ 同r2.Value= “7” (2) k = r2.Columns.Count „ Count=2,不是5

作为一个Range,obj.Columns,obj.Rows和obj.Cells的范围都和obj的范围一样,见(1)式。 而Worksheet.Columns/Rows/Cells是整个sheet, 256列,65536行。

通常作为集合使用用它们,但此时如果obj是由多个areas组成时,Columns和Rows只是指obj的 “第一个” area 的列和行,如obj.Columns.Count和objColumns.Count返回第一个area的列数 和行数,见(2)式。 这里,“第一个” area 是指area union中的第一个操作数,而不是union结果 的最左边的area。如:

Range(\"B3:C5,E3:G6\").Columns.Count = 2 „B3:C5的列数 Range(\"E3:G6,B3:C5\").Columns.Count = 3 „E3:G6的列数 你可以如下引用相对于第一个area左上角的列或行:

Range(\"B3:C5,E3:G6\").Columns(j) j=1,2,…, 可以大于Columns.Count Range(\"B3:C5,E3:G6\").Rows(i) i=1,2,…, 可以大于Rows.Count Excel并不i,j要在给定的range内,可以任意大。

如果写Range(\"B3:C5,E3:G6\").Columns(6).Value = “This”,则是第6列(B作为第1列) 上的3行cells即G3:G5上送了 “This” 。注意这个Columns(6)只含3 cells。如果希望 扩充到整个第G列(65536 cells),应该再用EntireColumn属性。例如: Range(\"B3:C5,E3:G6\").Columns(6).EntireColumn.Cells(1,1).Value = “xx” 是送 “xx” 到G列中。

对于Cells,obj.Cells.Count是各Areas的Cells个数之和,不管Areas是否有重叠,如 Range(“B3:C5,C4:D7”).Cells.Count = 6+8 = 14

你可以用Cells(i,j)来引用cell,i,j是以第一个area左上角cell为(1,1)的行列坐标: Range(“C4:D7,B3:B5”).Cells(1,1) 是 C4 Range(“C4:D7,B3:B5”).Cells(1,3) 是 E4

i,j可以任意大(而且可以是0和负数),并不限于obj的范围内,只要还在256列65536行之内,都 能正常执行。 小结:

a) obj.Columns/Rows/Cells,作为Range object,其range与obj的range一样,即包含obj 的全部cells,不管obj的 range是否为矩形。

b) 当obj的range是多个areas的Union时(intersection的结果是单个area),Columns. Count和Rows.Count是指第一个area的列数和行数。Cells.Count是各Areas的Cells数 之和。

c) 总是以第一个area左上角cell为原点计算行号列号,原点作为第1行第1列,即(1,1)而 不是(0,0),就象Worksheet中的行列计法那样。你可以写: Obj.Columns(j) j=1,2,… Obj.Rows(i) i=1,2,… Obj.Cells(i,j) i,j = 1,2,…

i,j 不受obj范围的,而且还可以是0和负数,如 Set r = Range(“C4:D7,…”)

r.Cells(1,1) 是C4 r.Cells(0,0) 是B3 r.Cells(0,1) 是C3 r.Cells(-1,-1) 是A2 r.Columns(1) 是C4:C7 r.Columns(-1) 是A4:A7

如果obj是单个矩形range,这3个属性可以方便地让你在该range内航行,一列一列地, 或一行一行地。这也是最常用的情况。

因Columns和 Rows是Range object,因此你也可以写: r.Columns(“A:A”) „ 即 Columns(1)

r.Columns(“B:D”) „ 即 Columns的第2至4列 r.Rows(“1:1”), r.Rows(“1:2”), …

D) Range object有一个Areas Collection,可以用RangeObj.Areas.Count知道该range 所含的areas个数。RangeObj.Areas(i)指向第i个Area,i=1,2,…。 Areas(i)也是Range object(因此无Area object一说)。 E) 在Range中的 “交集” 视为一个area,如: Set r = Range(\"b2:D6 C3:H8, F1:I5\") MsgBox r.Areas.Count „ 2

MsgBox r.Columns.Count „ 2 因为 “B2:D6 C3:H8” 是 “C3:D6” MsgBox r.Rows.Count „ 4

用Union方法构造的Range和用union操作同样处理,如 Set r = Range(\"b2:D6 C3:H8, F1:I5\") Set r = Union(r, Range(\"J1:K9\")) MsgBox r.Areas.Count „ 3

MsgBox r.Columns.Count „ 2 第一个area仍是 “C3:D6” MsgBox r.Rows.Count „ 4

Column,Row属性 (Range object) Long, Read only.

返回Range object的第一个Area的左上角cell在Worksheet上的列号和行号(整数),如 MsgBox Range(\"C4:D7,B3:B5\").Column „ 3 (C列) MsgBox Range(\"C4:D7,B3:B5\").Row „ 4

Offset 属性 (Range Object) Range object, Read only

RangeObj.Offset(RowOffset, ColumnOffset) „ Offset可正,负,或0。

它返回一个Range object,其range是原整个range按给定Offsets的移动。如(1,1)是向 右下移动1行1列,(-1,-1) 是向左上移动1行1列,(0,0)不动.如: Range(\"C4:D7\").Offset(1, 1) 是 Range( “D5:E8” ) 通常用于相对于ActiveCell选择新的Cell,如

ActiveCell.Offset(rowOffset:=3, columnOffset:=3).Activate 如果原ActiveCell是B2,本语句将激活 E5。

下例选择一range,它去掉了原Regine(例如是一 data list)的头一行(如标题行): Set aList = ActiveCell.CurrentRegion

aList.Offset(1, 0).Resize(aList.Rows.Count - 1, aList.Columns.Count).Select Resize方法用来改变Range object自己的范围。

EntireColumn属性 (for Range object)

Read only,返回一个Range object,它的范围是在Worksheet中原范围所在的全部列。 如 以下语句选择了列C,D,F所组成的Range: Range(\"C4:D7,F5\").EntireColumn.Select

通常用来选择ActiveCell所在的整个列(含65535 cells): ActiveCell. EntireColumn.Select

下例在第1列前加一列,原来的A,B,C,…列右移,变成B,C,D,…列,新加的列为A: Range(“A1”).EntireColumn.Insert

EntireRow属性 (for Range object)

类似。

CurrentRegion属性 (for Range object)

Read-only.

RangeObj.CurrentRegion返回一个Range object,它的范围是包含该RangeObj的整个region。 被一或连续多个空行和空列包围的Cells构成一个Region。 在worksheet上可以有一或多个regions。

下例选择整个table(即data list)除最上的列标题行以外的部分,假设现在的ActiveCell是 在table之内:

Set tbl = ActiveCell.CurrentRegion

tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1,tbl.Columns.Count).Select

Resize属性 ( Range object)

RangeObj.Resize(RowSize, ColumnSize)

返回一新Range Object,它的范围与RangeObj的范围只在行列数上不同,新Range的行列数

由RowSize, ColumnSize给定:从原range的下面加减行,右面加减列。 注意,RangeObj只含单个矩形area才能Resize。 Resize只是改变范围,并未Insert/Delete 任何cells。 例如:

Set r1 = Range(\"B2\").Resize(5, 6) „ r1是Range(“B2:G6”)。 Range(…).Select ‘ (*) Set r2 = Selection.Resize(Selection.Rows.Count+1) r2.Select „现在又比(*)多选了一行,列数未变。

Select方法 (for Worksheet, Range objects等)

Obj.Select 本方法使obj被选择。

Select Sheets

在每个打开的Workbook中都可以选择一或多个Sheets,但其中只有一个是Active的。 * 交互式选择:

a) 为选择单个 Sheet, 在当前Workbook底部的Tabs Bar上,单击该Sheet的tab。 该Sheet变成Active的。

b) 为选择连续的多个 Sheets, 先单击其中第一个(最左)Sheet tab,然后按住SHIFT键, 再单击最后一个Sheet tab。按住SHIFT键容许你选择不连续的多个 Sheets。第一个选择 的Sheet变成 Active的。你可在选择的sheets中,用单击使别的sheet变成Active的。 (仅当你又选择了另外的sheet,刚才选择的这组Sheets才被deselect。)

你可以在Active sheet上编辑,如输入或Formatting。Excel会在已选择的每个Sheet 上自动重复你在Active sheet上做的changes,如往A3上输入“The”,则在所有选择的 sheets上的A3都输入了”The”。

注:右击sheet tab,从shortcut菜单中选择“Select All Sheets”,则选择全部sheets。 * 用code选择:

注意,只能在Active的Workbook上选择sheets。用Activate方法“选择”Workbook: Workbooks(\"Book2\").Activate a) 选择单个 Sheet:

Worksheets(\"sheet2\").Select Sheet2被选择并Activated。

也可以用 Activate方法选择并激活sheet: Worksheets(\"sheet2\"). Activate (或 Sheets(\"sheet2\").Select 或 Activate)

b) 选择多个Worksheets,用Array()函数:

Worksheets( Array(\"sheet2\“sheet7”) ).Select Sheet2自动变成 Active的。

在选择的sheets中,可以用Activate方法激活其中任何一个。

Select a Range & Activate a Cell RangeObj.Select

只能在ActiveSheet上选择一Range: Workbooks(\"Book2\").Activate Worksheets(\"sheet2\").Select

Range( “E3:H7,B2:D4” ).Select

其中第一个area的左上角cell变成Active的,如E3(不是B2)。你可以用Activate方法 使该范围内的其他Cell变成ActiveCell,如: Range(“B2”).Activate

直到在该range以外的Range被选择,这个range才deselected。

在一Worksheet中只有单个Cell是Active的。为选择并激活单个Cell,即可以用Select 方法,也可以用 Activate方法:

Range(“F6”).Select 或 Range(“F6”).Activate

Activate方法 (for Workbook, Worksheet, Range objects等)

见上。

Selection 属性 ( Application object, Window object )

Read only. 返回当前选择的object。(当然包含ActiveCell在其内)

例如当在Worksheet上选择了 a Range,[Application.]Selection返回的是该Range Object。 Range(“B2:D6”).Select Selection.Value = “abc”

Selection.Name = “RangeName1” ‘See Name property below Cells B2:D6 都送了值 “abc”, 该 range 被命名为“RangeName1”。

注:用code 给某cell(s)赋值或公式,并不要求一定要先Select或Activate,如可直接写: Range(“B2:D6”).Value = “abc”

SpecialCells 方法 (for Range object)

按条件选择Cells的方法。返回Range object。

RangeObj.SpecialCells(Type, Value) 同Edit -> Goto -> Special操作。 在RangeObj的范围内查找满足给定条件的cells,这些cells构成本方法返回的Range object, 且该Range被选择,其中左上的Cell变成Active的。条件由Type(可能还有Value)来指定。 无满足条件的cell时,原selection 和ActiveCell不变。

(自注:被Select的Range不可以是空集合,因为必须有一个ActiveCell才合理。所以当Select 一个空集Range时会报错。) Type参数(Long)可以是以下之一:

XlCellTypeAllFormatConditions 任何Format的cells

xlCellTypeAllValidation 有validation criteria的cells xlCellTypeBlanks 空白 cells xlCellTypeComments 有Comment 的cells

xlCellTypeConstants 含常数(不含公式)的cells (可附加Value参数) xlCellTypeFormulas 含公式的cells(可附加Value参数)

xlCellTypeLastCell 在曾使用过的范围内,“最后的”cell (最右下角的) xlCellTypeSameFormatConditions 和ActiveCell有相同format的cells

xlCellTypeSameValidation 和ActiveCell有相同 validation criteria的cells xlCellTypeVisible 全部可见的cells

Value参数: Optional Variant

仅当Type参数是 xlCellTypeConstants 或 xlCellTypeFormulas时,Value参数才可有,它可以 是以下常数之和:

xlErrors(有错的), xlLogical(逻辑值), xlNumbers(数), xlTextValues(字符串) 指示要查什么类型的常数或公式。如果Value参数省,相当于给出这4个常数之和,即全选。

Copy方法 ( for Range, Sheet object等 )

AnyObj.Copy

可用于任何类型的Obj,包括Ranges。把该对象拷贝到Clipboard上。

如果Copy的是Range,可用Range的PasteSpecial方法或Worksheet的Paste方法去粘贴。 最好直接用下面的方法 同时Copy 并Paste 一个 range。 RangeObj.Copy(Destination)

把RangeObj拷贝到Destination Range object上。如:

Worksheets(\"Sheet1\").Range(\"A1:D4\").Copy Worksheets(\"Sheet2\").Range(\"E5\") 这里的Paste相当于用的是Worksheet的Paste方法,而不是Range.PasteSpecial方法。 SheetObj.Copy(Before, After)

把SheetObj(Worksheet或Chart sheet)到一新sheet上,该新sheet将放到Before之前或 After之后(两者只能给其一)。Before/After是一sheet object。例如: Worksheets(\"Sheet1\").Copy after := Worksheets(\"Sheet3\")

如果Before和After参数都未给,则建立一新Workbook和它的Sheet1来放AheetObj的拷贝。

注:Sheet还有Move方法

SheetObj.Move(Before, After)

与Copy有类似的规定。

例如, Workbooks(\"Book2.xls\").Worksheets(\"Sheet1\").Move 将建立新Book来接收Sheet1。 如果一个Workbook仅有的一个Sheet要被Move,则导致Error 1004,Move不成功。因为 Workbook至少要有一个Sheet。

Cut方法 ( for Range )

RangeObj.Cut(Destination)

如果未指定Destination Range object参数,则是Cut到Clipboard上。

被Cut或Copy的Range只能含单个area( 矩形,包括整行s或整列s )。

在Cut/Copy时,如果未指定paste目的地,则导致Application.CutCopyMode为True。直到 按Esc键,或者某些其他操作(如Insert,Delete方法等),CutCopyMode才变成False。仅当 CutCopyMode为True时才能执行range.PasteSpecial或sheet.Paste方法做粘贴。所有粘贴 做完后你应置CutCopyMode=False。

PasteSpecial方法 (Range Object)

RangeObj.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

把Clipboard上的Range粘贴到RangeObj上。

RangeObj的范围要么和原Copy的范围完全一样,要么是单个Cell,此时以它为起点(左上角), 粘贴范围多大取决于Clipboard上的内容。

参数都是任选的.

Paste参数 指定粘贴哪一部分内容:

XlPasteAll(default), xlPasteFormulas, xlPasteValues, xlPasteFormats, xlPasteNotes, xlPasteAllExceptBorders

Operation参数 粘贴方式,可以覆盖,或者与原内容做算术运算: XlPasteSpecialOperationNone(覆盖),

xlPasteSpecialOperationAdd, xlPasteSpecialOperationSubtract, xlPasteSpecialOperationMultiply, xlPasteSpecialOperationDivide SkipBlanks参数 True/False 若True则空白Cells不粘贴进来。 Transpose参数 True/False 若True则转置行和列。

例1.

Worksheets(\"Sheet1\").UsedRange.Copy

Set newSheet = Worksheets.Add „ 插入新Worksheet newSheet.Range(\"A1\").PasteSpecial Paste:=xlValues 例2.把C1:C5加到D1:D5上: With Worksheets(\"Sheet1\") .Range(\"C1:C5\").Copy

.Range(\"D1:D5\").PasteSpecial Operation:=xlPasteSpecialOperationAdd End With

例3.假设在一Region中许多 Cells用公式计算出了值。Excel为这些cells既保存了公式 又保存了值。如果你现在只想保留值而去掉公式,可以先 Copy整个Regine,然后再 PasteSpecial到同一Region,在Paste时告诉Excel只要Values,不要公式: ActiveCell.CurrentRegion.Select „与按Ctrl+shift+*同效 Selection.Copy

Selection.PasteSpecial Paste:=xlValue „自己拷贝到自己

Application.CutCopyMode = False „ 去掉Copy区的虚边框(与按Esc同效)

PasteSpecial方法(Worksheet Object)

Worksheet.PasteSpecial(Format,Link,DisplayAsIcon,IconFileName,IconIndex, IconLabel)

把Clipboard上的内容粘贴到sheet上。可以指定格式,还可用来建立embedded或linked OLE object(当Clipboard上的内容来源于其他应用时)。

Worksheet.Paste方法,它是简单地粘贴Clipboard上的内容,不能带任何参数。Paste前要

先选择粘贴的目的地(即当前的Selection将总是作为Paste的目的地)--- 目的地可以是和原Copy 一样的range,或单个cell – 它将作为粘贴的起点。

注意,任何Paste都不是 insert,而是Overwrite。

Insert方法 (for Range object) RangeObj.Insert( Shift )

如果RangeObj的范围是一整列,RangeObj.Insert(无参)是在它左边插入一空白列,或者说在该列 及随后的列右移后,在原列位置上插入一新空白列。

如果RangeObj的范围是一整行,RangeObj.Insert(无参)是在它上边插入一空白行。

如果RangeObj的范围是一矩形,RangeObj.Insert( Shift )是在该矩形位置上插入空白cells, 原矩形及其右边(或下边)的所有cells右移(或下移),以腾出地方。右移还是下移由Shift参数 指定。Shift可以是xlShiftToRight 或 xlShiftDown。 插入整列只能是右移,插入整行只能是下移.

如果在执行Insert方法时,当前CutCopyMode=True,则插入的不是空白Cells,而是Clipboard的 内容。

例:将当前列和它右边的列互换: ActiveCell.EntireColumn.Select

Selection.Cut „ Cut当前列到Clipboard,使Application.

ActiveCell.Offset(0, 2).Select „选择下一列的下一列,以便在它之前插入新列 „ 现在是CutCopyMode=True,如果只置False,将要插入的就是空白列了。

Selection.Insert Shift:=xlToRight „插入新列(是Cut内容),自动CutCopMode=False ActiveCell.Offset(0, -1).Range(\"A1\").Select „ 原ActiveCell并未因插入而改变 如果RangeObj的范围不是单行、单列或单个area,也能Insert,但用时要小心。

Delete方法 (for Range object) RangeObj.Delete(Shift)

Shift: xlShiftToLeft,xlShiftUp. 如果不指定shift参数,由Excel决定,如删除整行上移, 删除整列左移,删除一矩形,也是下面的上移。

例: 先按第一列(key)排序,然后删除重复前面Key值的行: Worksheets(\"Sheet1\").Range(\"A1\").Sort _

key1:=Worksheets(\"Sheet1\").Range(\"A1\") Set currentCell = Worksheets(\"Sheet1\").Range(\"A1\")

Do While Not IsEmpty(currentCell) ‘空白cell的Value是 “empty” ! Set nextCell = currentCell.Offset(1, 0) If nextCell.Value = currentCell.Value Then currentCell.EntireRow.Delete End If

Set currentCell = nextCell Loop

Name属性 (Range object)

Range Object的Name属性有两个解释: 1) String类型,Read/Write

用来给它的range命名,变成Named range。如:

Range(\"D5:E6,A8\").Name = \"zmRange1\" „ 命名 Ok Range(\"D5:E6,A8\").Name = \"zmRange2\" „ 命名 Ok 你可以给同一range起多个名字,如上面起了两个名字。 但你如果读Range Object的Name属性,则返回它的range,如:

MsgBox Range(\"D5:E6,A8\").Name 显示: “Sheet1!$D$5:$E$6, Sheet1!$A$8” 这里把Name属性解释成了Name object,而Value是Name object的Default属性。

注: 给当前选择的range定义新名字只须写:

[ Application.]Selection.Name = “ NewName “

2) Object类型,Read only

Range Object的Name属性指向它的下属Name object。 Name Object有许多属性,包括: Name: Range object的名字

Value: Range object的 range,Name Object的 Default属性。 RefersTo: Range object的 range, A1 style, 同Value属性。 RefersToR1C1: Range object的 range, R1C1 style。

虽然Name属性是可写的,但你不能用它给range命新名,命新名用1)。然而,可以用它 给range改名(只能改同一range的第一个名字,名字按字母顺序排列,不区分大小写)。如 Range(\"D5:E6,A8\").Name.Name = \"zmRangeNew\" 如果这个 range从未起过名,则ERROR 1004。

例:

Sub zmDispName()

„ Range(\"D5:E6,A8\").Name.Name = \"zmRange1\" „ 改名 可能 Error 1004 ! Range(\"D5:E6,A8\").Name = \"zmRange1\" „ 命名 Ok

MsgBox Range(\"D5:E6,A8\").Name „ “Sheet1!$D$5:$E$6, Sheet1!$A$8” MsgBox Range(\"D5:E6,A8\").Name.Value „ “Sheet1!$D$5:$E$6, Sheet1!$A$8” MsgBox Range(\"D5:E6,A8\").Name.Name „ \"zmRange1\"

MsgBox Range(\"D5:E6,A8\").Name.RefersTo „ “Sheet1!$D$5:$E$6, Sheet1!$A$8” End Sub

Names集合 ( Application, Workbook, Worksheet )

Range object 没有Names集合。

Obj.Names集合包括该obj中定义的所有Range names,Constant Names,和Formula Names。 你可以用Obj.Names集合的Add方法定义新的名字,指定它所参照的range,Constant,or Formula,以等号开头。

ActiveWorkbook.Names.Add _

Name:=\"tempRange\ 或 ActiveWorkbook.Names.Add _

Name:=\"tempRange\

给当前选择的range定义新名字只须写:

[ Application.]Selection.Name = “ NewName “

注: 用 Insert -> Names -> Define(或Apply/Past) 打开 Define Name对话框看到 当前workbook已定义的所有Names,还可以交互式地定义新名字。

不同worksheet上可以定义相同的名字,这时你命名时必须带sheet名前缀,如Sheet2!Range1。 只有这样的名字才属于worksheet object的Names集合。

Address属性 (Range object)

RangeObj.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

Read only, String。返回RangeObj的range reference。(应该称Address方法) Set r = Range(\"b2:D6 C3:H8, F1:I5\") Set r = Union(r, Range(\"J1:K9\")) Debug.Print r.Address

结果是字符串: “ $C$3:$D$6,$F$1:$I$5,$J$1:$K$9 ” 参数都是任选的.

RowAbsolute: True/False . True 表示 row 部分用绝对参照。

ColumnAbsolute: True/False . True 表示Column 部分用绝对参照。 ReferenceStyle: long. Reference style,可以是 xlA1 或 xlR1C1。

External True/False . True 表示用External参照(如下例),False表示用Local参照。 [Book1]Sheet1!$C$3:$D$6,$F$1:$I$5,$J$1:$K$9

RelativeTo: Range object 当 RowAbsolute =False, ColumnAbsolute= False, ReferenceStyle = xlR1C1 时,用该Range object指定相对参照的参照点。

Value属性 ( Range object 的default属性)

Read/Write.

当读时,返回Cell的值(常量或公式的计算结果)。 如果Cell空白,返回值Empty(可以用IsEmpty函数判断)。

如果Range含多个Cells,返回一数组(可以用IsArray函数判断Value属性)。

当写时,如果Range含多个Cells则写单个值/公式是写到每一个cell中。可以用Array函数写 多个值/公式。

Value属性通常用于写入一个常量,如

Range(“A1”).Value = 100.25 Range(“A1”)= “2001-12-31” Range(“A1”).Value = “This is a string.” Range(“A1”)= #2001-12-31# Range(“A1”).Value = TRUE

但也可以写入公式(虽然写公式最好用Formula/FormulaR1C1属性): Range(“A4:B4”).Value = “= A2+A3 “

Range(“A4:B4”).Value = “= R[-2]C[0]+R[-1]C[0] “

如果公式中用的是相对参照,如上两语句,每个Cell都相应地调整(R1C1相对形式不需调整),如 B4里的公式变成 “=B2+B3”,相当于公式的Copy。

注意,字符串的头一个字符是“=”号就表示公式,是其他字符则表示是字符串常量,如同在交 互式键入一样。为输入一字符串常量,其头一个字符是“‟”,应以单引号开头,如 “‟= A2+A3”, 为输入以单引号开头的字符串常量,则需再加一单引号,如 .Value= “‟‟This‟”,则Cell中是 „This‟。

例: Dim r As Range,Val as Variant Range(\"A2\").Value = 5 Range(\"A3\").Value = 7

Set r = Range(\"A4\") „ Object (因 Set用于Object赋值) Val = Range(“A2”) „ .Value是default 属性(Let语句) r.Value = \"=A2+A3\"

或 r.Value = \"=R[-2]C[0] + R[-1]C[0]\"

Debug.Print r.Value „ 12 Debug.Print r.Value2 „ 12 Debug.Print r.Formula „ =A2 + A3 Debug.Print r.FormulaR1C1 „ =R[-2]C + R[-1]C Debug.Print r.FormulaR1C1Local „ =R[-2]C + R[-1]C Debug.Print r.FormulaLabel „ -4142

Formula属性 ( Range object ) FormulaR1C1属性 ( Range object )

Read/write,Variant。 当Read:

用Formula属性返回Cell中的公式,A1 Style 形式。 用FormulaR1C1属性返回Cell中的公式,R1C1 Style 形式。 当Cell是常量时,与Value属性返回同样的结果。

当Cell是公式时,Formula/FormulaR1C1属性返回公式(string),而 Value属性返回公式的 计算结果(Variant)。 当Write:

两个属性都可用来写常量到Cell中,与Value属性一样。 Formula属性可以接受A1或R1C1 style的公式。 FormulaR1C1属性只能接受R1C1 style的公式。

注:FormulaLocal属性与Formula相同,如果在英文版Excel 一Cell公式是=SUM(a1:b3),在德文版 Excel上用FornulaLocal返回的是 “=SUMME(a1:b3)”。

FormulaArray属性 ( Range object )

Read/write,Variant。

用来设置数组公式,公式对任何Cell都照送,相对参照不做任何调整。例如: Range(\"E1:E3\").FormulaArray = \"=A1:A3 + B1:B3 \"

此时你在E1,E2和E3都会看到同一公式,即\"=A1:A3 + B1:B3 \",但因是数组公式,结果并不一 定相同,实际效果是 Ej = Aj + Bj,这恰是以下语句的效果: Range(\"E1:E3\").Formula = \"=A1 + B1\"

(但此时在E1,E2和E3会看到不同公式,分别是 =A1+B1, =A2+B2, =A3+B3。) 又例:

Range(\"E1:E3\").FormulaArray = \"=Sum(A1:B2)\" Range(\"F1:F3\").Formula = \"=Sum(A1:B2)\"

前一结果是E1,E2,E3有相同的公式(未调整),因而有相同个结果值。(不是数组公式)

后一结果是E1,E2,E3有不同的公式(分别是 =sum(a1:b2),=sum(a2,b3),=sum(a3:b4)),计算 结果值就可能不同。

注:FormulaArray与Formula的区别只是是否调整相对参照。读时总是返回Cell中的公式。

Text属性 (Range object)

Read only.String. Cell内容Format之后实际显示的字符串。 Set c = Worksheets(\"Sheet1\").Range(\"B14\") c.Value = 1198.65

c.NumberFormat = \"$#,##0_);($#,##0)\"

MsgBox c.Value „ 显示1198.65

MsgBox c.Text „ 显示 $1199 (也是cell显示的内容)

Font属性 ( Range object)

指向Font object,可以通过它设置cells中text的 font properties。如: Range(…).Font.Bold = True Font object 有许多属性:

Name, Size, Bold, Italic, Underline, StrikeThrough,FontStyle, OutlineFont Color(RGB值:0到256*65536-1),ColorIndex(default color palette有56种颜色) Subscript, Superscript,

Background: xlBackgroundAutomatic,xlBackgroundOpaque, xlBackgroundTransparent. used only for text on charts.

Characters属性 ( Range object)

(相当于Characters方法)

RangeObj.Characters(Start, Length)

指向Characters object,它包含一text 字符串,该字符串是Range Object(cell)中Value 字符串的一部分或全部,由Start和length指定。 两参数是任选的,其含义如同VB 的 Mid(start,length)。

(RangeObj必须是单个cell,Value必须是字符串,不能是 Numeric,DateTime,Boolean。) * Characters object 有属性:Text, Count, Font 等,可以通过它设置cell中内容子串的 Font和 color。

Dim c As Characters

Range(“A1”).Value = “ABCDEFGH” Set c = Range(\"A1\").Characters(3, 4)

MsgBox c.Text „ “CDEF”

c.Font.Underline = True „ Cell A1: “ABCDEFGH” c.Font.Color = RGB(255, 0, 0) „ Cell A1: “ABCDEFGH”

* Characters object 有方法:Delete()使Text为空串,Insert(str)给Text赋值str。 无用。你可以直接操作Text属性。

Orientation 属性 ( Range object)

Long., Reaf/Write. 指在Range object中每个cell里text的书写方向,值可以是 -90 到 90 (角度),或也可指定为以下常数:

xlDownward(-90), xlHorizontal(0), xlUpward(90)

或者 xlVertical: 字符串方向同xlDownward,但每个字符还是正的,而-90 度是把每个字符随 整个字符串一起顺时针转90度。(见Format -> Cells -> Orientation对话框)

NumberFormat属性 ( Range object)

Read/Write, String

对Range中的Value(数,包括Date)设置显示格式。格式化后的结果显示在Cells中,也能 用Range.Text读出。Value属性值并不改变。例: Range(\"A:A\").Select

Selection.NumberFormat = \"#,##0.0_);[Red](#,##0.0)\"

其中的 _)表示正数后面空一个右圆括弧字符那么大位置 (以便和负数对齐,因为负数的最后 是右圆括弧),如 A列的数可能为 12345.82, -761234.26,…, 它们显示成: $12,345.6 ($761,234.3)

使用的格式化字符与Format函数中用的格式化字符并不完全一致。

如何键入币符(Num Lock数字小键盘):

¢ Alt+0162 ¥ Alt+0165 £ Alt+0163 € Alt+0128

Borders属性 ( Range object)

指向Range的Borders collection。

对Borders collection设置属性应用于每个cell的4个边界。 整个Range的可能Borders有:

4个边界,2个中线(即每个Cell的边界),2个对角线(每个Cell要有都有) 个别边界Borders(index)是否有,由Border object的属性指示。边界Index 可以是 xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlInsideHorizontal, xlInsideVertical.

Borders collection和Border object都有属性Count,LineStyle,Weight,Color,ColorIndex。 LineStyle属性指示是否有边界和用什么样线条,Weight是线条宽度。LineStyle值可以是: xlContinuous, xlDash, xlDashDot, xlDashDotDot, xlDot, xlDouble, xlSlantDashDot, xlLineStyleNone(无)

例: With Worksheets(\"Sheet1\").Range(\"B2\").Borders(xlBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = 3 End With

Interior属性 ( Range object)

指向Range的Interior Object。

可通过Interior Object的Color和Pattern属性设置Range的Background。 Pattern属性是预定义的常数,如xlPatternAutomatic, xlPatternCrissCross等。 参见 Format -> Cells -> Pattern tab. 例:

Worksheets(\"sheet1\").Range(\"a1:b4\").Interior.ColorIndex = 3 (Red)

Hidden属性 ( Range object)

Read/write,True/False. 只有占(一或多个,可以不连续)整行或整列的Range才能隐藏。

End属性 ( for Range object)

RangeObj.End(Direction).

RangeObj一般是单个cell。RangeObj.End(Direction)返回一Range object,相当于把RangeObj 移动到所在Region的最左或最右列(在同一行)或最顶或最底行(在同一列)上, 移动方向由

Direction参数决定。Direction参数可以是:

xlToLeft, xlToRight, xlUp, 或 xlDown

效果类似于你按{End + 相应的箭头键},但End属性只返回Range object,并未选择(和激活)它。 例如,设有Region 是A1:H10,则

Range(“C5”).End(xlDown) 是 Range(“C10”) Range(“C5”).End(xlLeft) 是 Range(“A5”) 又,以下将选择Range(“B4:H4):

Range(\"B4\

Next属性, Previous属性 ( for Range object,Worksheet object,Chart object)

RangeObj.Next,RangeOnj.Previous返回RangeObj(单个Cell)的下一个或前一个cell (Range object),在同一行上 。

效果类似于你按{Tab}或{Shift+Tab}键,只是仅返回Range object,并不选择(和激活)它 若已在A列就不能再“Previous”了(Error 1004),但按Shift+Tab并不显示警告消息,只是不再 左移了。例如 Range(“C4”).Next是Range(“D4”)。

Dependents,DirectDependents属性( for Range object) Precedents,DirectPrecedents属性( for Range object)

返回Range object,它的范围可能包含多个areas。 如果cell B2有公式 = A2+B1, C2有公式 = B2+5 , 即 B2 = A2+B1 , C2 = B2+5

则C2的DirectPrecedents是B2,而C2的Precedents 是B2,A2,B1, A2或B1的DirectDependents是B2,Dependents是B2,C2。

(公式右端是左端的DirectPrecendents,左端是右端的DirectDependents。)

Range Object 的其他属性:

ColumnWidth, RowHeight, Comment, CurrentArray,

Lockd , Validation, WrapText FormatConditions, HorizontalAlignment HasArray, HasFormula ID, HyperLinks

ListHeaderRows, LocationInTable, OutlineLevel, PageBreak MergeAreas, MergeCells PivotTable, PivotField, PivotItem PrifixCharacter, QueryTable, ReadingOrder, ShrinkToFit

ShowDetail, Style, Summary, UseStandardHeight,UseStandardWidth, Left, top, width, height, Worksheet

Range Object 的方法:

Select,Activate,Run,Show,ShowDependents,ShowOrecedents,ShowErrors, AddComment,ApplyNames,CreateNames,ListNames,NoteText,

AutoComplete, AutoFit,AutoFill,AuyoFilter,AdvancedFilterm,AutoOutline, BorderAround,Calculate,CheckSpelling,

Clear,ClearContents,ClearComments,ClearFormats,ClearOutline, ColumnDifferences,RowDifferences,Consolidate, DialogBox, Copy,Cut,CopyPicture,PasteSpecial,CopyFromRecordset,

Delete,Insert,Group,UnGroup,InsertIndent, FillDown,FillUp,FillLeft,FillRight,

Find,FindNext,FindPrevious,Replace,Sort,SortSpecial,SpecialCells, FunctionWizard, GoalSeek,Justify, NavigateArrow, Merge,Unmerge,Parse, Printout,PrintPreview,

Table,SubTotal,RemoveSubtotal,TextToColumns

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务