热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何:在代码中引用工作表范围

Range类的使用非常灵活。有时Range对象是单个对象,有时它表示一个对象集合。尽管Range对象常常指代单个对象,它却拥有Item和Count成员,因而有时很难确切把握R

Range 类的使用非常灵活。有时 Range 对象是单个对象,有时它表示一个对象集合。尽管 Range 对象常常指代单个对象,它却拥有 ItemCount 成员,因而有时很难确切把握 Range 对象的用法。

注意   下面有几个实例检索一个范围的 Address 属性。此属性返回一个字符串,该字符串包含范围坐标的表示形式,其格式可以是以下几种格式中的一种:“$A$1”(位置 A1 的单元格)、“$1”(工作表的第一行)和“$A$1:$C$5”(由 A1 和 C5 限定的矩形内的所有单元格组成的范围)。“$”指示绝对坐标,而不是相对坐标。使用 Address 属性是确定检索到的范围的精确位置的最简单方法。

以下过程使 Range 对象引用单个单元格或一组单元格。每个实例都采用了以下设置代码:

' Visual Basic
Dim ws As Excel.Worksheet = _
    DirectCast(ThisWorkbook.Worksheets(1), Excel.Worksheet)
Dim rng, rng1, rng2 As Excel.Range

// C#
Excel.Worksheet ws = (Excel.Worksheet)ThisWorkbook.Worksheets[1]; 
Excel.Range rng,rng1,rng2;

可以使用以下任一方法引用特定的范围。

引用工作表中的特定范围

  • 引用 Application 对象的 ActiveCell 属性:
    ' Visual Basic
    rng = ThisApplication.ActiveCell
    
    // C#
    rng = ThisApplication.ActiveCell;
  • 使用对象的 Range 属性可指定一个范围:
    ' Visual Basic
    rng = ws.Range("A1")
    rng = ws.Range("A1:B12")
    
    // C#
    rng = ws.get_Range("A1",Type.Missing);
    rng = ws.get_Range("A1:B12",Type.Missing);
  • 使用工作表的 Cells 属性可指定单个行和列的值:
    ' Visual Basic
    ' The Cells collection returns an Object.
    ' Convert it to a Range object explicitly.
    rng = DirectCast(ws.Cells(1, 1), Excel.Range)
    
    // C#
    // The Cells collection returns an Object.
    // Convert it to a Range object explicitly.
    rng = (Excel.Range)ws.Cells[1,1];
  • 指定一个范围的“角”;也可直接引用范围的 CellsRowsColumns 属性;这几种情况下该属性都返回一个范围:
    ' Visual Basic
    rng = ws.Range("A1", "C5")
    rng = ws.Range("A1", "C5").Cells
    rng = ws.Range("A1", "C5").Rows
    rng = ws.Range("A1", "C5").Columns
    
    // C#
    rng = ws.get_Range("A1", "C5"); 
    rng = ws.get_Range("A1", "C5").Cells; 
    rng = ws.get_Range("A1", "C5").Rows; 
    rng = ws.get_Range("A1", "C5").Columns;
  • 引用命名范围:
    ' Visual Basic
    rng = ThisApplication.Range("SomeRangeName")
    
    // C#
    rng = ThisApplication.get_Range("SomeRangeName", Type.Missing);
  • 引用特定的行或列或者由行和列构成的范围;请注意,这些 RowsColumns 属性分别返回一个 Object,如果将 Option Strict 设置为 On,则需要进行转换:
    ' Visual Basic
    rng = DirectCast(ws.Rows(1), Excel.Range)
    rng = DirectCast(ws.Rows("1:3"), Excel.Range)
    rng = DirectCast(ws.Columns("B:E"), Excel.Range)
    
    // C#
    rng = (Excel.Range)ws.Rows[1,Type.Missing];
    rng = (Excel.Range)ws.Rows["1:3",Type.Missing];
    rng = (Excel.Range)ws.Columns["B:E",Type.Missing];
  • 使用 Application 对象的 Selection 属性返回与选定的单元格相对应的范围:
    ' Visual Basic
    System.Diagnostics.Debug.WriteLine(ThisApplication.Selection.Address)
    
    // C#
    System.Diagnostics.Debug.WriteLine(((Excel.Range)
        ThisApplication.Selection).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing)); 
  • 创建一个包含两个范围的并集的范围(在引号中指定这两个范围,之间以逗号分隔):
    ' Visual Basic
    rng = ThisApplication.Range("A1:D4, F2:G5")
    ' You can also use the Application object's Union
    ' method to retrieve the intersection of two ranges:
    rng1 = ThisApplication.Range("A1:D4")
    rng2 = ThisApplication.Range("F2:G5")
    rng = ThisApplication.Union(rng1, rng2)
    
    // C#
    rng = ThisApplication.get_Range("A1:D4","F2:G5"); 
    // You can also use the Application object's Union 
    // method to retreive the intersection of two ranges: 
    
    rng1 = ThisApplication.get_Range("A1","D4"); 
    rng2 = ThisApplication.get_Range("F2","G5"); 
    rng = ThisApplication.Union(rng1, rng2, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing);
  • 创建一个表示两个范围的交集的范围(在引号中指定这两个范围,之间以逗号分隔):
    ' Visual Basic
    rng = ThisApplication.Range("A1:D16 B2:F14")
    ' You can also use the Application object's Intersect
    ' method to retrieve the intersection of two ranges:
    rng1 = ThisApplication.Range("A1:D16")
    rng2 = ThisApplication.Range("B2:F14")
    rng = ThisApplication.Intersect(rng1, rng2)
    
    // C#
    rng = ThisApplication.get_Range("A1:D16","B2:F14"); 
    // You can also use the Application object's Intersect 
    // method to retrieve the intersection of two ranges: 
    rng1 = ThisApplication.get_Range("A1","D16"); 
    rng2 = ThisApplication.get_Range("B2","F14"); 
    rng = ThisApplication.Intersect(rng1, rng2, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing);
  • 使用范围的 Offset 属性可检索相对于原始范围的范围;以下实例将内容添加到位于第 1 行第 1 列的单元格下方的范围:
    ' Visual Basic
    rng = DirectCast(ws.Cells(1, 1), Excel.Range)
    
    Dim i As Integer
    For i = 1 To 5
        rng.Offset(i, 0).Value = i.ToString
    Next
    
    // C#
    rng = (Excel.Range)ws.Cells[1,1]; 
    
    for(int i = 1; i <= 5; i++) 
        rng.get_Offset(i,0).Value2 = i.ToString();
  • 使用范围的 CurrentRegion 属性可检索代表当前区域的范围,当前区域指的是由最近的空行和空列所界定的区域:
    ' Visual Basic
    System.Diagnostics.Debug.WriteLine( _
        ThisApplication.Range("C3").CurrentRegion.Address())
    
    // C#
    System.Diagnostics.Debug.WriteLine(ThisApplication.get_Range(
        "C3", Type.Missing).CurrentRegion.get_Address(
        Type.Missing, Type.Missing,
        Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));
  • 使用范围的 Areas 属性可检索一组范围,每个范围对应于该范围内容中的一个区域:以下代码要求工作表中有一个名为“rangeTest”的范围:
    ' Visual Basic
    rng = ThisApplication.Range("rangeTest")
    Dim i As Integer
    For i = 1 To rng.Areas.Count
        System.Diagnostics.Debug.WriteLine(rng.Areas(i).Address)
    Next
    
    // C#
    rng = ThisApplication.get_Range("rangeTest",Type.Missing); 
    for(int i = 1; i <= rng.Areas.Count; i++) 
        System.Diagnostics.Debug.WriteLine(
            rng.Areas[i].get_Address(Type.Missing,
            Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, 
            Type.Missing));
  • 使用 End 属性以及 XlDirection 枚举中的值 (xlUp、xlToRight、xlToLeft、xlDown),可检索代表该区域末尾处的单元格的范围(如同按下了枚举值所描述的键一样):
    ' Visual Studio
    With ThisApplication.Selection
        System.Diagnostics.Debug.WriteLine(.End(
            Excel.XlDirection.xlToRight).Address)
        System.Diagnostics.Debug.WriteLine(.End(
            Excel.XlDirection.xlToLeft).Address)
        System.Diagnostics.Debug.WriteLine(.End(
            Excel.XlDirection.xlUp).Address)
        System.Diagnostics.Debug.WriteLine(.End(
            Excel.XlDirection.xlDown).Address)
    End With
    
    // C#
    rng = (Excel.Range)ThisApplication.Selection; 
    System.Diagnostics.Debug.WriteLine(rng.get_End(
        Excel.XlDirection.xlToRight).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing)); 
    System.Diagnostics.Debug.WriteLine(rng.get_End(
        Excel.XlDirection.xlToLeft).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing)); 
    System.Diagnostics.Debug.WriteLine(rng.get_End(
        Excel.XlDirection.xlUp).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing)); 
    System.Diagnostics.Debug.WriteLine(rng.get_End(
        Excel.XlDirection.xlDown).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing));
  • 使用 EntireRowEntireColumn 属性引用包含指定范围的行或列。以下代码要求工作表中有一个名为“rangeTest”的范围:
    ' Visual Basic
    rng = ThisApplication.Range("rangeTest")
    System.Diagnostics.Debug.WriteLine(rng.Areas(2).EntireRow.Address)
    
    // C#
    rng = ThisApplication.get_Range("rangeTest",Type.Missing); 
    System.Diagnostics.Debug.WriteLine(rng.Areas[2].EntireRow.get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1,
        Type.Missing, Type.Missing));

推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
author-avatar
越秀地产星汇凤凰近_681
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有