|
本帖最后由 wbzxz 于 2011-4-23 22:19 编辑
Intersect方法是application的一个方法,以下是帮助的说明
Application.Intersect 方法
返回一个 Range 对象,该对象表示两个或多个区域重叠的矩形区域。
语法
表达式.Intersect(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15,
Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)
表达式 一个代表 Application 对象的变量。
参数说明:前两个参数必选,后面的参数都是可选。
当时学这个方法的时候,理解起来没有什么难度,但是一直不知道什么地方要用到这个方法,后来一次偶然机会,发现在事件求和的时候可以用到这个方法,仔细想想,好像兰版在哪里用过,记不清楚啦,嘿嘿。
很简单的一个用法,抛砖引玉,大家如果碰到类似问题,我想用这个方法应该是一个不错的解决方案。
代码介绍:
(1)下面这个例子主要是想实现在B列中数量发生变化的时候,合计自动发生变化。
(2)解决这个问题我想到了用change事件,也就是B列单元格内容变化的时候,就重新求一次和;
(3)由于B列单元格的变化有单个单元格值的改变,多个单元格值的同时改变,删除整行引起B列单元格变化,插入、赋值、剪切等情况都会引起B列单元格值的改变,该如何进行判断呢???
(4)在这个时候用Intersect方法应该最合适,用Intersect方法得到目标单元格Target与B列的交集,如果得到的交集不为空,那B列单元格肯定发生了变化,无论怎样,重新求和一次吧;如果为空,肯定没有发生变化,不用重新求和;
思路非常简单,大家看一下代码
- Option Explicit
- Private Sub Worksheet_Change(ByVal Target As Range)
- Dim lSumRow As Long '定义一个变量存放合计这一行的行数
-
- If Not Application.Intersect(Columns("B"), Target) Is Nothing Then '这里就是关键所在,用Intersect方法进行判断
- lSumRow = Cells.Find("合计").Row '通过find方法查找出"合计"所在行
- Application.EnableEvents = False '禁用事件
- Cells(lSumRow, 2) = Application.WorksheetFunction.Sum(Range("B2:B" & lSumRow - 1)) '用了WorksheetFunction对象的Sum方法,对B列合计以上部分求和
- Application.EnableEvents = True '启用事件
- End If
-
- End Sub
复制代码
(1)这里的关键语句就是:
Not Application.Intersect(Columns("B"), Target) Is Nothing
这条语句返回true 或者 flase
只要Application.Intersect(Columns("B"), Target)有交集,不返回nothing,那么Not Application.Intersect(Columns("B"), Target) 必然是nothing,从而得到true,执行条件语句内容;
(2)Application.EnableEvents = False的说明:
因为给cells(lsumRow,2)赋值时,相当于B列的单元格发生了变化,那么必然重新激活change事件,这样就会引起死循环,所以此处禁用事件,也就是给cells(lsumRow,2)赋值时,任何事件都不会起作用;
(3)Application.EnableEvents = True,每次禁用时间后,记住要及时启用事件。
Intersect方法的一个用途.rar
(8.94 KB, 下载次数: 153)
|
评分
-
查看全部评分
|