Solidworks宏查找并替换每个图纸

问题描述 投票:0回答:2

我在VBA上有一些背景,我讨厌100次执行相同的任务。我经常必须制作固体图纸,这些图纸是模板,主要是我用数据填充的桌子。文件中的每个纸上需要更改3件事(从第3页到最后一个纸)。通常,我进入每个纸张并进行3查找并替换以更改每个纸。然后继续进入下一个纸并重复。 我的计划是让代码计数床单的数量,提示用户进行第一个查找/替换,在所有床单上替换该文本,然后重复第二个替换,然后再次替换。我录制了一个宏并添加了一些代码,但我不断遇到运行时错误(在下面的代码中)。我录制的其他宏观从未给我这么多错误,如果您可以帮助

Dim swApp As SldWorks.SldWorks Dim swmodel As SldWorks.ModelDoc2 Dim swdraw As SldWorks.DrawingDoc Dim Part As Object Dim Otext As String Dim Ntext As String Dim Smax As Integer Dim i As Integer Dim swSheet As SldWorks.Sheet Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = Application.SldWorks Set swmodel = swApp.ActiveDoc 'Set swSheet = swdraw.GetCurrentSheet Smax = instance.GetSheetCount() - 3 ' runtime 424 error here Set swSheet = swdraw.GetCurrentSheet ' runtime 91 error if i skip the line above Otext = Application.InputBox("find this text") Ntext = Application.InputBox("find this text") For i = 1 To Smax Set Part = swApp.ActiveDoc '--------------------Find and Replace Annotations-------------------- Set swUtil = swApp.GetAddInObject("Utilities.UtilitiesApp") Set swUtilFindReplaceAnnotations = swUtil.FindReplaceAnnotations longstatus = swUtilFindReplaceAnnotations.InitPMPage() '--------------------Block Recording-------------------- #If 0 Then #End If '--------------------UnBlock Recording------------------ swUtilFindReplaceAnnotations.FindText = Otext swUtilFindReplaceAnnotations.ReplaceText = Ntext swUtilFindReplaceAnnotations.options = gtFraMatchCase swUtilFindReplaceAnnotations.AnnotationFilter = gtFraAllTypes Part.ClearSelection2 True Part.ClearSelection2 True Part.ClearSelection2 True Part.ClearSelection2 True Part.ClearSelection2 True longstatus = swUtilFindReplaceAnnotations.ReplaceAll() '--------------------Block Recording-------------------- #If 0 Then #End If '--------------------UnBlock Recording------------------ longstatus = swUtilFindReplaceAnnotations.Close() Part.SheetNext Part.ViewZoomtofit2 Next i End Sub

	
loops replace macros find solidworks
2个回答
2
投票
Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDrawingDoc As SldWorks.DrawingDoc Dim vSheetNames As Variant Dim longstatus As Long Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swDrawingDoc = swModel vSheetNames = swDrawingDoc.GetSheetNames Otext = InputBox("find this text") Ntext = InputBox("find this text") For i = 0 To UBound(vSheetNames) swDrawingDoc.ActivateSheet (vSheetNames(i)) Set swUtil = swApp.GetAddInObject("Utilities.UtilitiesApp") Set swUtilFindReplaceAnnotations = swUtil.FindReplaceAnnotations longstatus = swUtilFindReplaceAnnotations.InitPMPage() swUtilFindReplaceAnnotations.FindText = Otext swUtilFindReplaceAnnotations.ReplaceText = Ntext swUtilFindReplaceAnnotations.Options = gtFraWholeWord swUtilFindReplaceAnnotations.AnnotationFilter = gtFraAllTypes longstatus = swUtilFindReplaceAnnotations.ReplaceAll() longstatus = swUtilFindReplaceAnnotations.Close() Next i End Sub

这对我有好处!

0
投票
Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDrawingDoc As SldWorks.DrawingDoc Dim swSheet As SldWorks.Sheet Dim swView As SldWorks.View Dim swNote As SldWorks.Note Dim vSheetNames As Variant Dim Otext As String Dim Ntext As String Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc If swModel Is Nothing Then MsgBox "No active document found. Please open a drawing file.", vbCritical Exit Sub End If If swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then MsgBox "Active document is not a drawing. Please open a drawing file.", vbCritical Exit Sub End If Set swDrawingDoc = swModel vSheetNames = swDrawingDoc.GetSheetNames If IsEmpty(vSheetNames) Then MsgBox "No sheets found in the drawing.", vbCritical Exit Sub End If Otext = InputBox("Find this text") Ntext = InputBox("Replace with this text") For i = 0 To UBound(vSheetNames) swDrawingDoc.ActivateSheet vSheetNames(i) Set swSheet = swDrawingDoc.GetCurrentSheet() ' Access the sheet format view directly Set swView = swDrawingDoc.GetFirstView If Not swView Is Nothing Then Set swNote = swView.GetFirstNote Do While Not swNote Is Nothing If InStr(1, swNote.GetText, Otext, vbTextCompare) > 0 Then swNote.SetText Replace(swNote.GetText, Otext, Ntext) End If Set swNote = swNote.GetNext Loop End If Next i MsgBox "Text replacement complete." End Sub


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.