Excel-VBA-编程教程(完整新版)excel高级教程==_第1页
Excel-VBA-编程教程(完整新版)excel高级教程==_第2页
Excel-VBA-编程教程(完整新版)excel高级教程==_第3页
Excel-VBA-编程教程(完整新版)excel高级教程==_第4页
Excel-VBA-编程教程(完整新版)excel高级教程==_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Excel_VBA_编程教程(完整版)excel高级教程VBA - Excel编程概念之:【单元格和区域】一、如何引用单元格和区域使用Visual Basic的普通任务是指定单元格或单元格区域,然后对该单元格或 单元格区域进行一些操作,如输入公式或更改格式。通常用一条语句就能完成操 作,该语句可标识单元格,还可更改某个属性或应用某个方法。在Visual Basic中,Range 对象既可表示单个单元格,也可表示单元格区域。下列主题说明了标识和处理 Range对象最常用的方法。用A1样式记号引用单元格和单元格区域 可使用Range属性来引用A1引用样式中的单元格或单元格区域。下述子程 序将单元格

2、区域A1:D5的字体设置为加粗。Sub FormatRange()Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _.Font.Bold = TrueEnd Sub下表演示了使用 Range属性的一些 A1样式引用。引用含义Range("A1")单元格 A1Range("A1:B5")从单元格 A1到单元格 B5的区域Range("C5:D9,G9:H16")多块选定区域Range("A:A")A 列R

3、ange("1:1")第一行Range("A:C")从A列到C列的区域Range("1:5")从第一行到第五行的区域Range("1:1,3:3,8:8") 第 1、3 和 8 行Range("A:A,C:C,F:F") A、C 和 F 列 用编号引用单元格通过使用行列编号,可用 Cells属性来引用单个单元格。该属性返回代表单个单元格的Range对象。下例中,Cells(6,1)返回Sheet1上的单元格 A6,然 后将Value属性设置为10。Sub EnterValue()Workshee

4、ts("Sheet1").Cells(6, 1).Value = 10End Sub因为可用变量替代编号,所以Cells属性非常适合于在单元格区域中循环,如下例所示。Sub CycleThrough()Dim Counter As IntegerFor Counter = 1 To 20Worksheets("Sheet1").Cells(Counter, 3).Value = Counter Next CounterEnd Sub注意 如果要同时更改某一单元格区域中所有单元格的属性或对其应 用方法,可使用 Range属性。有关详细信息,请参阅用A1样式

5、记号引用单元格。引用行和列 可用Rows属性或Columns属性来处理整行或整列。这两个属性返回代表单 元格区域的Range对象。下例中,用 Rows(1)返回Sheet1上的第一行,然 后将单元格区域的 Font对象的Bold属性设置为True。Sub RowBold()Worksheets("Sheet1").Rows(1).Font.Bold = TrueEnd Sub下表举例说明了使用 Rows和Columns属性的一些行和列的引用。引用含义Rows第一行Rows工作表上所有的行Columns第一列Columns("A") 第一列Columns工

6、作表上所有的列若要同时处理若干行或列,请创建一个对象变量并使用Union方法,将对Rows属性或Columns属性的多个调用组合起来。下例将活动工作簿中第一张 工作表上的第一行、第三行和第五行的字体设置为加粗。Sub SeveralRows()Worksheets("Sheet1").ActivateDim myUnion As RangeSet myUnion = Union(Rows(1), Rows(3), Rows(5)myUnion.Font.Bold = TrueEnd Sub用快捷记号引用单元格可用方括号将A1引用样式或命名区域括起来,作为 Range属性的快

7、捷方式 这样就不必键入单词“ Ranged使用引号,如下例所示。Sub ClearRange()Worksheets("Sheet1").A1:B5.ClearContentsEnd SubSub SetValue() MyRange.Value = 30End Sub引用命名区域用名称比用A1样式记号更容易标识单元格区域。若要命名选定的单元格区域, 请单击编辑栏左端的名称框,键入名称,再按 Enter。引用命名区域下例引用了名为“ MyBook.xls的工作簿中的名为“ MyRange的单元格区域。Sub FormatRange()Range("MyBook.x

8、ls!MyRange").Font.Italic = TrueEnd Sub下例引用名为“Report.xls的工作簿中的特定工作表单元格区域“Sheet1!Sales。"Sub FormatSales()Range("Report.xlsSheet1!Sales").BorderAround Weight:=xlthinEnd Sub若要选定命名区域,请用 GoTo方法,该方法将激活工作簿和工作表, 然后选定该区域。Sub ClearRange()Application.Goto Reference:="MyBook.xls!MyRange&

9、quot; Selection.ClearContentsEnd Sub下例显示对于活动工作簿将如何编写相同的过程。Sub ClearRange()Application.Goto Reference:="MyRange”Selection.ClearContentsEnd Sub在命名区域中的单元格上循环下例用 For EachNext循环语句在命 名区域中的每一个单元格上循环。 如果该区域中的任一单元格的值超过 limit的 值,就将该单元格的颜色更改为黄色。Sub ApplyC010roConst Limit As Integer = 25For Each c In Range

10、("MyRange")If c.Value > Limit Thenc.Interior.ColorIndex = 27End IfNext cEnd Sub相对于其他单元格来引用单元格处理相对于另一个单元格的某一单元格的常用方法是使用Ofset属性。下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下 划线格式。Sub Underline。ActiveCell.Offset(1, 3).Font.Underline = xlDoubleEnd Sub注意可录制使用 Offset属性(而不是绝对引用)的宏。在 工具'菜单 上,指向宏”,

11、再单击录制新宏”,然后单击确定”,再单击录制宏工具栏上的 相 对引用"按钮。若要在单元格区域中循环,请在循环中将变量与 Cells属性一起使用。下例以5 为步长,用5到100之间的值填充第三列的前 20个单元格。变量 counter 用作Cells属性的行号。Sub CycleThrough()Dim counter As IntegerFor counter = 1 To 20Worksheets("Sheet1").Cells(counter, 3).Value = counter * 5 Next counterEnd Sub用Range对象引用单元格 如果

12、将对象变量设置为 Range对象,即可用变量名方便地操作单元格区域。下述过程创建了对象变量myRange ,然后将活动工作簿中 Sheet1上的单元格 区域A1:D5赋予该变量。随后的语句用该变量代替该区域对象,以修改该区域 的属性。Sub Random()Dim myRange As RangeSet myRange = Worksheets("Sheet1").Range("A1:D5")myRange.Formula = "=RAND()"myRange.Font.Bold = TrueEnd Sub引用工作表上的所有单元格如果

13、对工作表应用Cells属性时不指定编号,该属性将返回代表工作表上所有单元格的Range对象。下述Sub过程清除活动工作簿中 Sheetl上的所有单 元格的内容。Sub ClearSheet()Worksheets("Sheet1").Cells.ClearContentsEnd Sub引用多个单元格区域使用适当的方法可以很容易地同时引用多个单元格区域。可用Range和Union方法引用任意组合的单元格区域;用 Areas属性可引用工作表上选定的一组单 元格区域。使用Range属性通过在两个或多个引用之间放置逗号,可使用Range属性来 引用多个单元格区域。下例清除了Shee

14、t1上三个单元格区域的内容。Sub ClearRanges()Worksheets("Sheet1").Range("C5:D9,G9:H16,B14:D18"). _ ClearContentsEnd Sub命名区域使得用 Range属性处理多个单元格区域更为容易。下例可在 三个命名区域处于同一工作表时运行。Sub ClearNamed()Range("MyRange, YourRange, HisRange").ClearContentsEnd Sub使用 Union方法用 Union方法可将多个单元格区域组合到一个 Range对

15、象中。下例创建了名为 myMultipleRange的Range对象,并将其定 义为单元格区域A1:B2和C3:D4的组合,然后将该组合区域的字体设置为加 粗。Sub MultipleRange()Dim r1,r2, myMultipleRange As Range Set r1 =Sheets("Sheet1").Range("A1:B2")Set r2 = Sheets("Sheet1").Range("C3:D4")Set myMultipleRange = Union(r1, r2)myMultipleR

16、ange.Font.Bold = TrueEnd Sub使用Areas属性可用Areas属性引用选定的单元格区域或多块选定 区域中的区域集合。下述过程计算选定区域中的块数目,如果有多个块,就显示一则警告消息。Sub FindMultiple()If Selection.Areas.Count > 1 ThenMsgBox "Cannot do this to a multiple selection.End IfEnd SubVBA - Excel编程概念之:【单元格和区域】二、在单元格区域中循环在单元格区域中循环使用Visual Basic时,经常需要对某一单元格区域内的每个

17、单元格运行同一段 语句。为达到这一目的,可组合循环语句和一个或多个方法来标识每个单元格, 一次针对一个单元格,并执行该操作。在单元格区域中循环的一种方法是将ForNext循环语句与Cells属性配合使用。使用Cells属性时,可用循环计数器(或其他变量或表达式)来替代单 元格索引编号。下例中,变量 counter代替了行号。此过程将在单元格区域 C1:C20中循环,将所有绝对值小于0.01的数字都设置为0 (零)。Sub RoundToZero1()For Counter = 1 To 20Set curCell = Worksheets("Sheet1").Cells(C

18、ounter, 3)If Abs(curCell.Value) < 0.01 Then curCell.Value = 0 Next CounterEnd Sub在单元格区域中循环的另一种简便方法是使用 For EachNext循环 语句和由Range属性指定的单元格集合。在每一次循环过程中, Visual Basic 都为下一个单元格自动设置一个对象变量。下述过程在单元格区域A1:D10中循环,将所有绝对值小于 0.01的数字都设置为0 (零)。Sub RoundToZero2()For Each c In Worksheets("Sheet1").Range(&q

19、uot;A1:D10").CellsIf Abs(c.Value) < 0.01 Then c.Value = 0 NextEnd Sub如果不知道要循环的单元格区域的边界,可用CurrentRegion属性返回 活动单元格周围的区域。例如,下述过程在工作表上运行时,将在活动单元格周 围的区域内循环,将所有绝对值小于 0.01的数字都设置为0 (零)。Sub RoundToZero3()For Each c In ActiveCell.CurrentRegion.CellsIf Abs(c.Value) < 0.01 Then c.Value = 0NextEnd Sub

20、VBA - Excel编程概念之:【单元格和区域】三、选定和激活单元格选定和激活单元格 使用Microsoft Excel时,通常要先选定单元格或单元格区域,然后执行某一操作,如设置单元格的格式或在单元格中输入数值。但在 Visual Basic中,通常 在修改单元格之前不必先选定它们。例如,如果要用 Visual Basic在单元格D6中输入公式,就不必先选定单元格 D6,而只需返回Range对象,然后将该对象的Formula属性设置为所需的公 式,如下例所示。Sub EnterFormula()Worksheets("Sheet1").Range("D6&qu

21、ot;).Formula ="二SUM(D2:D5)”End Sub有关使用其他方法在不选定单元格的情况下对其进行控制的示例,请参阅如何引用单元格和区域。使用 Select方法和 Selection 属性Select方法激活工作表和工作表上的对象;而 Selection属性返回代表活动工 作簿中活动工作表上的当前选定区域的对象。在成功使用 Selection属性之前, 必须先激活工作簿,并激活或选定工作表,然后用 Select方法选定单元格区域 (或其他对象)。宏录制器经常创建使用 Select方法和Selection属性的宏。下述Sub过程是 用宏录制器创建的,该过程演示了 Sel

22、ect方法和Selection属性在一起使用的 方法。Sub Macro1()Sheets("Sheet1").SelectRange("A1").SelectActiveCell.FormulaR1C1 = "Name"Range("B1").SelectActiveCell.FormulaR1C1 = "Address"Range("A1:B1").SelectSelection.Font.Bold = TrueEnd Sub下例完成同样的任务,但不激活或选定工作表或单元

23、格。Sub Labels()With Worksheets("Sheet1") .Range("A1") = "Name".Range("B1") = "Address".Range("A1:B1").Font.Bold = TrueEnd WithEnd Sub选定活动工作表上的单元格如果用Select方法选定单元格,应注意 Select方法仅用于活动工作表。如果从模块中运行Sub过程,必须先在该过程中激活工作表,然后才能用Select方 法选定单元格区域,否则该方法将失败

24、。例如,下述过程在活动工作簿中将Sheetl中的一行复制到 Sheet2上。Sub CopyRow()Worksheets("Sheet1").Rows(1).CopyWorksheets("Sheet2").SelectWorksheets("Sheet2").Rows(1).SelectWorksheets("Sheet2").PasteEnd Sub激活选定区域内的单元格可用Activate方法激活选定区域内的单元格。即使选定了单元格区域,也只能 有一个活动单元格。下述过程选定了一个单元格区域,然后激活该区域

25、内的一个 单元格,但并不改变选定区域。Sub MakeActive()Worksheets("Sheet1").ActivateRange("A1:D4").SelectRange("B2").ActivateEnd SubVBA - Excel编程概念之:【单元格和区域】四、处理三维区域如果要处理若干工作表上相同位置的单元格区域,可用 Array函数选定两张或 多张工作表。下例设置三维单元格区域的边框格式。Sub FormatSheets()Sheets(Array("Sheet2", "Sheet3&

26、quot;, "Sheet5").SelectRange("A1:H1").SelectSelection.Borders(xlBottom).LineStyle = xlDoubleEnd Sub下例应用FillAcrossSheets 方法,在活动工作簿中,将 Sheet2上的 单元格区域的格式和任何数据复制到该工作簿中所有工作表上的相应区域中。Sub FillAll()Worksheets("Sheet2").Range("A1:H1") _ .Borders(xlBottom).LineStyle = xlDoubleWorksheets.FillAcrossSheets (Worksheets("Sheet2") _ .Range("A1:H1")End SubVBA - Excel编程概念之:【单元格和区域】五、处理活动单元格处理活动单元格ActiveCell属性返回代表活动单元格的R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论