Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3296|回复: 5

[已解决]VBA一次选定区域偶数行的问题

[复制链接]
发表于 2012-5-27 23:04 | 显示全部楼层 |阅读模式
本帖最后由 隐身 于 2012-5-28 08:22 编辑

兰校长的VBA80集第十一集提到的代码如下
  1.     Sub dd() 'union示例
  2.       Dim rg As Range, x As Integer
  3.       For x = 2 To 10 Step 2
  4.         If x = 2 Then Set rg = Cells(x, 1)
  5.         Set rg = Union(rg, Cells(x, 1))
  6.       Next x
  7.       rg.Select
  8.     End Sub
复制代码


我不明白的是为何要用If x = 2 Then Set rg = Cells(x, 1)这个判断,去掉为何不行。希望各位能提供帮助,解释一下。


通过2楼和3楼的简单提示,自己稍微有点理解了:
union至少要有两个参数,也就是当x=2的时候,rg会为空,union(rg,cells(2,1))只有cells(2,1)一个参数,因为rg初始值是空的,出现错误。
要union至少有两个参数,必须让rg初始值不为空。rg赋值后,union(cells(2,1),cells(2,1))是符合union语法的,不会报错。

如果不使用IF判断,我们可以在前面对rg赋一个初始值,如下代码
  1. Sub dd2() 'union示例
  2.     Dim rg As Range, x As Integer
  3.     Set rg = Cells(2, 1)
  4.     For x = 2 To 10 Step 2
  5.         Set rg = Union(rg, Cells(x, 1))
  6.     Next x
  7.     rg.Select
  8. End Sub
复制代码



最佳答案
2012-5-27 23:10
他是为了后面union 不出错
   因为union的第一个参数必须不为空,否则就会运行错误。所以要先给rg赋个值
发表于 2012-5-27 23:08 | 显示全部楼层
不要这句的话会出错,因为rg没有赋值
回复

使用道具 举报

发表于 2012-5-27 23:10 | 显示全部楼层    本楼为最佳答案   
他是为了后面union 不出错
   因为union的第一个参数必须不为空,否则就会运行错误。所以要先给rg赋个值
回复

使用道具 举报

发表于 2012-5-28 01:40 | 显示全部楼层
  1. Sub dd2() 'union示例
  2.     Dim rg As Range, x As Integer
  3.     Set rg = Cells(1, 1)
  4.     For x = 1 To 10 Step 2
  5.         Set rg = Union(rg, Cells(x, 1))
  6.     Next x
  7.     rg.Select
  8. End Sub
复制代码
奇数行应该是1呀,怎么成了2了?
回复

使用道具 举报

 楼主| 发表于 2012-5-28 08:22 | 显示全部楼层
fjmxwrs 发表于 2012-5-28 01:40
奇数行应该是1呀,怎么成了2了?

额,说错,是偶数行
回复

使用道具 举报

发表于 2012-5-28 08:36 | 显示全部楼层
                  
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-23 18:25 , Processed in 0.260289 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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