Office中国论坛/Access中国论坛

标题: 求助:调用通用对话框出错 [打印本页]

作者: Superleistung    时间: 2016-6-6 15:43
标题: 求助:调用通用对话框出错
本帖最后由 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下就没问题。。。真心不懂


作者: Superleistung    时间: 2016-6-6 15:46
本帖最后由 Superleistung 于 2016-6-6 16:16 编辑

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


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

用FileDialog对象试试
作者: roych    时间: 2016-6-7 09:46
印象中这个控件是没有单击事件,甚至没有标签什么的,很奇怪你是怎么使用的。enter事件?还是通过按钮来调用?
如果通过按钮来调用,不如使用FileDialog。
实话说,我对这个控件无感。
作者: Superleistung    时间: 2016-6-7 10:13
本帖最后由 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
复制代码

作者: Superleistung    时间: 2016-6-7 10:22
todaynew 发表于 2016-6-6 17:16
用FileDialog对象试试

好的,我先试试
作者: roych    时间: 2016-6-7 14:05
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)。






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3