超链接文件操作
嘿,盖伊';我在一个图形中有许多块,所有块都有指向服务器上与块相关的PDF文档库的超链接我的问题;是否有Lisp或VBA可以复制这些内容;“超链接”;PDF将图纸剪切到名为“剪切图纸”的新目录,该目录将位于当前项目类型目录树中
标记
那么,您想扫描所有块,找到任何超链接,然后将超链接指向的文件复制到项目文件夹
假设这确实是你想要做的,这应该行得通
你';我需要添加对Microsoft脚本运行时的引用
Option Explicit
Public Sub Main()
Dim objBlock As AcadBlockReference
Dim objEnt As AcadEntity
Dim colHyps As AcadHyperlinks
Dim fso As FileSystemObject
Set fso = New FileSystemObject
For Each objEnt In ThisDrawing.ModelSpace
If TypeOf objEnt Is AcadBlockReference Then
Set objBlock = objEnt
Set colHyps = objBlock.Hyperlinks
On Error Resume Next ' In case we encounter any blocks that DON'T have hyperlinks
fso.CopyFile colHyps.Item(0).URL, "E:\Temp\"' replace E:\Temp\ with your project directory
End If
Next objEnt
Set fso = Nothing
End Sub
马特,谢谢你的快速回复!你提到Microsoft运行时脚本?我需要买些软件吗?或者引用一个我已经准备好的软件?(在PO Gramming上非常新)。参见代码中的注释 ;Dim objBlock As AcadBlockReference作为对象块参考 ;模糊对象作为身份 ;暗colHyps作为AcadHyperlinks ;将fso设置为文件系统对象 
 ;设置fso=New FileSystemObject 
 ;对于本图纸中的每个对象。模型空间   ;如果对象的类型是AcadBlockReference,则     ;设置objBlock=objEnt     ;设置colHyps=objBlock。超链接     ;出错时继续下一步';如果我们遇到任何不';T有超链接(有没有办法让程序使用当前工作图来知道路径?)
     ;fso。CopyFile colHyps。项(0)。URL,";E: “温度” ' 将E:\Temp\替换为项目目录(这将是PDF源文件?)
   ;如果结束 ;下一个目标 
 ;设置fso=Nothing
要添加对Microsoft脚本运行时的引用,请在IDE中单击工具-引用(请参见第一个图像),然后选择Microsoft脚本运行时间(请参见第二个图像)
Matt,再次感谢您抽出时间查看代码中的注释
选项显式 ;Dim objBlock As AcadBlockReference作为对象块参考 ;模糊对象作为身份 ;暗colHyps作为AcadHyperlinks ;将fso设置为文件系统对象 
 ;设置fso=New FileSystemObject 
 ;对于本图纸中的每个对象。模型空间   ;如果对象的类型是AcadBlockReference,则     ;设置objBlock=objEnt     ;设置colHyps=objBlock。超链接     ;出错时继续下一步';如果我们遇到任何不';T有超链接(有没有办法让程序使用当前工作图来知道路径?)
你是指当前的图纸吗;s位置 ;那条路??!?(是的,当前工作图纸位于项目目录中,项目目录中也有一个名为Cut_Sheets的目录。这是我希望PDF剪切图纸结束的地方。)     ;fso。CopyFile colHyps。项(0)。URL,";E: “温度” ' 将E:\Temp\替换为项目目录(这将是PDF源文件?)
文件将复制到此处   ;如果结束 ;下一个目标 
 ;设置fso=Nothing 马特,这是我写的一个小程序,为我的公司启动一个新项目#039;的具体需求
这可能有助于了解移动超链接剪切图纸的必要性 马特,让';例如,我使用数据提取创建BOM表,在模型空间中有5个多块装配图,但在图纸空间布局中仅显示1个装配。还有什么方法可以防止将重复的PDF剪切页移动到同一目录中,或者程序会崩溃,或者它会提示我覆盖出现的任何重复文件吗 ;此外,我们的项目发生了很大变化,一些块将被删除,其他块将被添加,我再次运行此程序,是否可以删除Cut_Sheet目录中的现有文件,并用新修改的当前图形切割表重新填充
标记 这将自动删除特定目录中的所有PDF,在本例中为E:\Temp ;将其更改为存储PDF的项目文件夹
If Len(Dir("E:\Temp\*.pdf"))0 Then ' Checks to see if there are any PDFs in E:Temp
fso.DeleteFile "E:\Temp\*.pdf", True ' If there are, delete them
End If 该行将自动覆盖任何可能与所复制PDF同名的PDF
fso.CopyFile colHyps.Item(0).URL, "E:\Temp\", True 当你把这一切放在一起,你会得到这个…Option Explicit
Public Sub Main()
Dim objBlock As AcadBlockReference
Dim objEnt As AcadEntity
Dim colHyps As AcadHyperlinks
Dim fso As FileSystemObject
Set fso = New FileSystemObject
If Len(Dir("E:\Temp\*.pdf"))0 Then ' Checks to see if there are any PDFs in E:Temp
fso.DeleteFile "E:\Temp\*.pdf", True ' If there are, delete them
End If
For Each objEnt In ThisDrawing.ModelSpace
If TypeOf objEnt Is AcadBlockReference Then
Set objBlock = objEnt
Set colHyps = objBlock.Hyperlinks
On Error Resume Next ' In case we encounter any blocks that DON'T have hyperlinks
fso.CopyFile colHyps.Item(0).URL, "E:\Temp\", True' replace E:\Temp\ with your project directory
' The TRUE option will automatically overwrite any existing files with the same name
End If
Next objEnt
Set fso = Nothing
End Sub
获取当前图纸#039;s位置,可以使用ThisDrawing.Path
要测试它,只需把它放在一个空的SUB中并运行它 ;它将显示一个对话框,其中包含图形#039;s路径
MsgBox ThisDrawing.Path 然后,您可以使用
MsgBox ThisDrawing.Path & "\Cut_Sheets" 马特使用路径MsgBox ThisDrawing.Path & "\Cut_Sheets"
页:
[1]
2