2016-07-05 58 views
2

我對VBA有一些背景,我討厭做同樣的任務100次。我經常需要製作Solidworks工程圖,這些工程圖大多隻是我用數據填充的表格。文件中的每張紙上有3件事需要更改(從紙張3到最後一張)。通常我會進入每張紙,然後找到並替換每張紙。然後轉到下一張紙並重復。Solidworks宏在每張圖紙上查找並替換

我的計劃是讓代碼計算頁數,提示用戶進行第一次查找/替換,替換所有頁面上的文本,然後重複進行第二次替換,然後再次替換第三次。我錄製了一個宏並添加了一些代碼,但是我一直收到運行時錯誤(在下面的代碼中)。我記錄的每一個其他宏從來沒有給我這麼多的錯誤,如果你可以請求幫助

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 
+0

什麼是實例?似乎沒有被宣佈。 swdraw從未被宣佈。 – AndrewK

+0

來自另一個論壇,解釋如何讓solidworks計算圖形中的工作表數量。在這個例子中,它沒有被使用。 –

回答

2

這應該是訣竅。它將爲每張工作表彈出一個成功窗口,但這是SOLIDWORKS查找替換工具的工作原理。

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 
+1

雖然 – AndrewK

+1

可能只是採用'For i = 0 To UBound(vSheetNames)'並將其更改爲'For i = 2 To UBound(vSheetNames)'幷包裝它圍繞一個if語句確保有超過3張 – AndrewK

+0

謝謝安德魯克,但是我現在得到運行時91這一行'設置swUtilFindReplaceAnnotations = swUtil.FindReplaceAnnotations'我會繼續挖掘,但這已經是一個正確的方向 –