ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-12-28 16:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hehex 发表于 2012-12-20 14:58
Range("A" &i &":A" &j).Value
= Range("Ai" &":A" &j).Value
= Range("Ai" &":Aj").Value

range("A1:A10")
谢谢你的耐心讲解,你说的意思我懂,我在举例子的时候忘记说明就是后面的不把i j当变量,就是为了直观点。不过确实容易让人误解,我也是不知道怎么表达出来。

TA的精华主题

TA的得分主题

发表于 2012-12-19 15:28 | 显示全部楼层
本帖最后由 slsl2009cn 于 2012-12-19 15:29 编辑
hehex 发表于 2012-12-19 14:41
Okay 首先要明白什么是变量。什么是变量呢, 变量其实就是一个容器,或者你把它理解成是一个盒子也可以。
...


看到作者的回复很容易理解,在此想抱个大腿,呵呵。
想请教一下,range对象如何引用变量作为其参数。(在网上搜索了一些,看不明白,不明白具体语法结构,双引号的位置和意义,以及连接符的使用。例如表示A列第几行到第几行。)
  1. Range("A" & i & ":A" & j).Select
复制代码

希望作者有时间能解惑,谢谢!

TA的精华主题

TA的得分主题

发表于 2012-12-19 16:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 xfqyang 于 2012-12-19 16:13 编辑

说直白一点:给对象属性赋值通常用于显示最终结果,给变量赋值用于过程计算,如果在程序中间频繁改变对象属性的值会影响程序运行速度。

TA的精华主题

TA的得分主题

发表于 2012-12-19 16:13 | 显示全部楼层
slsl2009cn 发表于 2012-12-19 15:28
看到作者的回复很容易理解,在此想抱个大腿,呵呵。
想请教一下,range对象如何引用变量作为其参数。( ...

首先要明白Range 对象的格式,比如A1:A10 的单元格引用用Range 对象如何来表示:
Range("A1:A10")
这是基础,首先要知道这个后面就比较好理解了。
比如
Sub a()
    Dim ias Integer, j as Integer ' 定义i ,j 为整数型变量 并分别赋予初值1 和10
    i=1: j=10
      Range("A" & i).Value= 100 ' 将Range 里面当字符串处理,字符串"A" 连接上变量i 的值
    Range("A"& j).Value = 200
end sub
运行上面的小程序就会发现 A1 单元格的值变成100 而A10 单元格变成200
再看下面的程序
Sub b()  
       Dim ias Integer, j as Integer
       i= 1
       j= 10
       Range("A" &i &":A" &j).Value =300
end Sub
执行上面的程序b 很明显发现 A1:A10 单元格的值全都被赋值为300 了,就是说上面那句话等价于
Range("A1:A10").Value = 300
这里涉及到一些字符串操作的一些知识,特别是& 连接符,如果上面的解释不能理解,你就需要去参考一下这方面的知识了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-19 16:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hehex 发表于 2012-12-19 14:41
Okay 首先要明白什么是变量。什么是变量呢, 变量其实就是一个容器,或者你把它理解成是一个盒子也可以。
...

謝謝老師的詳細講解,我明白什么是對象,什么是屬性,方法 。

     我的意思是在什么情況下,要給對象賦值。為何要給对象变量?

TA的精华主题

TA的得分主题

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

Range的参数是一个字符串,这个字符串表示单元格引用,这个引用和公式中的引用是一样的,如果你不明白单元格引用是什么,请按F1,输入“公式概述”回车,单击“公式概述”找到“在公式中使用引用”,通常使用A1引用样式,如果经常写VBA则用R1C1引用样式更方便。
Range("A" & i & ":A" & j).Select
&是VB(VBA)的字符串连接符,功能是将两边的字符串连接在一起形成一个新的字符串,如果变量i=3,j=5,那么上式表示"A3:A5"区域,也就是第一列3、4、5行共三个单元格。

TA的精华主题

TA的得分主题

发表于 2012-12-20 09:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
三楼说得好清晰

TA的精华主题

TA的得分主题

发表于 2012-12-20 11:06 | 显示全部楼层
hehex 发表于 2012-12-19 16:13
首先要明白Range 对象的格式,比如A1:A10 的单元格引用用Range 对象如何来表示:
Range("A1:A10")
这是 ...

谢谢你的解释,我明白了。知道纠结在哪里了。我开始不明白的是range后面引用的是字符串,应该用双引号扩起来啊。看了变量作为range的参数就糊涂了,搞不清楚双引号的位置和个数,看了你的解释明白过来了。不用把连接符和变量都用双引号扩起来,连接符有那个功用。可以这样做个分解式理解吗?
Range("A" &i &":A" &j).Value
= Range("Ai" &":A" &j).Value
= Range("Ai" &":Aj").Value
=Range("Ai" &":Aj").Value
=Range("Ai:Aj").Value
当然,从第二行代码开始其中的i,j就不当他是变量了,就当是个示意符。不知道这样理解对不对,里面有没有优先级别。
再次谢谢hehex!我想我以后会用了。

TA的精华主题

TA的得分主题

发表于 2012-12-20 14:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
slsl2009cn 发表于 2012-12-19 15:28
看到作者的回复很容易理解,在此想抱个大腿,呵呵。
想请教一下,range对象如何引用变量作为其参数。( ...

这个跟函数INDIRECT的参数形式是一样的

TA的精华主题

TA的得分主题

发表于 2012-12-20 14:58 | 显示全部楼层
本帖最后由 hehex 于 2012-12-20 15:06 编辑
slsl2009cn 发表于 2012-12-20 11:06
谢谢你的解释,我明白了。知道纠结在哪里了。我开始不明白的是range后面引用的是字符串,应该用双引号扩起 ...


Range("A" &i &":A" &j).Value
= Range("Ai" &":A" &j).Value
= Range("Ai" &":Aj").Value
=Range("Ai" &":Aj").Value
=Range("Ai:Aj").Value
看以上分解式,你的理解是不对的。i,j 是变量,任何时候都是变量,所以它们不能被"" 引起来否则就错了。
= Range("Ai" &":Aj").Value  一定是错的,因为它是Ai 列到 Aj 列。
比如i=1
Range("A"&i)=Range("A1")
不要纠结于外面的Range 我们先看里面, "A" 是字符串这没错,那要想表示字符串"A1",常量的方法是"A1",
但是如果要用"A" 和变量i 来表示,就不能是字符串"Ai",因为"Ai"不等于"A1"。
那么应该怎样表示呢: 应该是 "A" & i
这里就要讲到& 的作用了,i 是数字型的变量,里面装的是数字1,& 号会把i 取出来转换成字符串型,然后和
前面的部分连接起来,"A"&i 就成了"A1"。
& 有两个作用,第一是连接,把前后2个字符串连起来。
第二如果& 后面是变量,而且如果变量类型不是字符串型,那么& 会把该变量的值先转换成字符串,然后再和前面连接起来。

任何时候都不能把变量""引起来,那样变量就变成了变量名的字符串,就没有访问到变量里的值了。

所以我在上一篇帖子让你去看VBA 的字符串处理和& 符号的知识。就如我在上面所说,你如果理解了,应该自己能找出上列的分解式的错误了。
最后做个伪代码的练习看看是否是真理解了
i=1
j=10
Range("A" & i & ": A" & j)
请告诉我这个区域是什么
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 08:57 , Processed in 0.043862 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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