ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5819|回复: 5

[求助] 名称与存在的模块,工程或对象冲突

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-5-16 14:35 | 显示全部楼层 |阅读模式
各位师兄师姐, 本人为初学者, 在本网站找了一些例子来学, 但遇到如题的问题,勾选MS DAO3.6 Object Library 时出错:  请问如何解决. 上传附件. 谢谢.
名称与存在的模块,工程或对象冲突.JPG

物料信息查询示例.rar

35.52 KB, 下载次数: 17

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-16 14:37 | 显示全部楼层
Private Sub commandsearch_Click()
On Error GoTo Err_commandsearch_Click

    Dim strWhere As String  '定义条件字符串
   
    strWhere = "" '设定初始值-空字符串
   
    '判断【书名】条件是否有输入的值
    If Not IsNull(Me.材料编码) Then
        '有输入
        strWhere = strWhere & "([材料编码] like '*" & Me.材料编码 & "*') AND "
    End If
   
    '判断【类别】条件是否有输入的值
    If Not IsNull(Me.类别) Then
        '有输入
        strWhere = strWhere & "([类别] like '" & Me.类别 & "') AND "
    End If

    '判断【作者】条件是否有输入的值
    If Not IsNull(Me.颜色材质) Then
        '有输入
        strWhere = strWhere & "([颜色材质] like '*" & Me.颜色材质 & "*') AND "
    End If

    '判断【出版社】条件是否有输入的值
    If Not IsNull(Me.规格) Then
        '有输入
        strWhere = strWhere & "([规格] like '" & Me.规格 & "') AND "
    End If

    '判断【单价】条件是否有输入的值,由于有【单价开始】【单价截止】两个文本框
    '所以要分开来考虑
    If Not IsNull(Me.单价开始) Then
        '【单价开始】有输入
        strWhere = strWhere & "([单价] >= " & Me.单价开始 & ") AND "
    End If
    If Not IsNull(Me.单价截止) Then
        '【单价截止】有输入
        strWhere = strWhere & "([单价] <= " & Me.单价截止 & ") AND "
    End If
   
   

   
    '如果输入了条件,那么strWhere的最后肯定有" AND ",这是我们不需要的,
    '要用LEFT函数截掉这5个字符。
    If Len(strWhere) > 0 Then
        '有输入条件
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If
   
    '先在立即窗口显示一下strWhere的值,代码调试完成后可以取消下一句
    Debug.Print strWhere
   
    '让子窗体应用窗体查询
    Me.物料信息表查询子窗体.Form.Filter = strWhere
    Me.物料信息表查询子窗体.Form.FilterOn = True
   
    '在子窗体筛选后要运行一下自编子程序CheckSubformCount()
    Call CheckSubformCount


Exit_commandsearch_Click:
    Exit Sub

Err_commandsearch_Click:
    MsgBox Err.Description
    Resume Exit_commandsearch_Click
   
End Sub

Private Sub cmd导出_Click()
On Error GoTo Err_cmd导出_Click
'刘小军(Alex) 2003-5-22
'这里将使用DAO来改变查询的SQL语句,必须先在“工具”→“引用”中选择
'Microsoft DAO 3.6 Object Library.
'================================

    Dim qdf As DAO.QueryDef 'qdf被定义为一个查询定义对象
    Dim strWhere, strSQL As String
   
    strWhere = Me.物料信息表查询子窗体.Form.Filter
    If strWhere = "" Then
        '没有条件
        strSQL = "SELECT * FROM [物料信息表查询]"
    Else
        '有条件
        strSQL = "SELECT * FROM [物料信息表查询] WHERE " & strWhere
    End If
   
    Set qdf = CurrentDb.QueryDefs("物料信息查询结果")
    qdf.SQL = strSQL
    qdf.Close
   
    Set qdf = Nothing
   
    DoCmd.OutputTo acOutputQuery, "物料信息查询结果", acFormatXLS, , True

   
Exit_cmd导出_Click:
    Exit Sub

Err_cmd导出_Click:
    MsgBox Err.Description
    Resume Exit_cmd导出_Click
   
End Sub

Private Sub CommandClear_Click()
On Error GoTo Err_CommandClear_Click
'刘小军(Alex) 2003-5-22
'这里将使用FOR EACH CONTROL的方法来清除控件的值
'这在控件比较多的时候非常有用。
'================================

    Dim ctl As Control
   
    For Each ctl In Me.Controls
   
        '根据ctl的控件类型来选择
        Select Case ctl.ControlType
            Case acTextBox '是文本框,要清空(注意,子窗体下面还有两个锁定的文本框不能赋值)
                If ctl.Locked = False Then ctl.Value = Null
               
            Case acComboBox '是组合框,也要清空
                ctl.Value = Null
            '其它类型的控件不处理
        
        End Select
    Next
   
    '取消子窗体的筛选
    Me.物料信息表查询子窗体.Form.Filter = ""
    Me.物料信息表查询子窗体.Form.FilterOn = False
   
    '在子窗体取消筛选后要运行一下自编子程序CheckSubformCount()
    Call CheckSubformCount

Exit_CommandClear_Click:
    Exit Sub

Err_CommandClear_Click:
    MsgBox Err.Description
    Resume Exit_CommandClear_Click
   
End Sub

Private Sub cmd预览报表_Click()
On Error GoTo Err_cmd预览报表_Click

    Dim stDocName, strWhere As String

    stDocName = "物料信息表查询"
    strWhere = Me.物料信息表查询子窗体.Form.Filter

    '在打开报表的同时把子窗体的筛选条件字符串也传递给报表,
    '这样地话报表也会显示和子窗体相同的记录。
    DoCmd.OpenReport stDocName, acPreview, , strWhere
   
Exit_cmd预览报表_Click:
    Exit Sub

Err_cmd预览报表_Click:
    MsgBox Err.Description
    Resume Exit_cmd预览报表_Click
   
End Sub


Private Sub CheckSubformCount()

'这是一个自编子程序,专门用来检查子窗体上的记录数,
'以便修改主窗体上的“计数”和“合计”的控件来源,
'以防止出现“#错误”。
'================================

    If Me.物料信息表查询子窗体.Form.Recordset.RecordCount > 0 Then
        '子窗体的记录数>0
        Me.计数.ControlSource = "=[物料信息表查询子窗体].[Form].[txt计数]"
        Me.平均单价.ControlSource = "=[物料信息表查询子窗体].[Form].[txt平均单价]"
    Else
        '子窗体的记录数=0
        Me.计数.ControlSource = "=0"
        Me.平均单价.ControlSource = "=0"
    End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-5-18 14:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有哪位师兄师姐能帮帮忙看看呢? 谢谢.

TA的精华主题

TA的得分主题

发表于 2012-3-3 19:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-3 21:38 | 显示全部楼层
因为你的是在Office2007/2010里做的,Access2007/2010 默认引用了Microsoft Office 14.0 Access database engine Object Library 不再需要引用MS DAO3.6 Object Library 了,如果你再引用MS DAO3.6 Object Library ,就会报冲突.
刘小军前辈做例子时,还没有出Office2007/2010呢.

TA的精华主题

TA的得分主题

发表于 2012-3-3 21:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
另外,你的库导出时出错是因为你VBA中引用的查询名是"物料信息查询结果",而其实你建的查询名是"物料信息表查询结果",呵呵...有一字之差.
不管你改哪里,改统一就可以了.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 14:03 , Processed in 0.022412 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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