|
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
查看全部评分
-
|