ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 16879|回复: 19

53页的给对象变量赋值的那一段代码——“Range“是什么数据类型?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-30 17:18 | 显示全部楼层 |阅读模式
53页的给对象变量赋值的那一段代码:
Sub dxbn()
      Dim rng As Range
      Set rng = Worksheets("Sheet1").Range("A1")
      rng.Value ="欢迎来到Excel Home论坛”
End sub
其中“Dim rng as Range”中的“Range“是什么数据类型?怎么在43页的“VBA的数据类型表”看不到有Range数据类型的?

TA的精华主题

TA的得分主题

发表于 2013-1-30 20:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
range是对象啊,是object

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-30 23:19 | 显示全部楼层
dajiahaoxinku12 发表于 2013-1-30 20:44
range是对象啊,是object

“Dim rng As range”这不是声明变量的语句么?“Dim 变量名称 As 数据类型”这里的 Range不是数据类型?
“Set rng=Worksheets("sheet1").range("A1")”这里的range才是对象啊?!不是吗?

点评

object是对象类型。对象可就多了,分N多对象。其中有一种是range,既然我知道那个变量是range了,就直接声明它为range  发表于 2013-2-5 21:57

TA的精华主题

TA的得分主题

发表于 2013-1-30 23:24 | 显示全部楼层
Dim rng As range  这个是声明 变量 rng 为  单元格对象, 下面一句是给变量对象rng赋值,不知道你要问什么

TA的精华主题

TA的得分主题

发表于 2013-1-31 01:37 | 显示全部楼层
Lucky啊 发表于 2013-1-30 23:19
“Dim rng As range”这不是声明变量的语句么?“Dim 变量名称 As 数据类型”这里的 Range不是数据类型?
...

vba 里面关于变量的定义分为基础类型和对象类型的变量(还有一个变体型,我们暂时不讨论)。
变量的操作分为声明变量和对变量进行操作运算等两部分语句。
基础类型变量是书上写过的,字符型,数字型(数字型又分为整数和浮点型)等等,你可以在书上查到。某一页列出了所有基础类型的变量。 比如 dim i as integer 这条语句就把变量i 声明为一个整数类型的变量这是基础类型的变量,i 里面就是定义了一个整数,这很好理解。
而对象变量类型就是object相对复杂一些,dim a as object 这句话声明在变量a 中将来会存放一个对象。什么是对象,就是不是基础类型所能涵盖的类型。工作表是对象,工作薄是对象,excel 程序是对象,一个普通文本文件也可以看作一个对象。作为对象变量和基础类型变量是有很多不同的,比如说对象有属性和方法。这部分的内容你可以参阅书上相关的讲解,俺就不在这里赘述了。
Okay 回到你的问题  Dim rng As range”这不是声明变量的语句么?  回答:是的,这条语句是声明一个单元格对象变量,变量名叫rng, 类型是Range。这里说明一下,VBA 把一些特定的对象进行了封装,比如单元格Range, 工作表Worksheet, 工作薄Workbook 等。这样当你声明变量的时候,就可以直接声明变量是哪种对象。当然这句话如果声明为 dim rng as Object 也是正确的。区别是Object 是可以任何对象,而Range 只能代表单元格对象,比如你下面把一个工作表对象赋值给你声明的变量,如果用Range 对象声明的变量,那么就会报错,而用Object 声明则不会报错。这样有可能造成你本来想定义一个单元格,但是传进去一个工作表的逻辑错误。所以定义声明变量时尽量用准确的变量类型。
好,搞清楚变量声明的问题,我们看看变量赋值语句的问题。
“Set rng=Worksheets("sheet1").range("A1") 这句话,首先变量赋值的时候,如果是基础型变量前面可以省略赋值语句的关键字Let. 引用我们上面的i 的整数类型声明,比如i =5 好理解吧,把i 的赋予整数5.
对象变量的类型赋值不同,必须要使用Set ,而且不能省略。  Set xxx=..... 这种类型的语句一看到那么跟在Set 语句之后的xxx 就一定是对象变量了。因此上面的 Set rng=Worksheets("sheet1").range("A1") ,Set 后面跟的rng 一定是个对象变量名,正如上面定义的是个单元格对象。看看等号右边Worksheets("sheet1").range("A1") 这部分的语句,按你的问题这里的range 当然是对象,这部分语句的内容代表名称为Sheet1 的工作表的A1 单元格,整个语句的意思是把这个单元格存到你声明的单元格对象变量rng 中。如果对于右边Worksheets("sheet1").range("A1") 看不懂,请去查书。
所以你的问题很简单,第一条语句声明了一个单元格类型的变量rng ,这个变量可能装一个单元格也可能装一个单元格区域若干单元格,甚至可能是若干不相邻的单元格。只要是单元格这个变量都可以装。
第二条语句 将某一个单元格赋值给rng 变量,以后访问rng 就是某工作表的某一个单元格了,而不再是其他的了,除非你再次进行赋值来改变。

评分

10

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-31 19:18 | 显示全部楼层
之前理解的不是很透彻,现在豁然开朗

TA的精华主题

TA的得分主题

发表于 2013-4-16 21:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-7-23 17:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-7-31 16:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-9-23 11:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
5楼讲的真清楚,我也搞明白
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 12:20 , Processed in 0.037382 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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