乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 84|回复: 16

[编程交流] 获取多个文件名

[复制链接]

9

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:00:36 | 显示全部楼层 |阅读模式
我正在寻找一种方法来浏览多个图形,并用VBA中的所有文件路径填充一个列表框
 
提前感谢
 
-卡尔-
回复

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

铜币
-8
发表于 2022-7-5 20:05:56 | 显示全部楼层
到目前为止你有什么?这实际上有点困难,因为VBA没有内置文件对话框。但这是非常可行的
回复

使用道具 举报

9

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:11:17 | 显示全部楼层
现在,我使用了一个引用Excel文件打开对话框的函数。它在大多数情况下都能工作,但最近由于我们正在将一些计算机升级到office 2007,所以我希望尽可能去掉excel参考。
 
  1.    Set ExcelApp = GetObject(, "Excel.Application")
  2.    If Err <> 0 Then
  3.        Err.Clear
  4.        Set ExcelApp = CreateObject("Excel.Application")
  5.        If Err <> o Then
  6.            MsgBox "Could not start Excel!", vbExclamation
  7.            End
  8.        End If
  9.    End If
  10.    ExcelApp.Visible = True
  11.    Set wbkobj = ExcelApp.Workbooks.Add
  12.    Set shtObj = wbkobj.Worksheets(1)
  13.    BrowseDialogMulti = excel.Application.GetOpenFilename(FileFilter:=(FileType & " (*" & Extension & "),*" & Extension & ", All Files (*.*),*.*"), Title:=Title, MultiSelect:=True)
  14.    ExcelApp.Quit
回复

使用道具 举报

0

主题

252

帖子

290

银币

限制会员

铜币
-8
发表于 2022-7-5 20:13:07 | 显示全部楼层
我还没有玩过office 07,所以我不确定它将如何工作。显然,他们(微软)已经改变了你访问那个盒子的方式
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-5 20:16:43 | 显示全部楼层
我经常连接到这个windows浏览框,因为它很小,很容易提示用户输入一个类似块的文件。
 
  1. Dim objDialog As Variant, intResult As Variant,
  2. Dim strFilePath As String
  3.   
  4. Set objDialog = CreateObject("UserAccounts.CommonDialog")
  5.    
  6. 'Use The Common Dialog, show open method to get the profile
  7. objDialog.Filter = "Select block (*.DWG)|*.dwg"
  8. objDialog.FilterIndex = 1
  9. objDialog.InitialDir = "C:"
  10. intResult = objDialog.ShowOpen
  11. If intResult = 0 Then
  12. Exit Sub
  13. Else
  14. 'Get the full path and filename
  15. strFilePath = objDialog.FileName
  16. End If
  17. Msgbox  strFilePath
  18. End Sub

 
但是,据我所知,它不支持多文件选择。
 
有许多其他CAD人员使用的常见打开文件对话框代码;由于它使用了大量的代码,我只在需要诸如multi-select等高级功能的情况下使用它。
下面是该代码的示例
祝你好运
毫升
 
  1. Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
  2. "GetOpenFileNameA" (pOpenFileName As OPENFILENAME) As Long
  3. Private Type OPENFILENAME
  4. lStructSize As Long
  5. hwndOwner As Long
  6. hInstance As Long
  7. lpstrFilter As String
  8. lpstrCustomFilter As String
  9. nMaxCustFilter As Long
  10. nFilterIndex As Long
  11. lpstrFile As String
  12. nMaxFile As Long
  13. lpstrFileTitle As String
  14. nMaxFileTitle As Long
  15. lpstrInitialDir As String
  16. lpstrTitle As String
  17. flags As Long
  18. nFileOffset As Integer
  19. nFileExtension As Integer
  20. lpstrDefExt As String
  21. lCustData As Long
  22. lpfnHook As Long
  23. lpTemplateName As String
  24. End Type
  25. Sub Test()
  26. Dim Filter As String
  27. Dim InitialDir As String
  28. Dim DialogTitle As String
  29. Dim OutputStr As String
  30. Filter = "Drawing Files (*.dwg)" + Chr$(0) + "*.dwg" + Chr$(0) + _
  31. "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0)
  32. InitialDir = "C:\Documents and Settings\%username%\Desktop"
  33. DialogTitle = "Open a DWG file"
  34. OutputStr = ShowOpen(Filter, InitialDir, DialogTitle)
  35. MsgBox OutputStr
  36. End Sub
  37. Public Function ShowOpen(Filter As String, _
  38. InitialDir As String, DialogTitle As String) As String
  39. Dim OFName As OPENFILENAME
  40. 'Set the structure size
  41. OFName.lStructSize = Len(OFName)
  42. 'Set the owner window
  43. OFName.hwndOwner = 0
  44. 'Set the filter
  45. OFName.lpstrFilter = Filter
  46. 'Set the maximum number of chars
  47. OFName.nMaxFile = 255
  48. 'Create a buffer
  49. OFName.lpstrFile = Space(254)
  50. 'Create a buffer
  51. OFName.lpstrFileTitle = Space$(254)
  52. 'Set the maximum number of chars
  53. OFName.nMaxFileTitle = 255
  54. 'Set the initial directory
  55. OFName.lpstrInitialDir = InitialDir
  56. 'Set the dialog title
  57. OFName.lpstrTitle = DialogTitle
  58. 'no extra flags
  59. OFName.flags = 0
  60. 'Show the 'Open File' dialog
  61. If GetOpenFileName(OFName) Then
  62. ShowOpen = Trim(OFName.lpstrFile)
  63. Else
  64. ShowOpen = ""
  65. End If
  66. End Function
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-5 20:19:40 | 显示全部楼层
命令
 
在Office 2007中,它现在被称为Ribbon。
虽然这需要一些时间来适应,但有很多新的和先进的功能,我真的很喜欢。
 
如果你像我一样是一个Excel迷,那么这将是一个真正的帮助。
 
这是非常好的参考2003年看到什么你需要在2007年
 
http://office.microsoft.com/assistance/asstvid.aspx?assetid=XT101493291033&vwidth=1044&vheight=788&type=flash&CTT=11&Origin=HA101491511033
 
毫升
回复

使用道具 举报

9

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:24:52 | 显示全部楼层
 
我得到了代码,但它仍然只允许我选择一个绘图。我需要更改什么才能获得多个图形?
回复

使用道具 举报

1

主题

56

帖子

80

银币

初来乍到

Rank: 1

铜币
1
发表于 2022-7-5 20:29:16 | 显示全部楼层
 
我没有带我的souce(我在工作),但本质上你必须更改OPENFILENAME UDT中的FLAGS变量。这是一个有点和'的位,像很多事情API,没有多少人记住它,只有瘟疫它。
 
此外,一旦开始返回多个文件名,就必须从返回的多个空字符串中解析出各个文件名,并将其打包回变体。返回字符串的第一部分将仅为路径,然后是ascii零,然后仅后跟每个单独的文件名,而不包括路径,每个文件名后跟另一个ascii零。分割函数在这里工作得很好;但是您必须记住将路径添加回每个文件名的前面。
 
令人困惑可能地虽然学习起来很有趣,但复制粘贴模块非常方便。。。。
回复

使用道具 举报

1

主题

56

帖子

80

银币

初来乍到

Rank: 1

铜币
1
发表于 2022-7-5 20:32:21 | 显示全部楼层
嗯,我在网上找到了一些信息来源,并很快修复了它,我向我所困扰的任何人道歉;但无论如何,它在这里。
 
该代码将打开多种类型的文件,并一次打开多个文件;您可能会看到,文件打开允许选择两者。图纸和。DXF在同一对话框窗口中。
 
是的,如果从根驱动器打开多个文件,则返回带有双反斜杠“\\”的文件名的代码与此不一致;
但我正在吃午饭,并没有时间来修复它,而且它无论如何都能工作,即使有两个反斜杠。所以起诉我。。。
 
 
'--------snip---snip-------------
 
公共类型OPENFILENAME
L结构尺寸与长度相同
hwndOwner尽可能长
hInstance尽可能长
lpstrFilter作为字符串
lpstrCustomFilter作为字符串
NMaxustFilter尽可能长
nFilterIndex尽可能长
lpstrFile作为字符串
nMaxFile尽可能长
lpstrFileTitle作为字符串
NMAXileTitle尽可能长
lpstrInitialDir作为字符串
lpstrTitle作为字符串
标志长度
nFileOffset为整数
nFileExtension为整数
lpstrDefExt作为字符串
lCustData尽可能长
尽可能长
lpTemplateName作为字符串
末端类型
公共声明函数GetOpenFileName Lib“comdlg32.dll”别名_
“GetOpenFileNameA”(pOpenFileName作为OPENFILENAME)尽可能长
n\u ALLOWMULTISELECT的公共常量=&H200&
N_EXPLORER的公共常量=&H80000
n\u文件的公共常量mustexist=&H1000&
n_hidereadoly的公共常数=&H4&
n\u路径的公共常量必须存在=&H800&
 
子选择多个文件()
将文件列表设置为新集合
Dim I等长
将S变暗为字符串
ShowFileOpenDialog文件列表
带文件列表
如果然后计数>0
S=“选择了以下文件:“+vbCrLf”
对于I=1到。计数
S=S+。项目(I)+vbCrLf
下一个
MsgBox S
其他的
MsgBox“未选择任何文件!”
如果结束
以结束
末端接头
 
子ShowFileOpenDialog(ByRef文件列表作为集合)
将OpenFile设置为OPENFILENAME
变暗返回长度
Dim FileDir作为字符串
Dim FilePos尽可能长
Dim PrevFilePos尽可能长
使用OpenFile
.lStructSize=Len(OpenFile)
.hwndOwner=0
.H站姿=0
.lpstrFilter=“AutoCad图形”+Chr(0)+“*.dwg;*.dxf;”+_
Chr(0)+“所有文件(*.*)”+Chr(0)+“*.*”+Chr(0)+Chr(0)
.nFilterIndex=1
.lpstrFile=字符串(4096,0)
.nMaxFile=Len(.lpstrFile)-1
.lpstrFileTitle=。lpstrFile文件
.nMaxFileTitle=。nMaxFile
.lpstrInitialDir=“C:\”
.lpstrTitle=“多选图形”
.标志=OFN\u Hidereadoly+_
OFN\u路径必须存在+_
OFN\u文件必须存在+_
OFN\u ALLOWMULTISELECT+_
OFN\u浏览器
lReturn=GetOpenFileName(OpenFile)
如果返回0,则
FilePos=InStr(1.lpstrFile,Chr(0))
如果Mid(.lpstrFile,FilePos+1,1)=Chr(0),则
文件列表。添加lpstrFile文件
其他的
FileDir=Mid(.lpstrFile,1,FilePos-1)
当为True时执行
PrevFilePos=FilePos
FilePos=InStr(PrevFilePos+1,.lpstrFile,Chr(0))
如果FilePos-PrevFilePos>1,则
文件列表。添加FileDir+“\”+_
Mid(.lpstrFile,PrevFilePos+1_
FilePos-PrevFilePos-1)
其他的
退出Do
如果结束

如果结束
如果结束
以结束
末端接头
 
'--------snip--------snip--------
回复

使用道具 举报

9

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:37:08 | 显示全部楼层
亲爱的,这就是我需要的!
 
谢谢大家的帮助。
 
-卡尔-
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 01:07 , Processed in 1.437179 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表