复制
收藏
提问
全网

Dim swApp As Object Dim Part As Object Dim SelMgr As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim Feature As Object Dim swmodel As ModelDoc2 Dim swmodelComps As Variant Dim swmodelComp As SldWorks.Component2 Dim swAsm As SldWorks.AssemblyDoc Dim a As Integer Dim b As String Dim m As String Dim e As String Dim k As String Dim t As String Dim c As String Dim j As Integer Dim n As String Dim d As Integer Dim strmat As String Dim tempvalue As String Sub main() 'link solidworks Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager swApp.ActiveDoc.ActiveView.FrameState = 1 Set swmodel = swApp.ActiveDoc Set swAsm = swmodel swmodelComps = swAsm.GetComponents(True) c = getasmchild(swmodelComps) End Sub Sub main() Private Function getasmchild(swmodelComps As Variant) Dim swmodelComp As SldWorks.Component2 Dim swmodel As ModelDoc2 Dim swAsm As SldWorks.AssemblyDoc For i = 0 To UBound(swmodelComps) Set swmodelComp = swmodelComps(i) Set swmodel = swmodelComp.GetModelDoc2 If swmodel.GetType = 1 Then MsgBox (swmodel.GetTitle) ElseIf swmodel.GetType = 2 Then swAsm = swmodel getasmchild (swAsm.GetComponents(True)) End If Next End Function '设定变量 c = swApp.ActiveDoc.GetTitle() '零件名 strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34) blnretval = Part.DeleteCustomInfo2("", "代号") blnretval = Part.DeleteCustomInfo2("", "名称") a = InStr(c, "_") - 1 If a > 0 Then k = Left(c, a) t = Left(LTrim(e), 3) If t = "GBT" Then e = "GB/T" + Mid(k, 4) Else e = k End If b = Mid(c, a + 2) t = Right(c, 7) If t = ".SLDPRT" Or t = ".SLDASM" Then j = Len(b) - 7 Else j = Len(b) End If m = Left(b, j) d = InStr(m, "_") - 1 If d > 0 Then n = Left(m, d) Else n = m End If End If blnretval = Part.AddCustomInfo3("", "代号", swCustomInfoText, e) '增加自定义代号 blnretval = Part.AddCustomInfo3("", "名称", swCustomInfoText, n) '增加自定义名称 blnretval = Part.AddCustomInfo3("", "表面处理", swCustomInfoText, " ") End Sub

b8d3a622c
3个月前
全网
文档
学术
百科
知识库
时间不限
自动

理解问题Dim swApp As Object Dim Part As Object Dim SelMgr As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim Feature As Object Dim swmodel As ModelDoc2 Dim swmodelComps As Variant Dim swmodelComp As SldWorks.Component2 Dim swAsm As SldWorks.AssemblyDoc Dim a As Integer Dim b As String Dim m As String Dim e As String Dim k As String Dim t As String Dim c As String Dim j As Integer Dim n As String Dim d As Integer Dim strmat As String Dim tempvalue As String Sub main() 'link solidworks Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager swApp.ActiveDoc.ActiveView.FrameState = 1 Set swmodel = swApp.ActiveDoc Set swAsm = swmodel swmodelComps = swAsm.GetComponents(True) c = getasmchild(swmodelComps) End Sub Sub main() Private Function getasmchild(swmodelComps As Variant) Dim swmodelComp As SldWorks.Component2 Dim swmodel As ModelDoc2 Dim swAsm As SldWorks.AssemblyDoc For i = 0 To UBound(swmodelComps) Set swmodelComp = swmodelComps(i) Set swmodel = swmodelComp.GetModelDoc2 If swmodel.GetType = 1 Then MsgBox (swmodel.GetTitle) ElseIf swmodel.GetType = 2 Then swAsm = swmodel getasmchild (swAsm.GetComponents(True)) End If Next End Function '设定变量 c = swApp.ActiveDoc.GetTitle() '零件名 strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34) blnretval = Part.DeleteCustomInfo2("", "代号") blnretval = Part.DeleteCustomInfo2("", "名称") a = InStr(c, "_") - 1 If a > 0 Then k = Left(c, a) t = Left(LTrim(e), 3) If t = "GBT" Then e = "GB/T" + Mid(k, 4) Else e = k End If b = Mid(c, a + 2) t = Right(c, 7) If t = ".SLDPRT" Or t = ".SLDASM" Then j = Len(b) - 7 Else j = Len(b) End If m = Left(b, j) d = InStr(m, "_") - 1 If d > 0 Then n = Left(m, d) Else n = m End If End If blnretval = Part.AddCustomInfo3("", "代号", swCustomInfoText, e) '增加自定义代号 blnretval = Part.AddCustomInfo3("", "名称", swCustomInfoText, n) '增加自定义名称 blnretval = Part.AddCustomInfo3("", "表面处理", swCustomInfoText, " ") End Sub

已完成理解Dim swApp As Object Dim Part As Object Dim SelMgr As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim Feature As Object Dim swmodel As ModelDoc2 Dim swmodelComps As Variant Dim swmodelComp As SldWorks.Component2 Dim swAsm As SldWorks.AssemblyDoc Dim a As Integer Dim b As String Dim m As String Dim e As String Dim k As String Dim t As String Dim c As String Dim j As Integer Dim n As String Dim d As Integer Dim strmat As String Dim tempvalue As String Sub main() 'link solidworks Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager swApp.ActiveDoc.ActiveView.FrameState = 1 Set swmodel = swApp.ActiveDoc Set swAsm = swmodel swmodelComps = swAsm.GetComponents(True) c = getasmchild(swmodelComps) End Sub Sub main() Private Function getasmchild(swmodelComps As Variant) Dim swmodelComp As SldWorks.Component2 Dim swmodel As ModelDoc2 Dim swAsm As SldWorks.AssemblyDoc For i = 0 To UBound(swmodelComps) Set swmodelComp = swmodelComps(i) Set swmodel = swmodelComp.GetModelDoc2 If swmodel.GetType = 1 Then MsgBox (swmodel.GetTitle) ElseIf swmodel.GetType = 2 Then swAsm = swmodel getasmchild (swAsm.GetComponents(True)) End If Next End Function '设定变量 c = swApp.ActiveDoc.GetTitle() '零件名 strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34) blnretval = Part.DeleteCustomInfo2("", "代号") blnretval = Part.DeleteCustomInfo2("", "名称") a = InStr(c, "_") - 1 If a > 0 Then k = Left(c, a) t = Left(LTrim(e), 3) If t = "GBT" Then e = "GB/T" + Mid(k, 4) Else e = k End If b = Mid(c, a + 2) t = Right(c, 7) If t = ".SLDPRT" Or t = ".SLDASM" Then j = Len(b) - 7 Else j = Len(b) End If m = Left(b, j) d = InStr(m, "_") - 1 If d > 0 Then n = Left(m, d) Else n = m End If End If blnretval = Part.AddCustomInfo3("", "代号", swCustomInfoText, e) '增加自定义代号 blnretval = Part.AddCustomInfo3("", "名称", swCustomInfoText, n) '增加自定义名称 blnretval = Part.AddCustomInfo3("", "表面处理", swCustomInfoText, " ") End Sub

展开阅读网页

看起来你提供的代码是一段用于SolidWorks的VBA宏,用于处理SolidWorks文档中的一些自动化任务。这段代码包含了几个子程序和函数,用于遍历装配体中的组件,获取它们的标题,并根据特定的规则修改和添加自定义属性。

不过,你的代码中存在一些问题和错误,我将为你指出并提供一些建议:

  1. 你定义了两个main子程序,这会导致编译错误。你应该只保留一个main子程序。

  2. getasmchild函数被定义了两次,这同样会导致编译错误。你需要删除或重命名其中一个。

  3. getasmchild函数中,你使用了swAsm变量,但在函数的参数列表中没有声明这个变量。你需要在函数的参数列表中添加ByRef swAsm As SldWorks.AssemblyDoc

  4. main子程序中,你使用了变量e,但在代码中没有为它赋值。你需要在适当的地方为e赋值。

  5. 你的代码中使用了MsgBox来显示消息框,这在调试时很有用,但在实际使用中可能需要将其替换为其他形式的错误处理或日志记录。

  6. 你的代码中使用了InStr函数来查找字符串中的特定字符,但InStr函数的返回值是找到的位置,而不是字符的索引。你可能需要根据这个返回值来调整你的逻辑。

  7. 你的代码中使用了LeftRight函数来截取字符串,但这些函数的使用可能需要根据实际情况进行调整,以确保它们能够正确地截取所需的字符串部分。

  8. 你的代码中使用了DeleteCustomInfo2AddCustomInfo3方法来修改自定义属性,但这些方法的参数可能需要根据SolidWorks的API文档进行调整。

  9. 你的代码中使用了swCustomInfoText枚举值,但没有在代码中定义它。你需要确保这个枚举值是正确的,并且已经在你的代码中或SolidWorks的API中定义。

  10. 你的代码中使用了swAppPart等对象,但没有显示地调用Set来为它们赋值。这在VBA中是允许的,但为了代码的可读性,你可能想要在代码的开始处显式地设置这些对象。

请根据这些建议对你的代码进行修改和调试。如果你需要进一步的帮助,请提供更多的上下文或具体的问题。

更专业一些
转笔记
专业
Dim swApp As Object Dim Part As Object Dim SelMgr As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim Feature As Object Dim swmodel As ModelDoc2 Dim swmodelComps As Variant Dim swmodelComp As SldWorks.Component2 Dim swAsm As SldWorks.AssemblyDoc Dim a As Integer Dim b As String Dim m As String Dim e As String Dim k As String Dim t As String Dim c As String Dim j As Integer Dim n As String Dim d As Integer Dim strmat As String Dim tempvalue As String Sub main() 'link solidworks Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager swApp.ActiveDoc.ActiveView.FrameState = 1 Set swmodel = swApp.ActiveDoc Set swAsm = swmodel swmodelComps = swAsm.GetComponents(True) c = getasmchild(swmodelComps) End Sub Sub main() Private Function getasmchild(swmodelComps As Variant) Dim swmodelComp As SldWorks.Component2 Dim swmodel As ModelDoc2 Dim swAsm As SldWorks.AssemblyDoc For i = 0 To UBound(swmodelComps) Set swmodelComp = swmodelComps(i) Set swmodel = swmodelComp.GetModelDoc2 If swmodel.GetType = 1 Then MsgBox (swmodel.GetTitle) ElseIf swmodel.GetType = 2 Then swAsm = swmodel getasmchild (swAsm.GetComponents(True)) End If Next End Function '设定变量 c = swApp.ActiveDoc.GetTitle() '零件名 strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34) blnretval = Part.DeleteCustomInfo2("", "代号") blnretval = Part.DeleteCustomInfo2("", "名称") a = InStr(c, "_") - 1 If a > 0 Then k = Left(c, a) t = Left(LTrim(e), 3) If t = "GBT" Then e = "GB/T" + Mid(k, 4) Else e = k End If b = Mid(c, a + 2) t = Right(c, 7) If t = ".SLDPRT" Or t = ".SLDASM" Then j = Len(b) - 7 Else j = Len(b) End If m = Left(b, j) d = InStr(m, "_") - 1 If d > 0 Then n = Left(m, d) Else n = m End If End If blnretval = Part.AddCustomInfo3("", "代号", swCustomInfoText, e) '增加自定义代号 blnretval = Part.AddCustomInfo3("", "名称", swCustomInfoText, n) '增加自定义名称 blnretval = Part.AddCustomInfo3("", "表面处理", swCustomInfoText, " ") End Sub
不在提醒

更专业内容正在努力生成中
知识树
Dim swApp As Object Dim Part As Object Dim SelMgr As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim Feature As Object Dim swmodel As ModelDoc2 Dim swmodelComps As Variant Dim swmodelComp As SldWorks.Component2 Dim swAsm As SldWorks.AssemblyDoc Dim a As Integer Dim b As String Dim m As String Dim e As String Dim k As String Dim t As String Dim c As String Dim j As Integer Dim n As String Dim d As Integer Dim strmat As String Dim tempvalue As String Sub main() 'link solidworks Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager swApp.ActiveDoc.ActiveView.FrameState = 1 Set swmodel = swApp.ActiveDoc Set swAsm = swmodel swmodelComps = swAsm.GetComponents(True) c = getasmchild(swmodelComps) End Sub Sub main() Private Function getasmchild(swmodelComps As Variant) Dim swmodelComp As SldWorks.Component2 Dim swmodel As ModelDoc2 Dim swAsm As SldWorks.AssemblyDoc For i = 0 To UBound(swmodelComps) Set swmodelComp = swmodelComps(i) Set swmodel = swmodelComp.GetModelDoc2 If swmodel.GetType = 1 Then MsgBox (swmodel.GetTitle) ElseIf swmodel.GetType = 2 Then swAsm = swmodel getasmchild (swAsm.GetComponents(True)) End If Next End Function '设定变量 c = swApp.ActiveDoc.GetTitle() '零件名 strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34) blnretval = Part.DeleteCustomInfo2("", "代号") blnretval = Part.DeleteCustomInfo2("", "名称") a = InStr(c, "_") - 1 If a > 0 Then k = Left(c, a) t = Left(LTrim(e), 3) If t = "GBT" Then e = "GB/T" + Mid(k, 4) Else e = k End If b = Mid(c, a + 2) t = Right(c, 7) If t = ".SLDPRT" Or t = ".SLDASM" Then j = Len(b) - 7 Else j = Len(b) End If m = Left(b, j) d = InStr(m, "_") - 1 If d > 0 Then n = Left(m, d) Else n = m End If End If blnretval = Part.AddCustomInfo3("", "代号", swCustomInfoText, e) '增加自定义代号 blnretval = Part.AddCustomInfo3("", "名称", swCustomInfoText, n) '增加自定义名称 blnretval = Part.AddCustomInfo3("", "表面处理", swCustomInfoText, " ") End Sub
在线客服