ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 名课 - Power BI数据分析与可视化实战 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 老刘888

[求助] wps vba文件多选的问题

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-23 12:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

文件还是打开了

TA的精华主题

TA的得分主题

发表于 2025-3-23 13:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老刘888 发表于 2025-3-23 12:22
谢谢,有没有什么其他替代方案

看看
Application.GetOpenFilename
这个功能没有filedialog那么强大,不过不能用,可以试试这个吧

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-23 19:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
quqiyuan 发表于 2025-3-23 13:01
看看
Application.GetOpenFilename
这个功能没有filedialog那么强大,不过不能用,可以试试这个吧

wps还是会打开文件

TA的精华主题

TA的得分主题

发表于 2025-3-23 19:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老刘888 发表于 2025-3-23 19:21
wps还是会打开文件

那就奇怪,geropenfilename多选会形成一个数组,并且需要workbooks.open方法打开文件的哦,WPS怎么就自动打开了呢,可能还真的是WPS这方面的bug。那WPS就没办法。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2025-3-23 19:28 | 显示全部楼层
暂时的解决办法就是用WPS旧版,等下个版本更新了,再用最新的WPS

TA的精华主题

TA的得分主题

发表于 2025-3-24 16:11 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lss001 于 2025-3-25 16:29 编辑

'WPS使用WindowsAPI函数GetOpenFileName请参考以下代码

Private Type OPENFILENAME
    lStructSize        As Long     '结构长度
    hwndOwner          As Long     '主窗口句柄
    hInstance          As Long     '主线程句柄
    lpstrFilter        As String   '筛选条件
    lpstrCustomFilter  As String   '定制条件
    nMaxCustFilter     As Long     'lpstrCustomFilter长度
    nFilterIndex       As Long     '筛选序列:0定制条件,1筛选条件
    lpstrFile          As String   '初始文件名
    nMaxFile           As Long     'lpstrFile内存大小
    lpstrFileTitle     As String   '初始扩展名
    nMaxFileTitle      As Long     'lpstrFileTitle内存大小
    lpstrInitialDir    As String   '初始目录
    lpstrTitle         As String   '对话框标题
    flags              As Long     '对话框选项
    nFileOffset        As Integer  '文件名起始偏移
    nFileExtension     As Integer  '文件扩展名起始偏移
    lpstrDefExt        As String   '默认文件扩展名
    lCustData          As Long     '勾子数据
    lpfnHook           As Long     '勾子指针
    lpTemplateName     As String   '模板项目名
End Type

Private Declare PtrSafe Function GetOpenFileName _
    Lib "comdlg32.dll" Alias "GetOpenFileNameA" ( _
    pOpenfilename As OPENFILENAME) As Long
Private Declare PtrSafe Function GetSaveFileName _
    Lib "comdlg32.dll" Alias "GetSaveFileNameA" ( _
    pOpenfilename As OPENFILENAME) As Long

Sub WPS选择文件对话框()
    Dim pfn As OPENFILENAME, pInfo&, sPath$, pPath$
    Dim FileList, arr, fFile, fName, m&, n&, t&

    With pfn
        .lStructSize = Len(pfn)
        .hwndOwner = Application.Hwnd
        '.hInstance = Application.HinstancePtr
        '分隔符:vbNullChar 或 Chr(0)
        .lpstrFilter = "Excel Files(*.xls*)" & vbNullChar & "*.xls*"
        .nFilterIndex = 1
        .lpstrInitialDir = ThisWorkbook.Path
        .lpstrFile = Space(254)
        .nMaxFile = 40960
        .lpstrTitle = "选择文件"
        .flags = &H80000 + &H200 '允许多选
    End With

    pInfo = GetOpenFileName(pfn)
    If pInfo >= 1 Then
        '使用Split函数按vbNullChar拆分lpstrFile的内容为字符串组数
        FileList = Split(pfn.lpstrFile, vbNullChar)
        m = UBound(FileList)
        n = LBound(FileList)
        
        If m - n < 3 Then
            '仅选择了一个文件,此时文件名包含路径
            ReDim Preserve FileList(n)
            fFile = FileList
        Else
            '选择了多个文件,此时路径放在数组第一个元素中,后面是不带路径的文件名
            ReDim arr(m - n - 3)
            sPath = FileList(LBound(FileList))
            For t = LBound(FileList) + 1 To UBound(FileList) - 2
                pPath = sPath & Application.PathSeparator
                arr(t - LBound(FileList) - 1) = pPath & FileList(t)
            Next
            fFile = arr
        End If
    Else
    End If
   
    If IsArray(fFile) Then
        For Each fName In fFile
            MsgBox fName
        Next
    End If
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-5-10 16:59 | 显示全部楼层
谢谢,这个办法可以。wps已经修复了bug

TA的精华主题

TA的得分主题

发表于 2025-5-12 06:52 | 显示全部楼层

请教,这个@珠海金山办公如何联系他?谢谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-25 02:54 , Processed in 0.026186 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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