SolidWorks*Excel+VBA-拉拉手搞一起
- 2026-09-25 06:05:01
SolidWorks*Excel+VBA-拉拉手搞一起拉拉小手,说声你好,SW老登! 你俩终于能搞一起了╮(︶﹏︶)╭ 看码: 还没完,这三段是打工的: 
所以,为了配合这个鬼东西,族谱还得单开一页存他户口╮( •́ω•̀ )╭ 
已关注
关注
重播 分享 赞
Sub OpenSwFiles() '打开文件Dim SwFname As String, k As Integer, Posn As Long, SwErr As LongDim SwApp As SldWorks.SldWorks, SwFileType As Byte, SwModel As ModelDoc2On Error Resume NextSet SwApp = GetObject(, "SldWorks.Application")If SwApp Is Nothing ThenMsgBox "请先打开SolidWorks!", vbExclamation, "不正经的机械仙人"Exit SubEnd IfWith ThisWorkbook.ActiveSheetApplication.StatusBar = "正在打开:"If myselcondi ThenFor k = 1 To SelnumberProcessBarUpdater k, Selnumber, "正在打开:", "共" & Selnumber & "个,第" & k & "个 ..."Posn = Selarray(k)SwFname = .Cells(Posn, 2) & "\" & .Cells(Posn, 3) & .Cells(Posn, 4)If Dir(SwFname) = "" Then.Cells(Posn, 1) = "文件不存在!"ElseIf UCase(.Cells(Posn, 4)) = ".SLDPRT" ThenSwFileType = swDocPARTElseSwFileType = swDocASSEMBLYEnd IfSet SwModel = SwApp.ActivateDoc2(SwFname, False, SwErr)If SwModel Is Nothing Then Set SwModel = SwApp.OpenDoc(SwFname, SwFileType)If SwModel Is Nothing Then.Cells(Posn, 1) = "重名或高版本,打开失败!"Else.Cells(Posn, 1) = "打开成功!"End IfSet SwModel = NothingEnd IfNextElseMsgBox "未选择正确行,程序结束!", vbExclamation, "不正经的机械仙人"End IfEnd WithApplication.StatusBar = FalseEnd SubSub StartSwApp()'启动SW程序Dim SwApp As SldWorks.SldWorks, i As ByteDim SwRevision As String, SwOpenPath As StringOn Error Resume NextSet SwApp = GetObject(, "SldWorks.Application")If SwApp Is Nothing ThenIf ThisWorkbook.Sheets("参数设置").Range("C2").Value = "" ThenSet SwApp = CreateObject("SldWorks.Application")ThisWorkbook.Sheets("参数设置").Range("C2").Value = SwApp.RevisionNumberSwApp.ExitAppEnd IfSwRevision = Left(ThisWorkbook.Sheets("参数设置").Range("C2").Value, 2)SwOpenPath = myregedit("HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SldWorks.Application." & SwRevision & "\shell\open\command\", "", "", "R")SwOpenPath = Left(SwOpenPath, InStrRev(SwOpenPath, " ") - 1)Shell SwOpenPath, vbNormalFocusDo Until Not SwApp Is Nothing '延迟等待Set SwApp = GetObject(, "SldWorks.Application")Sleep 300i = i + 1If i > 100 Then Exit DoLoopIf SwApp Is Nothing Then MsgBox "SolidWorks程序启动失败!", vbCritical, "不正经的机械仙人"ElseMsgBox "SolidWorks程序已运行!", vbExclamation, "不正经的机械仙人"End IfSet SwApp = NothingEnd Sub
Option ExplicitPublic Selarray As Variant, Selnumber As Integer '选择的行数Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Function myselcondi() As Boolean '处理选择操作Dim MySelection() As IntegerDim i As Long, j As LongDim Selarea As Range, Selrange As RangeReDim MySelection(1 To 1000) As IntegerOn Error Resume NextErr.Clear: j = 1000Selnumber = 1For Each Selarea In Selection.AreasFor Each Selrange In Selarea.RowsIf Not (Selrange.Hidden) And Selrange.Row > 2 ThenMySelection(Selnumber) = Selrange.RowSelnumber = Selnumber + 1If Selnumber > j - 2 Thenj = j + 1000ReDim Preserve MySelection(1 To j)End IfEnd IfNextNextSelnumber = Selnumber - 1If Selnumber = 0 Thenmyselcondi = False: Exit FunctionEnd IfReDim Preserve MySelection(1 To Selnumber) As Integer: Selarray = MySelectionFor i = 1 To SelnumberMySelection(i) = WorksheetFunction.Small(Selarray, i)NextSelarray = MySelection: myselcondi = TrueEnd FunctionFunction ProcessBarUpdater(CurNum As Integer, TotalNum As Integer, strTopic As String, endTopic As String)Dim intNumberOfall As Integer, intCurrentOfBars As IntegerintNumberOfall = 35 '总显示长度intCurrentOfBars = (CurNum / TotalNum) * intNumberOfallApplication.StatusBar = strTopic & "「" & String(intCurrentOfBars, Chr(47)) & String(intNumberOfall - intCurrentOfBars, Chr(45)) & "」" & endTopicEnd FunctionFunction myregedit(mykey As String, myval As Variant, mytype As String, mymod As String) As VariantDim oWshellSet oWshell = CreateObject("WScript.Shell")Select Case TrueCase mymod = "R" '读myregedit = oWshell.RegRead(mykey)Case mymod = "W" '写oWshell.RegWrite mykey, myval, mytypeCase mymod = "D" '删oWshell.RegDelete mykeyEnd SelectSet oWshell = NothingEnd Function
为什么启动SW的代码要搞这么复杂,还牵扯上了注册表?
当用CreateObject创建启动SW程序后,GetObject怎么也获取不到对象(งᵒ̌皿ᵒ̌)ง⁼³₌₃
只有通过正常打开exe程序,GetObject才能连接上。
什么鬼东西(。・ˇ_ˇ・。:)


本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。