Excel精英培训网

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

[已解决]为什么触发事件的第二个假设条件无效?

[复制链接]
发表于 2016-4-11 12:06 | 显示全部楼层 |阅读模式
本帖最后由 lingyuncelia1 于 2016-4-11 16:50 编辑

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$1" Then
        Set Rng = Sheets("数据库").Columns(1).Find(Target.Value, lookat:=xlWhole)
        If Not Rng Is Nothing Then
            Set c = [C2].MergeArea
            Range("B2") = Rng.Offset(, 1)
            Range("B3") = Rng.Offset(, 2)
            Range("B4") = Rng.Offset(, 3)
            For Each shp In ActiveSheet.Shapes    '删除图片
                If shp.Type = msoAutoShape Then shp.Delete
            Next
            Set PC = Range("C2").MergeArea
            Rng.Offset(, 4).Copy PC       '复制图片
            For Each SP In Shapes         '调整大小
                With SP
                    .Height = PC.Height
                    .Width = PC.Width
                End With
            Next
        End If
    [f1].Select
    End If
   
    If Target.Address = "$b$2" Then
        Set Rng2 = Sheets("数据库").Columns(2).Find(Target.Value, lookat:=xlWhole)
        If Not Rng2 Is Nothing Then
            Set c = [C2].MergeArea
            Range("f1") = Rng2.Offset(, -1)
            Range("B3") = Rng2.Offset(, 1)
            Range("B4") = Rng2.Offset(, 2)
            For Each shp In ActiveSheet.Shapes    '删除图片
                If shp.Type = msoAutoShape Then shp.Delete
            Next
            Set PC = Range("C2").MergeArea
            Rng2.Offset(, 3).Copy PC       '复制图片
            For Each SP In Shapes         '调整大小
                With SP
                    .Height = PC.Height
                    .Width = PC.Width
                End With
            Next
        End If
    End If
End Sub

最佳答案
2016-4-11 16:13
lingyuncelia1 发表于 2016-4-11 14:34
改为大写后,改变F1的值,出现上图,按“调试”键,出现下图:

循环调用的原因,最终导致资源耗尽.
在if语句下面加上语句关闭事件响应,endif前再重新开启事件响应. 类似下面这样.
        If Not Rng2 Is Nothing Then
            Application.EnableEvents = False
'...
            Application.EnableEvents = True
        End If

复制图片.zip

149.19 KB, 下载次数: 8

发表于 2016-4-11 12:09 | 显示全部楼层
回复

使用道具 举报

发表于 2016-4-11 12:17 | 显示全部楼层
Address属性,返回的是字符型,字符型要分区大小写的
单元格地址R1C1样式引用时,列标识要大写。

评分

参与人数 1 +3 收起 理由
lingyuncelia1 + 3 赞一个

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-4-11 14:34 | 显示全部楼层
Zipall 发表于 2016-4-11 12:09
B要大写

捕获2.JPG
改为大写后,改变F1的值,出现上图,按“调试”键,出现下图:
捕获1.JPG
回复

使用道具 举报

 楼主| 发表于 2016-4-11 14:34 | 显示全部楼层
那么的帅 发表于 2016-4-11 12:17
Address属性,返回的是字符型,字符型要分区大小写的
单元格地址R1C1样式引用时,列标识要大写。

捕获2.JPG
改为大写后,改变F1的值,出现上图,按“调试”键,出现下图:
捕获1.JPG
回复

使用道具 举报

发表于 2016-4-11 16:13 | 显示全部楼层    本楼为最佳答案   
lingyuncelia1 发表于 2016-4-11 14:34
改为大写后,改变F1的值,出现上图,按“调试”键,出现下图:

循环调用的原因,最终导致资源耗尽.
在if语句下面加上语句关闭事件响应,endif前再重新开启事件响应. 类似下面这样.
        If Not Rng2 Is Nothing Then
            Application.EnableEvents = False
'...
            Application.EnableEvents = True
        End If

评分

参与人数 1 +3 收起 理由
lingyuncelia1 + 3 很给力

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 14:00 , Processed in 0.416670 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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