Private Sub Worksheet_Change事件碰到的问题

之前动态表格的更新问题我都是加了一个按钮来触发更新的事件,简洁却不美观。老大跟我说一定要解决,感谢崔兄之前告诉了active事件。后来查阅资料我又发现了有change事件!这个似乎更好用,通过更崔兄讨论确定了用会计年度,会计期间,公司代码这三个变量作为更新查询的条件。

在写代码中我又发现了两个问题,第一个问题是query里有7个查询,你怎么知道那一个query最后更新。这个问题还是很好解决的,我写了一段代码测试了下,如下:

If Target.Address = "$CG$1" Or Target.Address = "$CH$9" Then
        MsgBox "query 7"
    ElseIf Target.Address = "$A$1" Or Target.Address = "$B$9" Then
        MsgBox "query 1"
    ElseIf Target.Address = "$Q$1" Or Target.Address = "$R$9" Then
        MsgBox "query 2"
    ElseIf Target.Address = "$AK$1" Or Target.Address = "$AK$9" Then
        MsgBox "query 3"
    ElseIf Target.Address = "$AX$1" Or Target.Address = "$AY$9" Then
        MsgBox "query 4"
    ElseIf Target.Address = "$BJ$1" Or Target.Address = "$BK$9" Then
        MsgBox "query 5"
    ElseIf Target.Address = "$BW$1" Or Target.Address = "$BX$9" Then
        MsgBox "query 6"
    End If

之前我还以为最后更新的会是最后插入的查询,不过最后通过代码居然发现是最先插入的查询最后更新!而且每次的测试结果都一样。从而确定了用第一个查询的单元格作为检查更新的单元格。

第二个问题就不那么明显了,代码每次会在这里报错:

'选中要删除的区间C_deltePlace,用序号来判断
        While Worksheets(p_ContentSheet).Cells(p_conRows, 2).Value <> "" '根据空行判断是否删除
            '选中删除
             Worksheets(p_ContentSheet).Cells(p_conRows, 2).Select
            Selection.EntireRow.Delete
        Wend

我还以为不能将代码封装在sub里,但是我将代码复制到change的sub里也一样。后来我将selcet去掉就可以完美执行了!

While Worksheets(p_ContentSheet).Cells(p_conRows, 2).Value <> "" '根据空行判断是否删除
        '选中删除
         Worksheets(p_ContentSheet).Cells(p_conRows, 2).EntireRow.Delete
    Wend

不加selcet就可以了,怪不得提示range的select方法无效。对一门不熟悉的语言就是这样,会碰到这样那样的错误,解决问题必须得仔细推敲其错误的提示。

ps:vba太强大了,一定要把excel 2007 programmer reference看完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值