ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: fanjy

[分享]使用VBA代码选择单元格/区域

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:57 | 显示全部楼层
本帖已被收录到知识树中,索引项:Range对象
引用行和列
可用 Rows 属性或 Columns 属性来处理整行或整列。这两个属性返回代表单元格区域的 Range 对象。在下例中,Rows(1) 返回 Sheet1 上的第一行,然后将区域字体加粗。
Sub RowBold()
    Worksheets("Sheet1").Rows(1).Font.Bold = True
End Sub
下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用。
引用             含义
Rows(1)    第一行
Rows     工作表上所有的行
Columns(1)   第一列
Columns("A")   第一列
Columns    工作表上所有的列
若要同时处理若干行或列,可创建一个对象变量并使用 Union 方法,将对 Rows 属性或 Columns 属性的多个调用组合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。
Sub SeveralRows()
    Worksheets("Sheet1").Activate
    Dim myUnion As Range
    Set myUnion = Union(Rows(1), Rows(3), Rows(5))
    myUnion.Font.Bold = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:58 | 显示全部楼层

使用索引号引用单元格
通过使用行列索引号,可用 Cells 属性引用单个单元格。该属性返回代表单个单元格的 Range 对象。在下例中,Cells(6,1) 返回 Sheet1 上的单元格 A6,然后将 Value 属性设置为 10。
Sub EnterValue()
    Worksheets("Sheet1").Cells(6, 1).Value = 10
End Sub
因为可用变量替代编号,所以 Cells 属性非常适合于在单元格区域中循环,如下例中所示。
Sub CycleThrough()
    Dim Counter As Integer
    For Counter = 1 To 20
        Worksheets("Sheet1").Cells(Counter, 3).Value = Counter
    Next Counter
End Sub
如果要同时更改某个区域中所有单元格的属性(或将方法应用于该区域中的所有单元格),建议使用 Range 属性。


使用快捷表示法引用单元格
可用方括号将 A1 引用样式或命名区域括起来,作为 Range 属性的快捷方式。这样就不必键入单词“Range”或使用引号了,如下例中所示。
Sub ClearRange()
    Worksheets("Sheet1").[A1:B5].ClearContents
End Sub

Sub SetValue()
    [MyRange].Value = 30
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:59 | 显示全部楼层
使用 Range 对象引用单元格
如果将对象变量设置为 Range 对象,即可用变量名轻松地操作单元格区域。
以下过程将创建对象变量 myRange,然后将活动工作簿中 Sheet1 上的区域 A1:D5 赋予该变量。随后的语句用该变量名称代替 Range 对象,以修改该区域的属性。
Sub Random()
    Dim myRange As Range
    Set myRange = Worksheets("Sheet1").Range("A1:D5")
    myRange.Formula = "=RAND()"
    myRange.Font.Bold = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 17:00 | 显示全部楼层
引用命名区域
用名称比用 A1 样式记号更容易标识单元格区域。若要命名选定的单元格区域,请单击编辑栏左端的名称框,键入名称,再按 Enter。

引用命名区域
以下示例引用名为“MyBook.xls”的工作簿中名为“MyRange”的区域。
Sub FormatRange()
    Range("MyBook.xls!MyRange").Font.Italic = True
End Sub
以下示例引用名为“Report.xls”的工作簿中特定于工作表的区域“Sheet1!Sales”。
Sub FormatSales()
    Range("[Report.xls]Sheet1!Sales").BorderAround Weight:=xlthin
End Sub
要选定命名区域,可使用 GoTo 方法,该方法将激活工作簿和工作表,然后选定该区域。
Sub ClearRange()
    Application.Goto Reference:="MyBook.xls!MyRange"
    Selection.ClearContents
End Sub
以下示例显示对于活动工作簿将如何编写与上例相同的过程。
Sub ClearRange()
    Application.Goto Reference:="MyRange"
    Selection.ClearContents
End Sub

在命名区域中的单元格上循环
下例用 For Each...Next 循环语句在命名区域中的每一个单元格上循环。如果该区域中的任一单元格的值超过 limit 的值,就将该单元格的颜色更改为黄色。
Sub ApplyColor()
    Const Limit As Integer = 25
    For Each c In Range("MyRange")
        If c.Value > Limit Then
            c.Interior.ColorIndex = 27
        End If
    Next c
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 17:01 | 显示全部楼层
引用多个区域
使用适当的方法可以很容易地同时引用多个单元格区域。可用 Range 和 Union 方法引用任意组合的单元格区域;用 Areas 属性可引用工作表上选定的一组单元格区域。

使用 Range 属性
通过在两个或多个引用之间插入逗号,可使用 Range 属性引用多个区域。以下示例清除了 Sheet1 上三个区域的内容。
Sub ClearRanges()
    Worksheets("Sheet1").Range("C5:D9,G9:H16,B14:D18"). _
        ClearContents
End Sub
命名区域使得用 Range 属性处理多个区域更加容易。以下示例可在所有这三个命名区域处于同一工作表时运行。
Sub ClearNamed()
    Range("MyRange, YourRange, HisRange").ClearContents
End Sub

使用 Union 方法
使用 Union 方法可将多个区域组合到一个 Range 对象中。以下示例创建了名为 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)
    myMultipleRange.Font.Bold = True
End Sub

使用 Areas 属性
可用 Areas 属性引用选定的单元格区域或多块选定区域中的区域集合。下述过程计算选定区域中的块数目,如果有多个块,就显示一则警告消息。
Sub FindMultiple()
    If Selection.Areas.Count > 1 Then
        MsgBox "不能对多个选区进行操作."
    End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 17:03 | 显示全部楼层

处理三维区域
如果要处理若干工作表上相同位置的单元格区域,可用 Array 函数选定两张或多张工作表。下例设置三维单元格区域的边框格式。
Sub FormatSheets()
    Sheets(Array("Sheet2", "Sheet3", "Sheet5")).Select
    Range("A1:H1").Select
    Selection.Borders(xlBottom).LineStyle = xlDouble
End Sub
下例应用 FillAcrossSheets 方法,将 Sheet2 上的区域中的格式和所有数据传送到活动工作簿中所有工作表上的相应区域。
Sub FillAll()
    Worksheets("Sheet2").Range("A1:H1") _
        .Borders(xlBottom).LineStyle = xlDouble
    Worksheets.FillAcrossSheets (Worksheets("Sheet2") _
        .Range("A1:H1"))
End Sub

by fanjy in 2007-2-10

提示:Excel 2007 VBA帮助系统重新进行了组织,更加清楚,采用了Visual Studio帮助形式,更易于学习,特别有助于初学者学习。

TA的精华主题

TA的得分主题

发表于 2007-3-2 17:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

在"不同工作簿"里只说了在同一目录下(WORKBOOKS("BOOK1.XLS")),如果工作簿在不同目录下如何选取?我用WORKBOOKS("D:\WORK\BOOK1.XLS")提示下标越界,怎么解决?

TA的精华主题

TA的得分主题

发表于 2007-3-3 10:31 | 显示全部楼层
真乃好东东,踏破铁鞋终找到,怎么会没人顶呢?收了。

TA的精华主题

TA的得分主题

发表于 2007-4-11 12:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-4-11 12:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
fanjy总能写出让菜鸟喜欢的贴子,超强人!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-4 10:35 , Processed in 0.040902 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表