Excel精英培训网

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

[已解决]请帮忙分析一下为什么按钮命令执行后无变化

[复制链接]
发表于 2013-10-26 12:54 | 显示全部楼层 |阅读模式
本帖最后由 xzwdk 于 2013-10-28 11:42 编辑

首先感谢xdragon老师昨天给我耐心的指导。
根据xdragon老师的指导案例,我进行了对比修改。目的是想查询输出结果是由下拉框里面的哪个条件产生的。
现在我想用按钮指令替代Worksheet_Change指令,如附件。应该如何修改按钮指令里面的程序,来实现Worksheet_Change指令执行的相同结果?
谢谢!


最佳答案
2013-10-26 14:18
改变F5单元内容后,点按钮。
Dim d2, d3, l3
Private Sub ComboBox1_Change()
    [e5] = d2(ComboBox1.Value)
End Sub

Private Sub CommandButton1_Click()
    Application.EnableEvents = False
    Dim arr, i&, m&
    arr = [a22:b32]
    Set d2 = CreateObject("Scripting.Dictionary")
    Set d3 = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr)
        If Not d2.exists(arr(i, 1)) Then
            d2(arr(i, 1)) = arr(i, 2)
            m = m + 1
            d3(arr(i, 2)) = m
        End If
    Next
    ComboBox1.List() = d2.keys
    l3 = Sheet1.Range("F5")
    ComboBox1.ListIndex = d3(l3) - 1
    Application.EnableEvents = True
End Sub

查询2.rar

14 KB, 下载次数: 3

发表于 2013-10-26 14:13 | 显示全部楼层
你那Worksheet_Change整段宏要清除掉啊!
另外这句语句应改为
[e5] = d2(ComboBox1.Value)
回复

使用道具 举报

发表于 2013-10-26 14:18 | 显示全部楼层    本楼为最佳答案   
改变F5单元内容后,点按钮。
Dim d2, d3, l3
Private Sub ComboBox1_Change()
    [e5] = d2(ComboBox1.Value)
End Sub

Private Sub CommandButton1_Click()
    Application.EnableEvents = False
    Dim arr, i&, m&
    arr = [a22:b32]
    Set d2 = CreateObject("Scripting.Dictionary")
    Set d3 = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr)
        If Not d2.exists(arr(i, 1)) Then
            d2(arr(i, 1)) = arr(i, 2)
            m = m + 1
            d3(arr(i, 2)) = m
        End If
    Next
    ComboBox1.List() = d2.keys
    l3 = Sheet1.Range("F5")
    ComboBox1.ListIndex = d3(l3) - 1
    Application.EnableEvents = True
End Sub
回复

使用道具 举报

 楼主| 发表于 2013-10-26 14:44 | 显示全部楼层
zjdh 发表于 2013-10-26 14:18
改变F5单元内容后,点按钮。
Dim d2, d3, l3
Private Sub ComboBox1_Change()

谢谢老师的指导。看来是我太粗心了。
我把生成List的功能放到模块里面去了,如附件,可是点击下菜单后确报错了。并且将这一句[e5] = d2(ComboBox1.Value)禁止后,发现下拉框也无法载入List。这是为什么呢?

(2) 查询2.rar

11.91 KB, 下载次数: 6

回复

使用道具 举报

发表于 2013-10-26 16:13 | 显示全部楼层
l3 = Sheet1.Range("F5")
把变量l3限定为F5的值,然后在TEST过程里,用
Sheet1.ComboBox1.ListIndex = d3(l3) - 1
把下拉列表选择的值限定为F5对应的选项,造成下拉框无法选择
回复

使用道具 举报

发表于 2013-10-26 16:14 | 显示全部楼层
查询2.rar (12.85 KB, 下载次数: 5)
回复

使用道具 举报

 楼主| 发表于 2013-10-27 18:48 | 显示全部楼层
zjdh 发表于 2013-10-26 16:14

谢谢老师。我感觉您的这次附件内容和3楼的结果是一样的,请确认一下附件是否上传错了?谢谢
回复

使用道具 举报

发表于 2013-10-28 08:19 | 显示全部楼层
我不知你的新要求是什么,请重新描述一下。
回复

使用道具 举报

 楼主| 发表于 2013-10-28 08:28 | 显示全部楼层
zjdh 发表于 2013-10-28 08:19
我不知你的新要求是什么,请重新描述一下。

请老师分析一下我在四楼的附件,谢谢。
回复

使用道具 举报

发表于 2013-10-28 08:56 | 显示全部楼层
xzwdk 发表于 2013-10-28 08:28
请老师分析一下我在四楼的附件,谢谢。

你的宏颠来倒去的,看不懂你的要求,你用文字描述吧!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 00:28 , Processed in 0.388015 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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