ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5974|回复: 5

在Excel读Solidworks的尺寸数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-10 20:04 | 显示全部楼层 |阅读模式
本帖最后由 ning84 于 2013-1-12 22:31 编辑

excel与Solidworks 通讯程序
Function SetSwPart()
  Dim SwApp As Object
  Dim SelMgr As Object, boolStatus As Boolean
  Dim longstatus As Long, longwarnings As Long
  'Debug.Print IsNull(swApp)
  'Set SwApp = CreateObject("sldworks.application")
  Set SwApp = GetObject(, "sldworks.application")
  'Debug.Print IsNull(swApp)
  Set SetSwPart = SwApp.ActiveDoc
  'Debug.Print SetSwPart.GetPathName
End Function
''****************************

Private Sub ReadSwDimensionInSldPrt()
  ''读SW的变量数据
  Dim oDic
  Set oDic = CreateObject("Scripting.Dictionary")
   
  
  nn = Range("A65536").End(3).Row
  Set Rng = Range("A1:Z" & nn)
  'Rng.ClearContents
    Dim swFeat As Object, swSubFeat As Object
    Dim swDispDim As Object, SwDim As Object
    Dim swAnn As Object
    Dim bRet As Boolean
   
    Set SwApp = CreateObject("SldWorks.Application")
    Set SwPart = SetSwPart
    Set swFeat = SwPart.FirstFeature
   
    'Debug.Print "File = " & SwPart.GetPathName
    kk = 1
    Do While Not swFeat Is Nothing
        Debug.Print "  " + swFeat.Name
        Set swSubFeat = swFeat.GetFirstSubFeature
        Do While Not swSubFeat Is Nothing
            Debug.Print "      " + swSubFeat.Name
            
            Set swDispDim = swSubFeat.GetFirstDisplayDimension
            Do While Not swDispDim Is Nothing
                Set swAnn = swDispDim.GetAnnotation
                Set SwDim = swDispDim.GetDimension
                Debug.Print "          [" & SwDim.FullName & "] = " & SwDim.GetSystemValue2("")
                'Debug.Print swDim.FullName, swDim.GetSystemValue2("")
                Set swDispDim = swSubFeat.GetNextDisplayDimension(swDispDim)
            Loop
            Set swSubFeat = swSubFeat.GetNextSubFeature
        Loop
        
        Set swDispDim = swFeat.GetFirstDisplayDimension
        Do While Not swDispDim Is Nothing
            Set swAnn = swDispDim.GetAnnotation
            Set SwDim = swDispDim.GetDimension
            
            Debug.Print "    [" & SwDim.FullName & "] = " & SwDim.GetSystemValue2("")
            Debug.Print SwDim.FullName, SwDim.GetSystemValue2("")
            Str = SwDim.FullName
            oArr = Split(Str, "@")
            Str = oArr(0) & "@" & oArr(1)
            '
            Cells(kk, 5) = SwDim.GetSystemValue2("")
            Cells(kk, 4) = oArr(1)
            Debug.Print SwDim.GetSystemValue2("")
            oDic(Str) = SwDim.GetSystemValue2("")
            
            Set swDispDim = swFeat.GetNextDisplayDimension(swDispDim)
            kk = kk + 1
        Loop
        Set swFeat = swFeat.GetNextFeature
    Loop
    Dim oArr1, oArr2, cc
    cc = 6
    oArr1 = oDic.keys: oArr2 = oDic.items
    For kk = 1 To UBound(oArr1) + 1
        Cells(kk, 1 + cc) = kk - 1
        Cells(kk, 2 + cc) = "=" & """Arr(""" & " & " & Cells(kk, 1 + cc).Address(0, 0) & " & " & """)="""
        Cells(kk, 3 + cc) = "'" & Chr(34) & oArr1(kk - 1) & Chr(34)
        Cells(kk, 4 + cc) = Split(oArr1(kk - 1), "@")(1)
        Cells(kk, 5 + cc) = oArr2(kk - 1)
   
    Next kk
End Sub
'--------------------------------------
'
' Preconditions:
'      (1) Part or assembly document is open.
'      (2) Display dimension is selected.
'
' Postconditions: None
'
'--------------------------------------
Private Sub ReadDimensionNameInSldDrw()
  ''读Drawing的尺寸,传送到Temp表。
  nn = Range("A65536").End(3).Row
  Set Rng = Range("A1:Z" & nn)
  Rng.ClearContents
    Dim swModel               As Object
    Dim SwDrawing             As Object
    Dim SwView                As Object
    Dim swDispDim             As Object
    Dim SwDim                 As Object
    Dim bRet                    As Boolean
    Dim Str
    ' Get SolidWorks application
    'Set swApp = Application.SldWorks
    ' Get active document
    Set swModel = SetSwPart
    ' Downcast model to a drawing
    Set SwDrawing = swModel
    ' The first view is the drawing sheet
    Set swSheetView = SwDrawing.GetFirstView
    ' Print its contents
    'PrintView swSheetView
    ' Get the sketch for the drawing sheet view
    'Set SwSketch = swSheetView.GetSketch
    ' Print its contents
    'PrintSketch swSketch
    ' Traverse all "real" views on the sheet
    ' First view on the sheet.
    Set SwView = swSheetView.GetNextView
    ''
    kk = 3
    Do While Not SwView Is Nothing
        'PrintView swView
        'Debug.Print swView.Name
        Set swDispDim = SwView.GetFirstDisplayDimension()
        While Not swDispDim Is Nothing
          Set SwDim = swDispDim.GetDimension
          oArr = Split(SwDim.FullName, "@")
          Str = oArr(0) & "@" & oArr(1)
          ss = Str 'Left(Str, InStr(Str, ".") - 1)
          Cells(kk, 1) = kk - 3
          Cells(kk, 2) = "=" & """     Arr(""" & " & " & Cells(kk, 1).Address(0, 0) & " & " & """)="""
          Cells(kk, 3) = Chr(34) & Str & Chr(34)
          Cells(kk, 4) = Chr(34) & SwDim.FullName & "@" & SwView.Name & Chr(34)
          'Cells(kk, 4) = "'" & swDim.FullName & "@" & swView.Name
          kk = kk + 1
          Set swDispDim = swDispDim.GetNext2
        Wend
       Set SwView = SwView.GetNextView
    Loop
End Sub

TA的精华主题

TA的得分主题

发表于 2016-3-21 14:00 | 显示全部楼层
如何使用??、、

TA的精华主题

TA的得分主题

发表于 2016-4-13 09:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
针对零件很好用,  但 部件下所有零件的尺寸读不出来,楼主能指导下不?

TA的精华主题

TA的得分主题

发表于 2016-4-14 08:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-15 16:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
伟大的楼主,还在不在,指导下:一个部件中怎么将所有零部件特征的尺寸遍历写入excel?

TA的精华主题

TA的得分主题

发表于 2019-3-21 09:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不知道怎么用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 02:42 , Processed in 0.036082 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表