Excel精英培训网

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

[已解决]ComboBox的一个问题

[复制链接]
发表于 2013-6-26 16:20 | 显示全部楼层 |阅读模式
ComboBox_DropButtonClick事件中,用ComboBox.AddItem增加了若干选项。调试时发现再次点击ComboBox时,多了重复选项,于是加了ComboBox.Clear,但发现我所选择的项也被清掉了,原因是ComboBox在下拉列收回时也触发了ComboBox_DropButtonClick。这个要怎么解决?问题比较菜鸟,还望大家赐教。谢谢了!
最佳答案
2013-6-26 17:20
加一个判断
If rs.RecordCount <> 0 and Me.ComboBox1.ListCount=0 Then

    Do While Not rs.EOF
        ComboBox1.AddItem rs.Fields("Batchno")
        rs.MoveNext
    Loop
End If

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-6-26 16:30 | 显示全部楼层
为什么要用这个事件呢?上传一个表吧
回复

使用道具 举报

 楼主| 发表于 2013-6-26 16:43 | 显示全部楼层
妞叫七七 发表于 2013-6-26 16:30
为什么要用这个事件呢?上传一个表吧

那该用什么事件呢?
回复

使用道具 举报

发表于 2013-6-26 17:00 | 显示全部楼层
添加下拉框的内容,应该是获得焦点或窗体加载事件中进行的。。
回复

使用道具 举报

 楼主| 发表于 2013-6-26 17:09 | 显示全部楼层
恩 看来是我没说清楚 下面是代码:
回复

使用道具 举报

 楼主| 发表于 2013-6-26 17:10 | 显示全部楼层
Private Sub ComboBox1_DropButtonClick()

Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用
Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表
Dim strCn As String, strSQL As String '字符串变量
Dim dt1 As Date, dt2 As Date
Dim mydata As String, mytableH As String, mytableP As String, DataSource As String

dt1 = DTPicker1.Value
dt2 = DTPicker2.Value


'连接数据库
mydata = "recipe_db"
mytableH = "new_report_HeadInfo"
mytableP = "new_report_Param"
DataSource = ThisWorkbook.Sheets("HomePage").Range("DataSource").Value

strCn = "Provider = SQLOLEDB.1;" & "Password = recipe_db_user;" & "User ID = recipe_db_user;" _
        & "Data Source =" & DataSource & "; Initial Catalog = " & mydata
            
On Error Resume Next
cn.Open strCn
On Error GoTo 0

If cn.State = adStateOpen Then

Else
    MsgBox "未能成功连接SQL数据库" & mydata & ",请检查!", vbCritical, "数据保存"
    Exit Sub
End If


strSQL = "select DISTINCT Batchno from " & mytableH & " where Date>='" & dt1 & "'" & "and Date<='" & dt2 & "'"

rs.Open strSQL, cn, 0, 1
On Error Resume Next
rs.MoveFirst
If rs.RecordCount <> 0 Then

    Do While Not rs.EOF
        ComboBox1.AddItem rs.Fields("Batchno")
        rs.MoveNext
    Loop
End If

      
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub
回复

使用道具 举报

发表于 2013-6-26 17:20 | 显示全部楼层    本楼为最佳答案   
加一个判断
If rs.RecordCount <> 0 and Me.ComboBox1.ListCount=0 Then

    Do While Not rs.EOF
        ComboBox1.AddItem rs.Fields("Batchno")
        rs.MoveNext
    Loop
End If

回复

使用道具 举报

 楼主| 发表于 2013-6-28 09:42 | 显示全部楼层
妞叫七七 发表于 2013-6-26 17:20
加一个判断
If rs.RecordCount  0 and Me.ComboBox1.ListCount=0 Then

这个法子可行,多谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 12:55 , Processed in 0.210523 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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