乐筑天下

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

[编程交流] 打开、宏、关闭,然后是Lo

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:13:32 | 显示全部楼层 |阅读模式
大家好,
 
使用一种简单的方法打开整个dwg堆栈,在其上运行一两个宏,然后再次关闭。
 
可能一次一个-例如:让bacth文件将dwg调用到acad 2009,运行宏或脚本调用宏,然后关闭dwg并打开下一个以重复任务。
 
我找到了一种在DIESEL中实现这一点的方法,但它最多适用于8个drg。
 
我找到了一种方法,可以同时使用lisp代码、脚本和批处理文件来实现这一点,但速度太慢,效果不理想。
 
目前,我需要做的是在将一个充满文件的目录加载到autocad后单击一次宏,然后单击一个按钮,宏在完成后关闭文件。
 
如果没有自动单击程序,我该如何自动执行此操作,以便宏将重新运行以生成下一个dwg?
回复

使用道具 举报

1

主题

56

帖子

80

银币

初来乍到

Rank: 1

铜币
1
发表于 2022-7-6 17:25:11 | 显示全部楼层
这里可能有一个VBA解决方案。
 
这是一个模块*,递归查找给定类型的所有文件,然后为每个文件调用一个子例程。
 
如果您已经有了一些执行这些特定操作的代码,那么在“DoSomethingWithFile”例程中调用主例程。
 
这是一个通用模块,可以(重新)用于任何VBA操作,无论是在Acad、Excel等中运行,因此,其中没有Autocad命令,包括打开或关闭图形。
 
例如,使用文件类型“*.dwg”调用主“FindAllFiles”例程;例如,起始路径“Y\MyDwgs\Temp”。
 
未经修改的“DoSomethingWithFile”例程仅将找到的所有文件列出到调试窗口。请记住,此例程是递归的-它深入到您在“FindAllFiles”主例程的“StartPath”参数中传递的文件夹下的所有子文件夹。
 
----剪断------------------------------------
  1. Option Explicit
  2. Private Const vbDot = 46
  3. Private Const MAX_PATH As Long = 260
  4. Private Const INVALID_HANDLE_VALUE = -1
  5. Private Const vbBackslash = ""
  6. Private Const ALL_FILES = "*.*"
  7. Private Type FILETIME
  8.    dwLowDateTime As Long
  9.    dwHighDateTime As Long
  10. End Type
  11. Private Type WIN32_FIND_DATA
  12.    dwFileAttributes As Long
  13.    ftCreationTime As FILETIME
  14.    ftLastAccessTime As FILETIME
  15.    ftLastWriteTime As FILETIME
  16.    nFileSizeHigh As Long
  17.    nFileSizeLow As Long
  18.    dwReserved0 As Long
  19.    dwReserved1 As Long
  20.    cFileName As String * MAX_PATH
  21.    cAlternate As String * 14
  22. End Type
  23. Private Declare Function FindClose Lib "kernel32" _
  24.    (ByVal hFindFile As Long) As Long
  25. Private Declare Function FindFirstFile Lib "kernel32" _
  26.    Alias "FindFirstFileA" (ByVal lpFileName As String, _
  27.    lpFindFileData As WIN32_FIND_DATA) As Long
  28. Private Declare Function FindNextFile Lib "kernel32" _
  29.    Alias "FindNextFileA" (ByVal hFindFile As Long, _
  30.    lpFindFileData As WIN32_FIND_DATA) As Long
  31. Private Declare Function GetTickCount Lib "kernel32" () As Long
  32. Private Declare Function lstrlen Lib "kernel32" _
  33.    Alias "lstrlenW" (ByVal lpString As Long) As Long
  34. Private Declare Function PathMatchSpec Lib "shlwapi" _
  35.    Alias "PathMatchSpecW" (ByVal pszFileParam As Long, _
  36.    ByVal pszSpec As Long) As Long
  37. Dim sFileExt As String
  38. Dim sFileRoot As String
  39. Public Sub FindAllFiles(FileType As String, StartPath As String)
  40.    ' recursively searches a passed path for files of a given type
  41.    ' FileType: a wildcard string of the file extension, ie; "*.dwg" or "*.xls"
  42.    sFileRoot = QualifyPath(StartPath) 'start path
  43.    sFileExt = FileType 'file type of interest
  44.    Call SearchForFiles(sFileRoot)
  45. End Sub
  46. Private Sub SearchForFiles(sRoot As String)
  47.    Dim WFD As WIN32_FIND_DATA
  48.    Dim hFile As Long
  49.    hFile = FindFirstFile(sRoot & ALL_FILES, WFD)
  50.    If hFile <> INVALID_HANDLE_VALUE Then
  51.        Do
  52.        'if a folder, and recurse specified, call method again
  53.        If (WFD.dwFileAttributes And vbDirectory) Then
  54.            If Asc(WFD.cFileName) <> vbDot Then
  55.                SearchForFiles sRoot & TrimNull(WFD.cFileName) & vbBackslash
  56.            End If
  57.        Else
  58.            'must be a file..
  59.            If MatchSpec(WFD.cFileName, sFileExt) Then
  60.                DoSomethingWithFile sRoot & TrimNull(WFD.cFileName)
  61.            End If 'If MatchSpec
  62.        End If 'If WFD.dwFileAttributes
  63.        Loop While FindNextFile(hFile, WFD)
  64.    End If 'If hFile
  65.    Call FindClose(hFile)
  66. End Sub
  67. Private Function QualifyPath(sPath As String) As String
  68.    ' formats passed path string to be used in recursive API search
  69.    If Right$(sPath, 1) <> vbBackslash Then
  70.        QualifyPath = sPath & vbBackslash
  71.    Else
  72.        QualifyPath = sPath
  73.    End If
  74. End Function
  75. Private Function TrimNull(startstr As String) As String
  76.    ' trims NULL char (ascii 0) from strings returned by API calls
  77.    TrimNull = Left$(startstr, lstrlen(StrPtr(startstr)))
  78. End Function
  79. Private Function MatchSpec(sFile As String, sSpec As String) As Boolean
  80.    ' uses API version of the "LIKE" command
  81.    MatchSpec = PathMatchSpec(StrPtr(sFile), StrPtr(sSpec))
  82. End Function
  83. Private Sub DoSomethingWithFile(FoundFileName As String)
  84.    ' use this routine to do something with each file found
  85.    ' we'll do nothing but print out the filename found
  86.    Dim FoundName As String: FoundName = FoundFileName
  87.    Debug.Print FoundName
  88. End Sub
回复

使用道具 举报

LCE

1

主题

29

帖子

28

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:39:06 | 显示全部楼层
 
如果你能使用VB。net,然后我可以提供一些代码,甚至不用打开文件就可以为您完成。在一些相当复杂的脚本上,我能在几秒钟内完成100幅图画的表现。
 
让我知道,如果有兴趣的话,我可以提供一些建议。
 
干杯
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:43:32 | 显示全部楼层
我熟悉vb dot net的操作方式,但不知道如何将其应用于acad 09。
 
我可能需要更多关于如何实际实现VBA的细节。
回复

使用道具 举报

4

主题

15

帖子

12

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 17:50:37 | 显示全部楼层
 
我开始使用。net,并且会对您提到的代码非常感兴趣。请邮寄!。
 
禅宗
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:57:19 | 显示全部楼层
 
基本上,我只需要一个立足点,了解如何在autocad中使用VBA,从那里我可以学到一些东西并进行实验。但在我读到这个论坛之前,我认为lisp和deisel是我唯一的选择。
 
那么,尽管看起来简单明了,但第一步是什么?
回复

使用道具 举报

4

主题

15

帖子

12

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 18:11:56 | 显示全部楼层
 
由于您之前没有做过VBA,我将从查找一般VBA网站开始,该网站提供了一些基本教程,您可以访问一些AutoCAD特定的网站:以下两个网站只是其中的一部分,但我发现这两个网站到目前为止最有帮助:
 
http://rkmcswain.blogspot.com/我相信这是来自这个论坛里的人们。
 
http://blog.jtbworld.com是另一个我发现不仅对AutoCAD有用而且对其他办公产品也有用的网站。
 
如果你想要的话,我可以发布我找到的VBA教程网站。。。
 
禅宗
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 18:16:49 | 显示全部楼层
我熟悉ACCESS中的VBA,在过去做过很多数据库工作。
 
对于指针,我将开始我的旅程,进入等待我的阅读英里。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 16:44 , Processed in 0.424142 second(s), 68 queries .

© 2020-2025 乐筑天下

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