iCAx开思网

标题: 宏-装配树中打开选中文件所在的文件夹 [打印本页]

作者: lkai    时间: 2017-7-6 08:33
标题: 宏-装配树中打开选中文件所在的文件夹
本帖最后由 lkai 于 2017-7-11 13:47 编辑

本宏功能:在装配树中打开选中文件所在的文件夹
编码SolidWorks版本:SolidWorks2013
程序简陋,请高手完善、修正。
谢谢!
[attach]1250729[/attach]

宏文件源码如下:




作者: shui321yang    时间: 2017-7-6 09:45
下载学习
作者: qiminger    时间: 2017-7-6 11:18
谢谢分享,学习一下。

作者: sxl_sxl    时间: 2017-7-6 14:33
谢谢分享,学习一下。
作者: topenny    时间: 2017-7-9 07:15
谢谢楼主的分享!!
作者: yx1991    时间: 2017-7-9 20:42
谢谢,楼主
作者: scattie    时间: 2017-7-10 09:10
感謝分享

作者: tuqiang    时间: 2017-7-11 19:58
高手,接着继续往下走


作者: xiabulai    时间: 2017-7-12 06:16
谢谢分享
作者: 莱虫    时间: 2017-7-18 18:12
好像有现成功能呀!
[attach]1250938[/attach]
作者: lkai    时间: 2017-7-18 21:56
莱虫 发表于 2017-7-18 18:12
好像有现成功能呀!

在装配体文件中,直接打开某个零部件所在文件夹来的更爽快些!

作者: peng18067    时间: 2018-1-26 12:29
这个收藏了啊
作者: chaomogu    时间: 2018-1-26 12:56
速来学习

作者: 523491086    时间: 2018-1-27 16:29
非常感谢,楼主棒棒的

作者: chaomogu    时间: 2018-1-30 09:52
测试了下,很好用。不选中,直接执行打开当前零部件。
有一点我觉得不好,就是同一个装配体打开同一个同一个文件夹,能不能把它合并呢。不然会打开很多相同文件夹。
作者: lxlaner    时间: 2018-5-6 09:23
装配树中打开选中文件所在的文件夹

作者: 口风琴    时间: 2018-5-17 19:01
谢谢分享,学习一下
作者: 841100919    时间: 2018-5-22 20:24
确实很强大的程序

作者: 蓝神oy    时间: 2018-6-9 23:07
不知道贵不贵

作者: 人穷貌丑    时间: 2018-6-10 15:22
谢谢分享

作者: gfzms2590    时间: 2018-6-11 14:55
谢谢分享,学习一下。


作者: w6304013    时间: 2018-7-9 00:24
好东西,我正需要

作者: w6304013    时间: 2018-7-9 00:28
好东西,我正需要

作者: zhangjj-1    时间: 2018-7-12 15:45
灰常感谢楼主
作者: qiminger    时间: 2018-7-18 12:45
本帖最后由 qiminger 于 2018-7-18 16:03 编辑

十分感谢楼主朋友分享这么好的代码。
有两个问题,如果楼主朋友会请不吝赐教,
1、从部件图中,选择一零件,获得该零件文件名(完整路径)的方法;
2、从部件图的明细表中,选择一项目,获得该零件或部件文件名(完整路径)的方法。



作者: 1009286896    时间: 2018-7-19 13:33
感谢 楼主 分享
作者: Learning_deng    时间: 2018-7-21 11:17
学习下。
作者: zctao1966    时间: 2018-7-27 13:55
谢谢分享,学习一下
作者: caption_cn    时间: 2018-7-31 23:24
有点意思 下来看看。

作者: 夕梦恋    时间: 2018-8-4 18:16
过来看看   

作者: pylmj098    时间: 2018-8-5 14:32
谢谢分享


作者: luntan8866    时间: 2018-8-6 05:59
这个还是很有用的。
作者: makejon    时间: 2018-10-3 08:02
这个很实用
作者: qxzch    时间: 2018-10-5 16:35
谢谢楼主分享!
作者: a8012024    时间: 2018-10-8 06:37
谢谢分享!
作者: liruihaoyou    时间: 2018-10-9 16:05
这个功能也非常常用
作者: 风中de沙    时间: 2018-11-27 12:56
谢谢楼主的分享!学习下

作者: 风中de沙    时间: 2018-11-27 12:58
谢谢楼主的分享!学习下

作者: pxz8005    时间: 2018-11-28 09:23
谢谢分享!!!

作者: scattie    时间: 2018-11-28 10:54
,谢谢分享!!!

作者: Trouble12138    时间: 2018-11-29 10:47
谢谢楼主分享
作者: dubailiu    时间: 2018-12-10 21:53
感谢楼主分享!

作者: scattie    时间: 2018-12-11 09:40
感谢楼主的分享
作者: alicen_mo    时间: 2018-12-15 12:52
谢谢,学习了。。

作者: ningxin4567    时间: 2018-12-15 15:51
看看有的时候用到

作者: hnkzzy    时间: 2019-2-13 10:55
楼主厉害。谢谢分享!
作者: gao6300    时间: 2019-3-19 08:14
下载学习,!!!!!!!!!感谢分享!!!!!!!!!

作者: scattie    时间: 2019-3-20 13:19
学习学习
作者: wmx0910    时间: 2019-3-23 13:36
感觉挺有用处

作者: wmx0910    时间: 2019-3-23 13:54
感觉不错

作者: 一品龙    时间: 2019-3-26 08:50
好东西

作者: scattie    时间: 2019-3-26 14:34
厉害   支持一下

作者: a4778006    时间: 2019-4-12 11:37
感谢分享。。。

作者: zhjan518    时间: 2019-4-12 17:57
谢谢分享,学习一下
作者: 735057167    时间: 2019-4-16 20:39
先收藏了

作者: scattie    时间: 2019-4-17 09:06
不错的资料

作者: zhiwy    时间: 2019-4-22 15:20
宏文件源码看看
作者: idonot    时间: 2019-5-16 22:58
学习楼主的好方法

作者: linkral    时间: 2019-5-20 19:07
直接在装配体是打开该文件所在的文件夹吗》?
作者: xiaocake    时间: 2019-5-21 09:42
看看,谢谢分享!

作者: scattie    时间: 2019-5-21 14:59
厉害   支持一下

作者: 188chp    时间: 2019-5-25 10:01
谢谢分享!!!

作者: scattie    时间: 2019-5-27 09:41
谢谢分享!
作者: kelly_mm    时间: 2019-5-29 10:54
虽然觉得实用性不大,还是要支持一下原创~
作者: scattie    时间: 2019-5-29 11:27
感谢楼主的分享
作者: JX小鱼    时间: 2019-6-19 18:23
谢谢楼主
作者: JX小鱼    时间: 2019-6-19 18:24
谢谢楼主分享
作者: zctao1966    时间: 2019-7-17 23:12
这个功能比较实用,谢谢分享
作者: 120120    时间: 2019-8-4 12:36
好,不错,学习中

作者: Trouble12138    时间: 2019-8-5 06:24
谢谢江枫大神的分享  太厉害了

作者: lhz1949    时间: 2019-8-15 22:26
都是好东西啊,建议收藏

作者: scattie    时间: 2019-8-16 10:31
好东西,谢谢分享!!!

作者: jyzas    时间: 2019-9-6 16:40
谢谢楼主分享。。。。。。。。。。
作者: jyzas    时间: 2019-9-6 16:43
谢谢楼主分享。。。。。。。。
作者: 清风_梦想    时间: 2019-12-11 14:34
学习学习,加深软件操作技能!!!

作者: whdong76    时间: 2019-12-19 15:16
多谢楼主分享....
作者: 白吧白啊    时间: 2019-12-25 10:03
好东东,谢谢分享

作者: 玄心    时间: 2019-12-25 18:45
感谢大佬
作者: hh4984    时间: 2019-12-26 08:39
学习学习!!!!!!!!!!!

作者: idonot    时间: 2020-1-4 21:43
chaomogu 发表于 2018-1-30 09:52
测试了下,很好用。不选中,直接执行打开当前零部件。
有一点我觉得不好,就是同一个装配体打开同一个同一 ...

       一直在使用这个宏,可以在装配体以及零件、工程图等环境直接打开并定位文件位置。但一直也存在这个问题,每使用一次宏,就会打开一次文件夹,哪怕文件夹是相同的。程序内的
ret = Shell("explorer.exe /e,/select," & swModel.GetPathName, vbNormalFocus)语句会一次次的打开文件夹。任务栏内会有大量相同的文件夹。在网上查找VB是否有类似功能的代码,搜索到的大部分也是这句。
      黄天不负苦心人,不停的寻找下,终于找到另一种解法,可以实现“激活”文件夹,而不是重复打开。权限不够,无法上传原贴网址,百度搜索:《VB6调用API打开目标文件所在文件夹且选中目标文件》,作者:唐细刚。该段代码添加到楼主的宏中后,如果任务栏内没有文件夹打开,则新打开文件夹,如果已经有相同路径的文件夹打开,则激活该文件夹并重新定位选中文件。但实际使用时,在莫名情况下,总会出现错误,以下是截图。在网上查找错误原因,也几乎找不到原因。以下是修改的代码,鄙人初入宏门,代码不精。未经楼主以及“那段”代码作者的同意,擅自修改。如有不当,请多多包涵。也希望各路大神能够早点看到,指点迷津。
  1. ' ------------------------------------------------------------------------------
  2. ' OpenFileFolder
  3. ' OpenFileFolder.swp -  by Lunkay, Copyright 2017/6/29
  4. ' Contact:  313618812@qq.com (Lunkay)

  5. ' 功能:
  6. '       打开所选文件所在的文件夹,并选中目标。
  7. '
  8. ' 使用方法:
  9. ' 1、不选中任何文件,打开程序
  10. ' 2、选中装配体中的子件,打开程序
  11. ' -------------------------------------------------------------------------------

  12. '#If VBA7 Then
  13.      Private Declare PtrSafe Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
  14. '#Else
  15.      'Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
  16. '#End If









  17. '''''''''''''''''''''''''''''''''''''''''''''''''''''''
  18. '''''''''''''''''''''''''''''''''''''''''''''''''''''''

  19. Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  20. Private Declare PtrSafe Function SHCreateFromPathW Lib "Shell32" Alias "ILCreateFromPathA" (ByVal lpFileName As String) As Long
  21. Private Declare PtrSafe Sub SHFree Lib "Shell32" Alias "ILFree" (ByVal lngPidl As Long)
  22. Private Declare PtrSafe Function SHOpenFolderAndSelectItems Lib "Shell32" ( _
  23.         ByVal pidlFolder As Long, _
  24.         ByVal cidl As Long, _
  25.         ByVal apidl As Long, _
  26.         ByVal dwFlags As Long) As Long
  27. '增加判断文件是否存在
  28. Private Const INVALID_HANDLE_VALUE = -1
  29. Private Const MAX_PATH = 260
  30. Private Type FILETIME
  31.     dwLowDateTime As Long
  32.     dwHighDateTime As Long
  33. End Type
  34. Private Type WIN32_FIND_DATA
  35.     dwFileAttributes As Long
  36.     ftCreationTime As FILETIME
  37.     ftLastAccessTime As FILETIME
  38.     ftLastWriteTime As FILETIME
  39.     nFileSizeHigh As Long
  40.     nFileSizeLow As Long
  41.     dwReserved0 As Long
  42.     dwReserved1 As Long
  43.     cFileName As String * MAX_PATH
  44.     cAlternate As String * 14
  45. End Type
  46. Private Declare PtrSafe Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _
  47.     ByVal lpFileName As String, _
  48.     lpFindFileData As WIN32_FIND_DATA) As Long
  49. Private Declare PtrSafe Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long




  50. Dim swApp As SldWorks.SldWorks
  51. Dim swModel As SldWorks.ModelDoc2
  52. Dim swComp As SldWorks.Component2
  53. Dim swCompModel As SldWorks.ModelDoc2

  54. Dim sCompName As String

  55. Dim sMgr As SldWorks.SelectionMgr
  56. Dim sTyp As SwConst.swSelectType_e
  57. Dim iReply As String
  58. Dim swFrame As SldWorks.Frame ' declare status bar object


  59. Dim nRetval As Long
  60. Dim bRet                        As Boolean
  61. Dim nErrors As Long
  62. Dim nWarnings As Long
  63. Dim mlngSWFileType As Long
  64. Dim ret As Integer

  65. Dim FilePath As String

  66. Dim ml As String

  67. Dim keys(0 To 255) As Byte


  68. Const MINSELECTIONS = 1


  69. Private Function FileExists(ByVal lpFileName As String) As Boolean
  70.     Dim tpWFD As WIN32_FIND_DATA
  71.     Dim lngFile As Long
  72.     lngFile = FindFirstFile(lpFileName, tpWFD)
  73.     Sleep 25
  74.     FileExists = lngFile <> INVALID_HANDLE_VALUE
  75.     Sleep 25
  76.     If lngFile Then Call FindClose(lngFile)
  77.     Sleep 25
  78. End Function
  79. '调用成功返回 True,否则返回 False
  80. Public Function OpenFolderAndSetFileFocus(ByVal lpFileName As String) As Boolean
  81.     On Error Resume Next
  82.     Dim lngPidl As Long
  83.     Dim lngRet  As Long
  84.     Dim strFile As String
  85.     'strFile = Trim(lpFileName) 原来代码
  86.     strFile = lpFileName
  87.     If FileExists(strFile) = False Then Exit Function
  88.     lngPidl = SHCreateFromPathW(strFile & vbNullChar)
  89.     Sleep 25
  90.     If lngPidl <> 0 Then
  91.        lngRet = SHOpenFolderAndSelectItems(lngPidl, 0, 0, 0)
  92.        Sleep 25
  93.        If lngRet = 0 Then
  94.           OpenFolderAndSetFileFocus = True
  95.           Sleep 25
  96.        End If
  97.        Call SHFree(lngPidl)
  98.        Sleep 25
  99.     End If
  100. End Function





  101. Sub main()

  102.     Set swApp = Application.SldWorks
  103.   
  104.     ' get current model
  105.     Set swModel = swApp.ActiveDoc

  106.     ' check if a document is active
  107.     If swModel Is Nothing Then
  108.         MsgBox "请先打开一个需要打开其所在位置的文件!  ", vbCritical, "打开文件所在位置 By Lunkay"
  109.         End

  110.     End If

  111.     If swModel.GetType = 2 Then

  112.         Set sMgr = swModel.SelectionManager
  113.         'swModel.ClearSelection2 True
  114.         'MsgBox "请选择要打开位置的文件", vbCritical, "打开文件所在位置 By Lunkay"
  115.         
  116.         If sMgr.GetSelectedObjectCount = 1 Or sMgr.GetSelectedObjectCount = 0 Then
  117.             GetKeyboardState keys(0)

  118.             If keys(27) > 127 Then End
  119.             
  120.             GoTo AA
  121.             
  122.             
  123.         Else
  124.             MsgBox "请选择要打开位置的文件", vbCritical, "打开文件所在位置 By Lunkay"
  125.         
  126.         End If
  127.         
  128.         While sMgr.GetSelectedObjectCount < MINSELECTIONS
  129.         
  130.            
  131.         
  132.             DoEvents
  133.             GetKeyboardState keys(0)

  134.             If keys(27) > 127 Then End
  135.             
  136.         Wend
  137.         
  138. AA:        Set swComp = sMgr.GetSelectedObjectsComponent2(1)
  139.         
  140.         If swComp Is Nothing Then
  141.             
  142.             sCompName = swModel.GetPathName
  143.    
  144.         Else
  145.         
  146.             sCompName = swComp.GetPathName
  147.    
  148.         End If
  149.         
  150.         '''FilePath = Left(sCompName, InStrRev(sCompName, "") - 1)   '分解路径
  151.         '''FileName = swModel.GetTitle
  152.         
  153.         '''On Error Resume Next
  154.         
  155.         '''AppActivate FilePath
  156.         
  157.         
  158.         '''If Err.Number Then
  159.         
  160.         '''ret = Shell("explorer.exe /e,/select," & sCompName, vbNormalFocus)
  161.         
  162.         '''Else
  163.         
  164.         '''SendKeys FileName
  165.         '''End If
  166.         
  167.         OpenFolderAndSetFileFocus sCompName
  168.         
  169.         
  170.         swModel.ClearSelection2 True
  171.      
  172.     Else
  173.    
  174.         '''FilePath = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, "") - 1)   '分解路径
  175.         '''FileName = swModel.GetTitle
  176.         
  177.         '''FileName = Chr(34) + FileName + Chr(34)
  178.         
  179.         '''MsgBox FileName
  180.         
  181.         '''On Error Resume Next
  182.         
  183.         '''AppActivate FilePath
  184.         
  185.         
  186.         '''If Err.Number Then
  187.         
  188.         '''ret = Shell("explorer.exe /e,/select," & swModel.GetPathName, vbNormalFocus)
  189.         
  190.         '''Else
  191.         
  192.         '''SendKeys FileName
  193.         '''End If
  194.         'ret = Shell("explorer.exe /e,/select," & swModel.GetPathName, vbNormalFocus)
  195.         OpenFolderAndSetFileFocus swModel.GetPathName
  196.         
  197.         
  198.      
  199.         'ret = Shell("explorer.exe /e,/select," & swModel.GetPathName, vbNormalFocus)
  200.    

  201.       
  202.     swModel.ClearSelection2 True
  203.    
  204.     End If
  205.    
  206.     '    swFrame.SetStatusBarText "Done" ' feed done message to status bar

  207.     End

  208. End Sub
复制代码

作者: 风中de沙    时间: 2020-1-5 10:55
idonot 发表于 2020-1-4 21:43
一直在使用这个宏,可以在装配体以及零件、工程图等环境直接打开并定位文件位置。但一直也存在这 ...

我在win10系统下的sw2015试过好多次,没发现问题
作者: idonot    时间: 2020-1-5 18:54
风中de沙 发表于 2020-1-5 10:55
我在win10系统下的sw2015试过好多次,没发现问题

我在两台电脑上分别试用自己修改的这个宏,一台win7,另一台win10。打开单个零件时基本不出现问题,但是打开大一点的装配体就会出现错误。有时候行,有时候不行,不规律。你再多试试看,期望能找到根本原因。
作者: idonot    时间: 2020-1-15 20:03
不要沉,求大神看一下
作者: idonot    时间: 2020-2-21 16:59
idonot 发表于 2020-1-4 21:43
一直在使用这个宏,可以在装配体以及零件、工程图等环境直接打开并定位文件位置。但一直也存在这 ...

经过不断尝试,发现问题可能出现在32位系统和64位系统上。把代码里面的Long改为Longlong以后,代码运行目前没有再出现问题。

作者: yh2010    时间: 2020-2-26 23:51

厉害   支持一下
作者: 幻想柏拉图    时间: 2020-8-29 18:05
谢谢大神无私奉献!!!!!!!!!!!!!!!

作者: 285240263@qq.co    时间: 2020-12-17 14:52
看看源代码

作者: may0356    时间: 2020-12-22 15:10
多谢楼主的分享
作者: deihc851209    时间: 2021-3-26 10:39
可有最终的版本分享一下
作者: haitianyis    时间: 2021-4-2 17:15
谢谢分享,学习一下。


作者: wxf5888    时间: 2021-4-3 11:29
学习一下``````````````

作者: lxr8833661    时间: 2021-8-30 11:49
好东西学习学习

作者: hbhz520    时间: 2021-11-18 16:44
感谢分享
作者: 13717174595    时间: 2021-11-18 23:28
谢谢分享,看着挺好的。

作者: dreamsboy    时间: 2021-11-19 16:45
谢谢楼主分享,下载研究。

作者: yangcongs    时间: 2021-11-26 10:12
看着很好用 拿来学习学习

作者: mifochen    时间: 2021-12-5 15:27
kankan

作者: wubing3708909    时间: 2021-12-8 11:41
学习下

作者: qzf1    时间: 2021-12-9 13:54
好好学习天天向上
作者: szat51980    时间: 2022-5-14 19:34
这是一个很实用的宏文件





欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3