设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2842|回复: 6
打印 上一主题 下一主题

[模块/函数] 求助:调用通用对话框出错

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2016-6-6 15:43:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Superleistung 于 2016-6-6 16:08 编辑
  1. Public Function gFuncInputFromExcelcomDlg(ByVal strTableName As String)
  2. On Error GoTo Err_Show
  3.     Dim strPath As String
  4.     Dim strSQL As String
  5.     Dim objDia As CommonDialog
  6.     Set objDia = comDialog.Object
  7.     objDia.DialogTitle = "打开"
  8.     objDia.Filter = "Excel文件(*.xlsx)|*.xls"   '指定文件格式
  9.     objDia.FilterIndex = 1  '指定默认过滤器
  10.     objDia.Flags = cdlOFNOverwritePrompt    '提醒重名
  11.     objDia.ShowOpen
  12.     strSQL = "Insert INTO [" & strTableName & "]" & _
  13.             "Select * FROM[Excel 12.0 XML:DATABASE=" & strPath & _
  14.             "].[" & strTableName & "$]"
  15.     strPath = objDia.FileName   '将用户指定的地址赋值给变量
  16.     If strPath = "" Then Exit Function
  17.     DoCmd.RunSQL strSQL
  18. Err_Show:
  19.     MsgBox Err.Description
  20.     Resume Exit_Function
  21. Exit_Function:
  22.     Exit Function
  23. End Function
复制代码

这里调用了Mircosoft Common Dialog
每次调试总是提示:
Set objDia = comDialog.Object 这句变量未定义

而同样的代码,不封装在函数里,直接放在Sub下就没问题。。。真心不懂

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
 楼主| 发表于 2016-6-6 15:46:40 | 只看该作者
本帖最后由 Superleistung 于 2016-6-6 16:16 编辑

虽然不是大问题,放Sub里也一样跑。但总觉得别扭,而且每段功能都这样用的话,代码太繁琐。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
发表于 2016-6-6 17:16:12 | 只看该作者
Superleistung 发表于 2016-6-6 15:46
虽然不是大问题,放Sub里也一样跑。但总觉得别扭,而且每段功能都这样用的话,代码太繁琐。

用FileDialog对象试试
4#
发表于 2016-6-7 09:46:44 | 只看该作者
印象中这个控件是没有单击事件,甚至没有标签什么的,很奇怪你是怎么使用的。enter事件?还是通过按钮来调用?
如果通过按钮来调用,不如使用FileDialog。
实话说,我对这个控件无感。

点击这里给我发消息

5#
 楼主| 发表于 2016-6-7 10:13:04 | 只看该作者
本帖最后由 Superleistung 于 2016-6-7 10:23 编辑
roych 发表于 2016-6-7 09:46
印象中这个控件是没有单击事件,甚至没有标签什么的,很奇怪你是怎么使用的。enter事件?还是通过按钮来调 ...

我是在单击按钮中这样调用的,目的是获取导入文件路径,见下面代码
我先开始是一个个窗体敲,后来烦了就把清空表中数据的操作先封装了个函数gFuncDeleteRecordAll()
然后打算把后面的过程也封装起来,结果如主题所示——未能成功,于是还是需要我逐个在每个窗体中敲
为了不累死,我还是先尝试下Filedialog方法吧
  1. '由Excel导入
  2. Private Sub cmdNewMany_Click()
  3. On Error GoTo ERR_Show
  4.     gFuncDeleteRecordAll msSource
  5.     Me.Requery

  6. '过程:用Common Dialog 获取文件地址并导入
  7.     Dim objDia As CommonDialog
  8.     Dim strPath As String
  9.     Set objDia = comDialog.Object
  10.    
  11.     objDia.DialogTitle = "打开"
  12.     objDia.Filter = "Excel文件(*.xlsx)|*.xlsx" '多种格式用分号合并
  13.     objDia.FilterIndex = 1 '指定默认过滤器
  14.     objDia.Flags = cdlOFNOverwritePrompt '提醒重名
  15.     objDia.ShowOpen
  16.     strPath = objDia.FileName
  17.    
  18.     If strPath = "" Then Exit Sub
  19.     DoCmd.RunSQL "Insert INTO [" & msSource & "]" & " Select * FROM [Excel 12.0 XML;DATABASE=" & strPath & "].[tblBOM$]"
  20.    
  21.     Me.frmSub.Form.Requery
  22.    
  23. Exit_Sub:
  24.     Exit Sub

  25. ERR_Show:
  26.     MsgBox Err.Description
  27.     Resume Exit_Sub
  28.    
  29. End Sub
复制代码

点击这里给我发消息

6#
 楼主| 发表于 2016-6-7 10:22:07 | 只看该作者
todaynew 发表于 2016-6-6 17:16
用FileDialog对象试试

好的,我先试试
7#
发表于 2016-6-7 14:05:58 | 只看该作者
Superleistung 发表于 2016-6-7 10:13
我是在单击按钮中这样调用的,目的是获取导入文件路径,见下面代码
我先开始是一个个窗体敲,后来烦了就 ...

如果是在Excel上使用,有一个GetOpenFileName函数可以轻易弹出一个对话框;如果代码是在Access则建议使用FileDialog(须引用Office 15.0 library)。附上GetOpenFileName的用法:
  1. Sub t()
  2.     Dim arr()
  3.     Dim i As Long
  4.     arr = Application.GetOpenFilename("excel文件(*.xlsx),*.xlsx", , "请选择文件", "打开", True)
  5.     For i = LBound(arr) To UBound(arr)
  6.         If Len(arr(i)) > 0 Then
  7.             Debug.Print arr(i)
  8.         End If
  9.     Next
  10. End Sub
复制代码
这里最后一个参数设置为true是允许多选,该参数可忽略(默认为false)。

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

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-27 12:46 , Processed in 0.171081 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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