最新WPS办公软件学习教程_免费企业办公软件下载_金山WPS Office官网论坛

 找回密码
 
查看: 12762|回复: 25

[VBA/VBS教程] 【VBA For ET 教材连载系列】二十四

[复制链接]

397

主题

72

听众

3057

积分

测试体验团员

Rank: 14Rank: 14Rank: 14Rank: 14

该用户从未签到

金币
3
威望
5028
帖子
2011
精华
11

特殊贡献奖 最佳教程奖 活跃会员奖

发表于 2009-7-21 14:06 |显示全部楼层
分享到: 新浪微博 腾讯微博
      Offset属性用于根据偏移量引用区域。它与工作表函数Offset有相似处也有差异。工作表函数Offset有五个参数,可以根据参照对象调整偏移量及其高度与宽度,而VBA中的Offset属性则只有三个参数,仅能引用一定偏移量的单元格,不能指定其新的高度与宽度。1 G# Z$ g& U2 e& o
      Range对象的Offset属性可以返回一个Range对象,代表位于指定单元格区域的一定的偏移量位置上的区域。其具体语法如下:+ ]. b% M( m6 D+ L4 f
      Range.Offset(RowOffset, ColumnOffset)4 r1 i3 d8 Q* L/ z7 M
      RowOffset表示行偏移量,ColumnOffset表示列偏移量。其两个参数均为可选参数,如果忽略参数量,其默认值为0,即引用原有的区域。0 [' M7 d( M- G( E
      以下语句均为合法的单元格引用:8 H9 @3 Q9 i9 D( i8 [
      [a1].Offset(2, 3)——表示相对于A1单元格向下偏移2行、向右偏移3列,即引用D3单元格
8 s( r& c* N* \, j0 l1 a* j& l5 ?      Range("D2").Offset(, 4)——表示相对于D2,行偏移为0列偏移为4,即引用H2单元格0 g/ H$ c9 S# N1 M( e2 j7 u
      VBA中的Offset与工作表函数Offset在高度与宽度上有差异。工作表函数中Offset有五个参数,后两个参数用于指定目标区域的高度与宽度,而VBA中的Offset属性则没有高度与宽度的参数,而是由其前置对象Range来决定。它的高度与宽度都与Range完全一致,例如:
$ z* ~/ |, u1 f, B$ ?; K' C      Range("D2:C3").Offset(1, 1)——表示相对于D2:C3区域向下偏移一行、向右偏移一列,且高度一宽度与D2:C3一致的区域D3:E4
6 q9 v$ k2 q& {, _0 U) m+ n/ ]      Range("D2:D10").Offset(, 4)——表示引用H2:H10,从原区域向右移动四列,高度与亮度一致
. B- ^% |& |4 W      Offset的参数也可以使用负数。如果RowOffset参数使用负数则表示向上偏移,而ColumnOffset参数使用负数则表示向右偏移。
2 v" b) {; D7 @      Range("D4:D10").Offset(-2, 4) ——表示引用H2:H8单元格,在原有区域基础上向上偏移两行! E, p, O% a) k( L9 N2 `! ^5 s* ]
      Cells(3, 4).Offset(-1, -2)——表示引用B2单元格,在原单元格D3基础上上移一行、左移两列
* y! z/ h4 K4 M) j2 w4 j3 `. w      Cells(3, 4).Offset(-1, -4)——列偏量太小,已超过Excel的边界,所以产生运行时错误* V9 W& U' K) \7 P$ w
      Offset的参数支持小数,VBA会自动将其四舍五入后再参数与运算。例如:% J/ P$ f4 Z" M& }) U0 w0 D; o
      Cells(3, 4).Offset(0.9, 2.4)——表示引用F4单元格,参数0.9当进位为1计算,而2.4舍位为2计算
# `3 H, w3 b0 l      还可以使用表达式做参数,列如:
; C9 I0 C/ X# O5 n      Range("F2").Offset(WorksheetFunction.Sum([C:C]), [a1] + 5)——目标区域由C列数据和及A1的值决定
; h1 u; ~5 P1 w5 y6 T9 a  v: G8 L      Offset在实际工作中应用极广,现举一个案例应用。
) [! z, y% G8 Y$ h: P& P3 k, b2 v1 B      对任何数据选区进行列合计。例如图24.1中,如果选择数据区域B2:E10,那么程序就对该对该区域的各行汇总,再对各列汇总,汇总结果放在F2:F10B11:F11区域。同时需要体现程序的通用性,即不管选择任何区域都可以实现对该对域的数值进行行与列的汇总。
% Z  f' y7 }9 y      利用Offset可以有效地处理本类问题,具体代码如下:
2 p( u& b- N% v' c0 V_________________________________________________________________! v% M& i- @4 U4 r8 P' Z
Sub 行列自动合计(), S7 |( o% x0 }3 q1 T  i
'先汇总各行的值
& f+ z" E6 S& X3 q- ^( O- D0 FFor i = 1 To Selection.Rows.Count/ t2 D* ]9 l( M9 Q
'1到总行数
! P  q' U. [) O2 _3 X% S. N
'利用Offset取得汇总数据的放置位置,即选区第一个单元格向右偏移选区的列数
0 N7 w' G% e1 f% C; k8 D
'合计区域也用Offset逐行偏量来获取,Resize的作用是重置为1行,否则会汇总其它行的数据

, X0 z; a  U, p. hSelection(1).Offset(i - 1, Selection.Columns.Count) = WorksheetFunction.Sum(Selection.Offset(i - 1).Resize(1))

3 q' Z$ i# c& wNext
1 J% z4 [7 q/ j  I, ?' \" \+ L; l2 b( g
'再汇总各列的值

# D6 y% q5 V3 F/ q8 {6 E5 yFor i = 1 To Selection.Columns.Count + 1 '1到总列数加1,因为需要对行的汇总数再进行汇总

2 f* |: I# ^8 CSelection(1).Offset(Selection.Rows.Count, i - 1) = WorksheetFunction.Sum(Selection.Offset(, i - 1).Resize(, 1))
. D, Y3 W$ Y4 s; L, {" {
Next
( H, X. A7 |  r- E1 G" f. {- M
End Sub: [- N3 I- t) D% n% Y/ G6 d
______________________________________________________________
" u1 E2 y5 |, \5 n  e# l1 }3 n9 \- p* L
      首先选择数据区或B2:E10,然后执行程序,计算结果见图24.1所示:/ p: f2 b) S4 H6 G) i
2 I: j( V% i" I6 k" n4 p7 q6 h
24.1 待汇总的生产数据
% V3 [5 ^  L# U  w- b2 `& g
# S  S& j8 r: }* J, }
* P6 h2 u$ d; G$ ?
- i) v( h& j; \8 \& ~: V  24.2 行列汇总结果- ~. J+ Q* R9 a5 Q
该程序以选区为基准,所以使用前需要选择正确的区域。7 }6 d5 W" r+ W! \4 i! @
OFFSET属性在引用区域时应用极广,读者可以自行测试,促使对其应用技巧掌握得更娴熟。
) x% ?% B+ a* w9 D' r$ k* p3 Y
- g) V; Q  U# A; _: d[ 本帖最后由 罗刚君 于 2009-7-21 14:11 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,

1109

主题

48

听众

1万

积分

测试体验团长

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

签到天数: 67 天

[LV.6]常住居民II

金币
2228
威望
33169
帖子
13495
精华
2

测试体验官 灯谜超人 世博会馆馆长 WPS粉丝团 最佳管理奖 勤奋版主奖 最佳教程奖 活跃会员奖 解答支持团 测试体验团 重阳节勋章 优秀会员奖 乐于助人奖

发表于 2009-7-21 21:26 |显示全部楼层
:( 有点儿跟不上脚步了!
WPS测试体验团欢迎您!
QQ群号:208253958 参与测试和体验WPS所有产品线的产品,包含稳定版本,内测版本,开发版,新功能日构建版本等,提交建议或BUG。
章程”、【报道
回复

使用道具 举报

0

主题

0

听众

312

积分

LV.4

Rank: 4

该用户从未签到

金币
6
威望
838
帖子
66
精华
0
发表于 2013-8-18 16:05 |显示全部楼层
学习学习。
回复

使用道具 举报

110

主题

18

听众

2万

积分

LV.17

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

签到天数: 1186 天

[LV.10]以坛为家III

金币
2075
威望
66962
帖子
4077
精华
0

优秀会员奖 活跃会员奖

发表于 2014-11-16 11:31 |显示全部楼层
看一下        
回复

使用道具 举报

110

主题

18

听众

2万

积分

LV.17

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

签到天数: 1186 天

[LV.10]以坛为家III

金币
2075
威望
66962
帖子
4077
精华
0

优秀会员奖 活跃会员奖

发表于 2015-3-29 08:46 |显示全部楼层
jsdbplt 发表于 2014-11-16 11:31 & L: o, L% x$ y# T* {  @2 \
看一下

5 g. U7 f3 @4 `' w& g& j, y" E参考一下               
回复

使用道具 举报

15

主题

28

听众

1万

积分

活动策划团员

Rank: 14Rank: 14Rank: 14Rank: 14

签到天数: 1191 天

[LV.10]以坛为家III

金币
3574
威望
40369
帖子
11242
精华
0

WPS粉丝团 活跃会员奖 活动策划团 测试体验团 重阳节勋章 优秀会员奖

发表于 2015-3-29 10:10 |显示全部楼层

8 `" n) h! V# E) Z/ ?! Q来学习教程!支持!
回复

使用道具 举报

0

主题

1

听众

7

积分

LV.1

Rank: 1

该用户从未签到

金币
3
威望
5
帖子
11
精华
0
发表于 2015-3-30 18:26 |显示全部楼层
还要回复多少????
回复

使用道具 举报

0

主题

1

听众

7

积分

LV.1

Rank: 1

该用户从未签到

金币
3
威望
5
帖子
11
精华
0
发表于 2015-3-30 18:27 |显示全部楼层
该怎么恢复呢???????
回复

使用道具 举报

0

主题

1

听众

7

积分

LV.1

Rank: 1

该用户从未签到

金币
3
威望
5
帖子
11
精华
0
发表于 2015-3-30 18:27 |显示全部楼层
是不是刚好十五个字呢》?
回复

使用道具 举报

1

主题

1

听众

2

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
3
帖子
0
精华
0
发表于 2015-3-31 09:15 |显示全部楼层
谢谢楼主的分享!
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 更多账号登录:

快速回帖:

fastpost

WPS论坛更新日志|WPS Office官方论坛     

GMT+8, 2017-11-25 09:47

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部