ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

在學習 《别怕,Excel VBA其实很简单》中,關于“變量賦值”中的“對象變量”相關問題

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-12-15 16:04 | 显示全部楼层 |阅读模式
本帖最后由 Day-Day 于 2012-12-21 18:29 编辑

各位老師:

 前幾天買了《别怕,Excel VBA其实很简单》,但是在學習的過程中,關于“變量賦值”還有點不懂,


數據變量賦值
 [code=vb]sub szbn()
  dim str as string
   str = " 别怕,Excel VBA其实很简单"
   range("A1").value= str
end sub[/code]


對象賦值 
  1.   Sub asuj()
  2.   Dim rng As Range
  3.   Set rng = Worksheets("Sheet1").Range("A1")
  4.    rng.Value = "别怕,Excel VBA其实很简单"
  5.   End Sub
复制代码



我明白一個是對數據變量賦值, 一種是對對象賦值。 但,在EXCEL 顯示都一樣, 兩都之間具體有何區別 ?

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-15 16:46 | 显示全部楼层
怎么也沒人幫忙解釋一下啊。 Call ggsmart.....

TA的精华主题

TA的得分主题

发表于 2012-12-15 18:12 | 显示全部楼层
你写的两段程序不是挺明白的吗?看不出你哪里不明白。
str 是字符串变量 ,你把字符串赋给它。这就是变量赋值结束了,后面那句和把字符串赋给变量str 无关。
只是把str 里的内容又赋给单元格A1 的值。

第二段,rng 被设定为单元格A1,就是Set 那句话的意思。到这里变量赋值也结束了。
rng.value 那句的意思是 把后面的字符串赋给 单元格对象变量rng.value 属性作为它的值。

通常情况下rng.Value 的value 是可以省略的,但是叶枫老师讲过初学者最好不要省略,就是怕混淆。
str 是字符串变量,它的值可以赋给单元格A1 作为它的值用来显示,也可以给A2作为值来显示,甚至可以不赋给任何对象不显示。
rng 是单元格对象变量,它被赋给单元格A1 后,它就可以引用A1 的所有属性,不单可以用rng.value 进行单元格值属性的赋值,改变。还可以用rng.format 修改格式,还可以修改背景色,字体选取,字号大小等等。
实在是很好区别的。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-18 11:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hehex 发表于 2012-12-15 18:12
你写的两段程序不是挺明白的吗?看不出你哪里不明白。
str 是字符串变量 ,你把字符串赋给它。这就是变量 ...

似懂非懂,謝謝!俺再琢磨琢磨。

TA的精华主题

TA的得分主题

发表于 2012-12-18 16:53 | 显示全部楼层
感谢你的器重,三楼已经说的很清楚了,我要补充的是:做条件时不用set,直接用等号。如果是定义并初始化第三方对象是用:Dim objcn As New ADODB.Connection
这个时候机器内部表现为给对象变量分配内存地址。。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-19 11:08 | 显示全部楼层
ctp_119 发表于 2012-12-18 16:53
感谢你的器重,三楼已经说的很清楚了,我要补充的是:做条件时不用set,直接用等号。如果是定义并初始化第三 ...

因為我給別講的時候,怎么表達都不具體,有沒有簡單通俗說明兩者區別。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-19 11:51 | 显示全部楼层
本帖最后由 Day-Day 于 2012-12-19 13:43 编辑
hehex 发表于 2012-12-15 18:12
你写的两段程序不是挺明白的吗?看不出你哪里不明白。
str 是字符串变量 ,你把字符串赋给它。这就是变量 ...


那比如什么時候需要給對象賦值,什么時候給變量賦值 。。

兩者具體區別。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-28 22:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-12-19 13:09 | 显示全部楼层
本帖最后由 ylj361800875 于 2012-12-19 13:13 编辑

说到对象,你就得明白对象是什么?
所谓数据封装就是将一组“数据”与这组数据有关的“操作”组装在一起,形成一个实体,这个实体就是对象。
其中数据是属性,比如range("A1").value称为对象range("A1")的value属性,属性本身就是变量,本质上与你自己定义的str没有区别,但是要注意变量的类型,比如dim str as string中的string类型。
所谓的操作就是方法,方法就是函数。函数有参数与返回值,同样要注意这些值的类型。
你可以在VBA编辑器中按F1输入“Range”回车,点击“Range 对象成员”以查看“Range 对象”的属性、方法。
对象本身也可以被认为是一种数据类型,也可以定义一个这种类型的变量并赋值,但是对这种特殊的类型赋值应该使用SET。

一个 Range 对象,它代表一个单元格或单元格区域

TA的精华主题

TA的得分主题

发表于 2012-12-19 14:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Day-Day 发表于 2012-12-19 11:51
那比如什么時候需要給對象賦值,什么時候給變量賦值 。。

兩者具體區別。

Okay 首先要明白什么是变量。什么是变量呢, 变量其实就是一个容器,或者你把它理解成是一个盒子也可以。
用来装各种数据类型的值或者是对象。
首先看这个定义语句: Dim str as String
这个语句的意思就是定义了一个名字叫str 的小盒子,可以用来装字符串。
str= "I love VBA"
就是将 "I love VBA" 这个字符串装进了str 这个盒子。上面的这个过程就是变量的赋值,赋值到这里就结束了。str 又叫基础数据类型变量,它的赋值操作是用Let 语句,但是通常情况下Let 语句是被省略的。因此上面那句话写全应该是Let str = " I love VBA"。同样属于基础数据类型的还有很多,比如字节型,整数型,单精度型,双精度型,日期型等等,具体你可以参考书上的讲解。

对象变量不同在于,对象变量这个盒子是用来装对象的,而不是基础数据类型。对象与基本数据类型的不同就在于对象是被封装好的一个东西。比如一个单元格对象,它有很多属性,单元格有值,有格式,有字体设置,有背景色等等一系列属性,这些都是基本的数据类型所不具备的。

看回去你上面举得例子
Dim rng as Range   '这句话的意思是定义一个名叫rng 的盒子专门用来装单元格对象,可能是用来装一个单元格也可能是装单元格区域,看你如何赋值。
Set rng= Range("A1")  这就是赋值语句了,将单元格A1 这个对象装进名叫rng 的盒子里。注意是对象变量赋值所以要使用Set 语句,而且Set 不能省略。

我认为你糊涂的地方不是在于变量赋值。而是对于对什么是对象搞不明白,所谓对象往往是相对比较抽象一点。比如说单元格A1,你通常访问的是A1 的值,把它的值拿出来计算也好,设置单元格格式也好,这些都是对象的属性,而并不是对象本身。我们访问对象都是通过它的属性或者是它特有的方法来进行的。建议你回去认真研读“别怕”这本书中关于对象,属性,方法的相关章节。楼上的朋友讲的也很清楚,看你如何理解了 。


评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 23:11 , Processed in 0.032765 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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