乐筑天下

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

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

[复制链接]

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-5 20:39:59 | 显示全部楼层
嗨,卡尔
 
不幸的是,我不能给你这个答案,因为我不知道。
我得到了那个代码,但从来没有真正需要使用它;我使用我一直发布的第一个文件,因为我真的一次只需要选择一个文件。
 
试着玩转代码,看看你得到了什么。
 
 
另一种选择是只需在ACAD上进行谷歌搜索并打开文件对话框;我向你保证,你会得到大量点击。
 
如果我有时间的话,也许我可以看看,但之后很可能只需要点击一下。
 
 
嗯,如果你注意到,mutliselect有一个常数集,你只需要知道把它放在哪里。
 
毫升
回复

使用道具 举报

170

主题

347

帖子

174

银币

中流砥柱

Rank: 25

铜币
870
发表于 2022-7-5 20:42:12 | 显示全部楼层
在上一篇文章中,你是如何让上面的代码工作的。
当我将其剪切/粘贴到表单中时,以下几行是红色的。
n\u ALLOWMULTISELECT的公共常量=&H200&
N_EXPLORER的公共常量=&H80000
n\u文件的公共常量mustexist=&H1000&
n_hidereadoly的公共常数=&H4&
n\u路径的公共常量必须存在=&H800&
 
我有什么遗漏吗?
非常感谢。
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
310
发表于 2022-7-5 20:47:10 | 显示全部楼层
它必须在vba中吗?我为fas编译器做了这样的事情。这是在我想出更好的方法来保护Lisp程序之前。
 
编辑____
我删除了我的fas编译器lisp,所以如果你选择这样做,你可以用它运行
m文件。LSP
程序名称。dcl
回复

使用道具 举报

1

主题

56

帖子

80

银币

初来乍到

Rank: 1

铜币
1
发表于 2022-7-5 20:49:22 | 显示全部楼层
 
哇!我在很多月前发布了这个代码。行返回为红色,因为表单模块中不允许使用“Public CONST”声明。张贴在那里的代码将完全放到它自己的“.BAS”模块中,然后从表单模块调用。
 
您将相关代码放入其自己的模块中,然后将其“拖放”到您的
应用程序,只要您需要该功能。这使得代码模块化。
 
 
下面是该代码的更新版本。它不仅具有“文件打开”对话框功能,还具有“文件保存”和“浏览文件夹”对话框。它还允许您将初始打开文件夹设置为网络驱动器-这是VB本身不允许的。文件打开例程接受一个或多个文件的选择。如果未选择任何文件,则返回一个变量-为空,或者为每个选定文件返回一个完全限定的路径规范数组。
 
此外,这里的第一个子例程“Main”基本上是一个演示子例程,用于展示功能。这是示例代码。试着运行它。您应该能够将该子例程中的代码复制并粘贴到表单代码中,然后它就会运行。
 
一个警告-正常情况下,“打开”,拯救“、等对话框是调用它们的应用程序的模式对话框。它们会弹出,在完成“文件打开”对话框之前,你无法执行任何操作。此代码不会执行此操作-如果你单击另一个窗体,文件打开对话框将绘制在另一个窗口的后面。为了使对话框成为模式对话框,你必须获取调用应用程序的内存地址。我可以在Acad窗口中硬连线,但是这段代码在Excel、VB或SolidWorks中都不起作用。所以我作弊了,取而代之的是Windows桌面的地址——但现在代码应该可以在任何地方使用了。
 
 
CommonDialog。txt文件
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:56:06 | 显示全部楼层
你好
首先,感谢rocheey展示了他的代码。然而,它仍然有一些错误。我已经尝试过修复它,它对我来说非常有效。
这是代码,希望它能帮到你这么多。
 
  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. Private Const OFN_ALLOWMULTISELECT = &H200&
  26. Private Const OFN_EXPLORER = &H80000
  27. Private Const OFN_FILEMUSTEXIST = &H1000&
  28. Private Const OFN_HIDEREADONLY = &H4&
  29. Private Const OFN_PATHMUSTEXIST = &H800&
  30. Sub SelectManyFiles()
  31. Dim FileList As New Collection
  32. Dim I As Long
  33. Dim S As String
  34. ShowFileOpenDialog FileList
  35. With FileList
  36. If .Count > 0 Then
  37. S = "The following files were selected:" + vbCrLf
  38. For I = 1 To .Count
  39. S = S + .Item(I) + vbCrLf
  40. Next
  41. MsgBox S
  42. Else
  43. MsgBox "No files were selected!"
  44. End If
  45. End With
  46. End Sub
  47. Sub ShowFileOpenDialog(ByRef FileList As Collection)
  48. Dim OpenFile As OPENFILENAME
  49. Dim lReturn As Long
  50. Dim FileDir As String
  51. Dim FilePos As Long
  52. Dim PrevFilePos As Long
  53. With OpenFile
  54. .lStructSize = Len(OpenFile)
  55. .hwndOwner = 0
  56. .hInstance = 0
  57. .lpstrFilter = "AutoCad Drawings" + Chr(0) + "*.dwg;*.dxf;" + _
  58. Chr(0) + "All Files (*.*)" + Chr(0) + "*.*" + Chr(0) + Chr(0)
  59. .nFilterIndex = 1
  60. .lpstrFile = String(4096, 0)
  61. .nMaxFile = Len(.lpstrFile) - 1
  62. .lpstrFileTitle = .lpstrFile
  63. .nMaxFileTitle = .nMaxFile
  64. .lpstrInitialDir = "C:"
  65. .lpstrTitle = "Multi Select Drawings"
  66. .flags = OFN_HIDEREADONLY + _
  67. OFN_PATHMUSTEXIST + _
  68. OFN_FILEMUSTEXIST + _
  69. OFN_ALLOWMULTISELECT + _
  70. OFN_EXPLORER
  71. lReturn = GetOpenFileName(OpenFile)
  72. If lReturn <> 0 Then
  73. FilePos = InStr(1, .lpstrFile, Chr(0))
  74. If Mid(.lpstrFile, FilePos + 1, 1) = Chr(0) Then
  75. FileList.Add .lpstrFile
  76. Else
  77. FileDir = Mid(.lpstrFile, 1, FilePos - 1)
  78. Do While True
  79. PrevFilePos = FilePos
  80. FilePos = InStr(PrevFilePos + 1, .lpstrFile, Chr(0))
  81. If FilePos - PrevFilePos > 1 Then
  82. FileList.Add FileDir + "" + _
  83. Mid(.lpstrFile, PrevFilePos + 1, _
  84. FilePos - PrevFilePos - 1)
  85. Else
  86. Exit Do
  87. End If
  88. Loop
  89. End If
  90. End If
  91. End With
  92. End Sub
回复

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:58:23 | 显示全部楼层
您好,tuntnguyen,
 
我复制了你的代码,效果很好
然而
我需要逐个打开图形(LISP例程将使用acaddoc编辑每个图形)
在哪个变量中可以找到图形,如何相应地打开它们?
 
之前,我使用固定目录放置需要编辑的图形
VBA在变量“Drawing”中创建了该目录中所有图形的列表
下面是我的“开场白”代码:
 
 
  1. Do While Len(Drawing) > 0
  2.           Tekopen = Input_Dir & "" & Drawing
  3.           AutoCAD.Documents.Open (Tekopen)
  4.           AutoCAD.ActiveDocument.Close
  5.           Drawing = Dir()
  6. Loop

 
 
有人能支持我吗?
 
当做
 
弗兰斯
回复

使用道具 举报

0

主题

4

帖子

4

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 21:03:36 | 显示全部楼层
大家好,
 
有人能帮我解决上述问题吗?
 
谢谢
 
弗兰斯
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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