设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[宏/菜单/工具栏] 新版"文件对话框"

[复制链接]
跳转到指定楼层
1#
发表于 2010-12-4 10:18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
应一些网友要求(要求加入多行文件类型筛选),而对原来写的文件对话框进行了改版,现共享如下:

Function GetFileName(Optional ByVal DialogType As MsoFileDialogType = msoFileDialogFilePicker, Optional ByVal TitleStr As String = "打开", Optional ByVal FilterStr As String = "所有文件(*.*)", Optional ByVal MultiSelect = False, Optional ByVal PathStr As String) As String
'此函数需要引用Microsoft Office 12.0(或14.0) Object Library
'参数说明:
'DialogType 打开文件对话框的类型
    'msoFileDialogFilePicker    文件对话框
    'msoFileDialogFolderPicker  文件夹对话框
    'msoFileDialogOpen          打开...
    'msoFileDialogSaveAs        另存为...
'TitleStr   对话框标题文字
'FilterStr  文件类型筛选条件
    '本条件只对打开文件有效
    '如果要设置此字符串,请遵循以下格式("条件文字描述(类型设定)),多条件之间用";"号隔开.如:
    '"BMP格式文件(*.BMP);JPG格式文件(*.JPG);TXT文件(*.TXT)"
'MultiSelect    是否多选
    '设置文件对话框是否可以多选(基本上很少用)
'PathStr    默认路径
    '如果未指定,则默认为当前实例路径
'作者说明:以上各参数都已经设置了可缺少默认的,(意思是:你常用的打开一个文件夹,选择一个文件功能是可以一个参数都不用输入的)
'最简单的你可以这么用:FileName=GetFileName()
'最复杂的你可以这么用(哈哈,够长)如下:
'FileName = GetFileName(msoFileDialogFilePicker, "打开图片文件", "BMP格式图片(*.bmp);JPG格式图片(*.jpg);GIF格式图片(*.gif)", False, "D:\Documents\")
'作者:咱家是猫 QQ 130036500
'日期:2010年12月04日

On Error Resume Next
    Dim dlgOpen As FileDialog
    Dim I As Integer, S As String, A As String, B As String
    Set dlgOpen = Application.FileDialog(DialogType)
    With dlgOpen
        .title = TitleStr
        .Filters.Clear
        For I = 0 To UBound(Split(FilterStr, ";", -1), 1)
            S = Split(FilterStr, ";", -1)(I)
            A = Left(S, InStr(S, "(") - 1)
            B = Mid(S, InStr(S, "(") + 1)
            B = Left(B, InStr(B, ")") - 1)
            .Filters.Add A, B
        Next
        .AllowMultiSelect = MultiSelect
        If IsMissing(PathStr) Then
            .InitialFileName = CurrentProject.Path
        Else
            .InitialFileName = PathStr
        End If
        .Show
    End With
    If dlgOpen.SelectedItems.Count > 0 Then
        GetFileName = dlgOpen.SelectedItems(1)
    Else
        GetFileName = ""
    End If
    Set dlgOpen = Nothing
End Function

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

点击这里给我发消息

2#
发表于 2010-12-4 10:52:12 | 只看该作者
收藏了,猫哥新作.
3#
发表于 2010-12-4 17:39:44 | 只看该作者
本帖最后由 accesscx 于 2010-12-4 17:43 编辑


支持猫哥!

点击这里给我发消息

4#
发表于 2010-12-4 14:45:16 | 只看该作者
通用类比较通用些,我也是使用类. 而且可以在外层mde中使用
5#
发表于 2010-12-4 13:58:16 | 只看该作者
tmtony 发表于 2010-12-4 10:52
收藏了,猫哥新作.

这个要引用Office库,我记得在Access 2003做好之后,在Access 2000里运行时,弹出对话框,Office库丢失(2000引用的是office 10.0,2003引用的是11.0)。
我觉得还是用类函数来写好些。——不过我不会,(*^__^*) 嘻嘻……
6#
发表于 2010-12-6 13:18:25 | 只看该作者
收藏了
谢谢分享
7#
发表于 2010-12-6 00:19:03 | 只看该作者
“打开文件”对话框根本就是WindowsAPI本身的问题,这个问题在VC6中困扰了很多人!
8#
发表于 2011-1-8 20:26:47 | 只看该作者
看不懂呀,有简单的吗?

点击这里给我发消息

9#
发表于 2016-6-6 15:36:17 | 只看该作者
学习一下
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 06:30 , Processed in 0.104148 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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