SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

好品数字
好品数字
查看: 876|回复: 39
打印 上一主题 下一主题

求梁大帮助指点

[复制链接]

18

主题

81

帖子

144

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
293
QQ
跳转到指定楼层
楼主
发表于 2015-12-1 11:42:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
梁大,我现在研究SW批处理,想让运行时自动批量打开某一个文件夹下的零件和装配体文件,门外汉不知道完成这个功能的这句语句的代码应该怎么写?请求梁大指点下。谢谢。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享教程|习题|模型|技巧 点赞点赞10182 拍砖拍砖623
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

13

主题

68

帖子

87

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
207
QQ
沙发
发表于 2015-12-1 11:42:08 | 只看该作者
指點不敢,相互研習就是
如下試試, inputbox 之對話表輸入文件路徑  如 C:TEST     注意兩個  "  " 符號

OpenFile part_asm.rar (10.23 KB, 下载次数: 113) swp檔
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

13

主题

63

帖子

79

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
203
QQ
板凳
发表于 2015-12-1 11:42:58 | 只看该作者
@ryouss  梁大,求指点
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

12

主题

63

帖子

95

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
223
QQ
地板
发表于 2015-12-1 11:43:06 | 只看该作者
谢谢梁大。
我原来这样做的。我以为有可以在同一个语句里同时设定打开零件和装配体的办法,看来还是只能用这种先处理零件然后再处理组件的方式了。
谢谢梁大指点。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

15

主题

60

帖子

75

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
224
QQ
5#
发表于 2015-12-1 11:43:48 | 只看该作者

   经典案例图书
输入的路径后面必须带上那个斜杠,比如梁大例子里的“C:test“,test单启后面的那个斜杠必须带上。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

15

主题

82

帖子

112

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
285
QQ
6#
发表于 2015-12-1 11:45:00 | 只看该作者
应该不会。12版的库就是12版的库,16版我没装过,应该也有16版自己的库的。反正我在12版和14版上的库是不一样的,都是和各自的SW版本对应的。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

12

主题

62

帖子

76

金币

天使

Rank: 2Rank: 2

积分
196
QQ
7#
发表于 2015-12-1 11:45:49 | 只看该作者

   经典案例图书
指令是死的,編程是活的,
所以編程的寫法林林總總形形色色,
若是小編程尚不需計較寫法,能達結果就好,
大編程就要考慮許多如執行效率日後維修及易用性擴展性...
如下是另個寫法做參考,邏輯來說應該是會比2#效率好(若是開檔不多也是看不出),
因只是在開檔文件路徑搜找一遍即可,2#是要搜找兩遍.

OpenFile Part_Aam_1.rar (9.2 KB, 下载次数: 204) swp
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

19

主题

101

帖子

100

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
294
QQ
8#
发表于 2015-12-1 11:47:00 | 只看该作者
是的,我原来想的就是这样,在路径下找一遍,碰到装配体时就打开装配体,碰到零件文件就打开零件文件,整个目录下只搜寻一遍。
谢谢梁大指点,下载研究了。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

13

主题

78

帖子

95

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
238
QQ
9#
发表于 2015-12-1 11:48:21 | 只看该作者
如下是SW API 有關開檔的原文資料作參考
Select All in Part, Assembly, or Drawing (VBA)
This example shows how to select everything in the graphics area of a part or assembly document or in the sheet of a drawing document, as if you box-selected everything in the graphics area or the sheet.
' ******************************************************************************
' Preconditions:
' 1. Part, assembly, and drawing documents opened by the macro
'    exist.
' 2. Open the Immediate window.
'
' Postconditions:
' 1. Examine:
'    * Sheet to verify that all of the entities in the drawing
'      are selected.
'    * Immediate window to see how many entities are selected.
' 2. Click Window > bolt-assembly.sldasm to switch to the assembly
'    document.
' 3. Examine:
'    * Graphics area to verify that the all of the components
'      in the assembly are selected.
'    * Immediate window to see how many components are selected.
' 4. Click Window > bolt.sldprt to switch to the part document.
' 5. Examine:
'    * Graphics area to verify that the all of the edges
'      in the part are selected.
'    * Immediate window to see how many edges are selected.
'
' NOTE: Because these documents are used elsewhere, do not save any
' changes when closing them.
' ******************************************************************************
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swSelMgr As SldWorks.SelectionMgr
Dim partFile As String
Dim assemblyFile As String
Dim drawingFile As String
Dim errors As Long
Dim warnings As Long
Dim selCount As Integer
Sub main()
    Set swApp = Application.SldWorks
   
    ' Open a part document and select all edges in the part
    partFile = "C:Program FilesSolidWorks CorpSolidWorkssamplesintroswbolt.sldprt"
    Set swModel = swApp.OpenDoc6(partFile, swDocPART, swOpenDocOptions_Silent, "", errors, warnings)
    Set swModelDocExt = swModel.Extension
    Set swSelMgr = swModel.SelectionManager
    'Select all edges in part
    SelectAllinDocument
   
    ' Open an assembly document and select all components in the assembly
    assemblyFile = "C:Program FilesSolidWorks CorpSolidWorkssamplesintroswbolt-assembly.sldasm"
    Set swModel = swApp.OpenDoc6(assemblyFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)
    Set swModelDocExt = swModel.Extension
    Set swSelMgr = swModel.SelectionManager
    'Select all components in assembly
    SelectAllinDocument
   
    ' Open a drawing document and select all entities in the drawing
    drawingFile = "C:Program FilesSolidWorks CorpSolidWorkssamplesintroswbolt-assembly.slddrw"
    Set swModel = swApp.OpenDoc6(drawingFile, swDocDRAWING, swOpenDocOptions_Silent, "", errors, warnings)
    Set swModelDocExt = swModel.Extension
    Set swSelMgr = swModel.SelectionManager
    'Select all entities in drawing
    SelectAllinDocument
   
End Sub
Sub SelectAllinDocument()
    ' Select all edges in a part, all components in an assembly,
    ' or all entities in a drawing
     swModelDocExt.SelectAll   
    ' Get and print the number of selections
    selCount = 0
    selCount = swSelMgr.GetSelectedObjectCount2(-1)   
    Select Case swModel.GetType
    Case swDocPART
        Debug.Print "Number of edges selected in part          = " & selCount
    Case swDocASSEMBLY
        Debug.Print "Number of components selected in assembly = " & selCount
    Case swDocDRAWING
        Debug.Print "Number of entities selected in drawing    = " & selCount
    Case Else
        Debug.Print "Unknown type of document."
    End Select
   
End Sub
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

15

主题

87

帖子

150

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
314
QQ
10#
发表于 2015-12-1 11:48:22 | 只看该作者
API帮助是英文版的,想搜索都不知道用什么关键词,梁大见笑啦。
另,您昨天发的那个文件,因为我水平太差昨天晚上看了想了很久,应用应该还是能够瞎应用上了,但是还是没理解透彻,第一点就是不知道这(或者是所有的打开SW文档的)的原理是不是先把某个目录下的文件调入内存,然后去分析它的后缀名,后缀名最后三位符合您这文件里设定的"prt"或者"asm"时才正式在SW软件里打开文件?第二点就是,您的这个代码并没有指定当后缀名后三位是DRW时怎么处理,是不是后缀名后三位是DRW时SW默认不会打开这个文件而是只有在后三位符号文件里设定的“prt"或者"asm"时才会打开文件进行处理?
因为家里的电脑配置真的有点烂了,09年时买的电脑,平时用得很少,一直没升级,跑现在的版本的SW太卡,有的内容试过了,有的还没尝试试验,有啥常识性的错误请梁大谅解。明天把您这文件拷到公司去试验研究一天,谢谢梁大了。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

20

主题

69

帖子

141

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
317
QQ
11#
发表于 2015-12-1 11:48:44 | 只看该作者
怎麼發在這裡呢!<font color="Red">太不尊重樓主了[/color]
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

71

帖子

55

金币

天使

Rank: 2Rank: 2

积分
177
QQ
12#
发表于 2015-12-1 11:49:22 | 只看该作者
Select Case Type_
'開零件檔
            Case &quot;PRT&quot;
                Set swModel = swApp.OpenDoc6(path + sFileName, swDocPART, swOpenDocOptions_Silent, &quot;&quot;, nErrors, nWarnings) '開零件檔
'開組件檔
            Case &quot;ASM&quot;
                Set swModel = swApp.OpenDoc6(path + sFileName, swDocASSEMBLY, swOpenDocOptions_Silent, &quot;&quot;, nErrors, nWarnings) '開組件檔
        End Select
是如上語句把工程圖篩選掉
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

19

主题

76

帖子

180

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
358
QQ
13#
发表于 2015-12-1 11:50:08 | 只看该作者
        Select Case Type_
        '開零件檔
       Case &quot;PRT&quot;
       Set swModel = swApp.OpenDoc6(path + sFileName, swDocPART, swOpenDocOptions_Silent, &quot;&quot;, nErrors, nWarnings) '開零件檔
       '開組件檔
       Case &quot;ASM&quot;
       Set swModel = swApp.OpenDoc6(path + sFileName, swDocASSEMBLY, swOpenDocOptions_Silent, &quot;&quot;, nErrors, nWarnings) '開組件檔
       End Select

复制代码
1. 是如上語句把工程圖篩選掉當第1項的  Type_ 取得是 工程圖  DRW  就跳出第8項.
    若是 Type_ 取得是 零件  PRT  就跳到第4項,執行  Set swModel = swApp.OpenDoc6(path + sFileName, swDocPART, swOpenDocOptions_Silent, &quot;&quot;, nErrors, nWarnings) '開零件檔   
    再跳到第8項,結束選擇循環.
Select Case Type_
           .
          執行內容
           .
End Select
如上是個選擇循環
2. 查有關開檔的關鍵語是   OpenDoc6
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

17

主题

66

帖子

97

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
250
QQ
14#
发表于 2015-12-1 11:50:28 | 只看该作者
梁大,从回您上个帖后,一直在研究学习您的这个文件,到现在终于理解一二了。把提取文件的代号和名称写入配置特定属性栏的集成进去了。谢谢梁大指点了。
附上集成批量提取文件名中的代号和名称的文件,一方面请梁大有空时看看再指点指点哪里可以进一步改进,另一方面给有可能需要的朋友下载研究改进与使用。
批量提取代号名称写入配置特定属性.rar (17.07 KB, 下载次数: 11)
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

12

主题

68

帖子

263

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
415
QQ
15#
发表于 2015-12-1 11:50:46 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

不好意思,打扰了
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

69

帖子

98

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
227
QQ
16#
发表于 2015-12-1 11:51:02 | 只看该作者

   经典案例图书
N大真用心呀,謝謝分享!
看了,有空時可以再幫做簡化.
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

14

主题

78

帖子

80

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
245
QQ
17#
发表于 2015-12-1 11:51:58 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

12#的簡化參考

OpenFile_Configuration.rar (11.62 KB, 下载次数: 136) SWP 2015/12/4 14:00 更新
    '
    ' 在某文件路徑下批量開零件及裝配件並寫入配置特定
    ' 開 SW 軟件,執行 main 主程式
    ' sc liang 2015/12/3
    ' 測試版 2012 sp4
    '
    '定義變數型態
    Dim swApp            As SldWorks.SldWorks
    Dim swModel          As SldWorks.ModelDoc
    Dim boolstatus       As Boolean
    Dim Part             As Object
    Dim sFileName        As String
    Dim path             As String
    Dim Type_            As String
    Dim nErrors          As Long
    Dim nWarnings        As Long
    Dim S1               As Integer
    Dim S2               As Integer
    Dim Path_Name        As String
    Dim Code_Name_C      As String
    Dim Code_            As String
    Dim Name_            As String
    Dim strmat           As String
    Dim strmas           As String
    Dim swModelDoc       As SldWorks.ModelDoc2
    Dim swConfig         As SldWorks.Configuration
    Dim CustPropMgr      As SldWorks.CustomPropertyManager
    '~~~ 主程式 ~~~
    Sub Main()
        Set swApp = Application.SldWorks
        Set swModel = swApp.ActiveDoc
        path = InputBox(&quot;Enter a folder path containing any Solidworks files (For example '' C:test '' )&quot;, &quot;Parts path location&quot;) '鍵入存檔路徑
        sFileName = Dir(path & &quot;*.sld*&quot;) '取出SW檔

    '循環開檔
         Do Until sFileName = &quot;&quot;
            Type_ = Right(sFileName, 3) '取得SW文件擴展名後三位
            Select Case Type_ '判定SW文件型式
    '開零件檔
                Case &quot;PRT&quot;
                    Set swModel = swApp.OpenDoc6(path + sFileName, swDocPART, swOpenDocOptions_Silent, &quot;&quot;, nErrors, nWarnings)
                    Call Configuration_ '呼叫副程式
    '開組件檔
                Case &quot;ASM&quot;
                    Set swModel = swApp.OpenDoc6(path + sFileName, swDocASSEMBLY, swOpenDocOptions_Silent, &quot;&quot;, nErrors, nWarnings)
                    Call Configuration_ '呼叫副程式
            End Select
            swModel.Save '存檔
            swApp.CloseDoc swModel.GetTitle '關檔
            Set swModel = Nothing
            sFileName = Dir '同路徑取出下個SW文件檔名
        Loop
    End Sub
    '~~~ 執行配置特定 副程式 ~~~
    Public Sub Configuration_()
        Set swModelDoc = swApp.ActiveDoc
        Set swConfig = swModelDoc.ConfigurationManager.ActiveConfiguration
        Set CustPropMgr = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name) '配置特定之延伸設定
    '設定變量
        Path_Name = swApp.ActiveDoc.GetPathName '取得&quot;路徑名稱及擴展名&quot;,不管擴展名是否隱藏
        S1 = InStrRev(Path_Name, &quot;&quot;) '符號在路徑之最後位置數
        Code_Name_C = Right(Path_Name, Len(Path_Name) - S1) '取得&quot;件號_名稱.擴展名&quot;
        S2 = InStr(Code_Name_C, &quot;_&quot;) '_符號在&quot;件號_名稱.擴展名&quot;之位置數
        Code_ = Left(Code_Name_C, S2 - 1) '取得&quot;件號&quot;
        Name_ = Mid(Code_Name_C, S2 + 1, Len(Code_Name_C) - S2 - 7) '取得&quot;件號_名稱&quot;
        strmat = Chr(34) + Trim(&quot;SW-Material&quot; + &quot;@@&quot;) + &quot;@&quot; + Code_Name_C + Chr(34) '屬性材料
        strmas = Chr(34) + Trim(&quot;SW-Mass&quot; + &quot;@@&quot;) + &quot;@&quot; + Code_Name_C + Chr(34) '屬性單重
    '刪除欄
        CustPropMgr.Delete (&quot;代號&quot;)
        CustPropMgr.Delete (&quot;名稱&quot;)
        CustPropMgr.Delete (&quot;材料&quot;)
        CustPropMgr.Delete (&quot;單重&quot;)
    '新增
        CustPropMgr.Add2 &quot;代號&quot;, swCustomInfoText, Code_
        CustPropMgr.Add2 &quot;名稱&quot;, swCustomInfoText, Name_
        CustPropMgr.Add2 &quot;材料&quot;, swCustomInfoText, strmat
        CustPropMgr.Add2 &quot;單重&quot;, swCustomInfoText, strmas
        CustPropMgr.Add2 &quot;備註&quot;, swCustomInfoText, &quot; &quot;
    End Sub

复制代码
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

65

帖子

83

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
205
QQ
18#
发表于 2015-12-1 11:52:19 | 只看该作者

   经典案例图书
谢谢梁大,
这才完全是我想要的文件了。因为我觉得开启零件和开启装配体后,要在两段打开文件代码后分别执行一段完全一模一样的代码,这就不是那么合理的了,不仅是调试时比较烦琐,而且在下次万一有需要更改时,也容易漏改掉两段相同代码中的某一处。
没系统的学过VB VC这些东西,脑子里有构想但不知道怎么用代码编出这个来,梁大是彻底的帮我解惑了,谢谢梁大。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

15

主题

71

帖子

161

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
329
QQ
19#
发表于 2015-12-1 11:53:00 | 只看该作者
15#編程如下補加紅色兩句,找到  &quot;工程圖&quot;  不做存檔關檔之處理.
           Case &quot;ASM&quot;
                Set swModel =swApp.OpenDoc6(path + sFileName, swDocASSEMBLY, swOpenDocOptions_Silent,&quot;&quot;, nErrors, nWarnings)
                Call Configuration_ '呼叫副程式
       End Select
       If Type_ <> &quot;DRW&quot; Then
       swModel.Save '存檔
       swApp.CloseDoc swModel.GetTitle '關檔
      End If
       Set swModel = Nothing
       sFileName = Dir '同路徑取出下個SW文件檔名
   Loop
End Sub
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

69

帖子

90

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
211
QQ
20#
发表于 2015-12-1 11:53:24 | 只看该作者
梁大,可是原来的代码应该本身就没有开启工程图文档呀,为什么后面要再加上这一句辨别是非工程图时存档减档的代码呢?
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-5-15 05:37 , Processed in 0.200912 second(s), 37 queries .

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

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