iCAx开思网

标题: 求助:Solidworks工程图打印的问题 [打印本页]

作者: MJ-Destiny    时间: 2016-3-31 09:40
标题: 求助:Solidworks工程图打印的问题
本帖最后由 MJ-Destiny 于 2016-3-31 09:43 编辑

公司的Solidworks工程图里有两页图,分别是零件图和展开图,每次打印的话在打印窗口里打印范围默认所有图纸,如果不选当前图纸的话每次打印就是打印两页,但实际上只需要打印零件图就好,很多时候都会忘记点选当前图纸,所以想请问有没有什么方法是可以把打印范围默认为当前图纸?[attach]1232142[/attach]
作者: MJ-Destiny    时间: 2016-3-31 10:34
大神们都在那里?
作者: gt.adan    时间: 2016-3-31 16:26
這是個實際的問題,我也想知道答案~
作者: MJ-Destiny    时间: 2016-4-2 10:47
这贴石沉大海了吗?有没有大神指导一下。
作者: 楠柠檬、    时间: 2016-4-2 14:08
工作要细心的,都到了最后一步了,好好看看吧
作者: heju0682    时间: 2016-4-2 19:42
做个便利贴粘在旁边提醒自己???
作者: 莱虫    时间: 2016-4-3 19:21
本帖最后由 莱虫 于 2016-4-4 17:04 编辑

受到樓下銀口人批評,撤回帖子。

作者: 营口人    时间: 2016-4-4 15:51
本帖最后由 营口人 于 2016-4-4 16:02 编辑

实际上还是自己注意比较好,你真使用了楼上的宏命令,就会养成依赖的坏习惯,到了没有宏命令的电脑上,你习惯了,就惨了。而且有个逻辑矛盾在那,你都设置好了页面设置,还能无视打印选项,你的神经有多大条。
为什么默认是打印所有图纸,因为solidworks认为你既然是多页工程图,要打印,一定是全打印的。怎么说呢,也对,但不完美。因为没有更改默认设置的选项,应该给予用户选择权,用户愿意怎么打印就怎么打印。
作者: MJ-Destiny    时间: 2016-4-5 15:44
营口人 发表于 2016-4-4 15:51
实际上还是自己注意比较好,你真使用了楼上的宏命令,就会养成依赖的坏习惯,到了没有宏命令的电脑上,你习 ...

关于这个问题有时候确实会忘记选择,我相信大家有时候也会忽略掉,这样子太浪费纸张,有改善的方法那是最好的,没有的话就只能自己多注意。

作者: MJ-Destiny    时间: 2016-4-5 15:46
莱虫 发表于 2016-4-3 19:21
受到樓下銀口人批評,撤回帖子。

别急着删啊,不管是否实用,让我学习下也好啊
作者: lij2013    时间: 2016-4-5 16:12
这个也是实际问题,可惜没看到解决办法
作者: MJ-Destiny    时间: 2016-4-5 17:05
楠柠檬、 发表于 2016-4-2 14:08
工作要细心的,都到了最后一步了,好好看看吧

也只能这样了
作者: wxg263    时间: 2016-4-5 21:46
不明白有零件图 要展开图做啥,如果是下料 直接导出DXF 文件,不就好了
作者: lxw102    时间: 2016-4-6 22:31
你必须每次点击当前图纸,其他没有任何办法
作者: takeshi999    时间: 2016-4-7 16:08
本帖最后由 takeshi999 于 2016-4-7 16:13 编辑
  1. Option Explicit

  2. ' Define user type to reduce the number of #If VBA7 statements
  3. ' Can't eliminate them...
  4. Private Type LongPtr_T
  5. #If VBA7 Then
  6.     Value As LongPtr
  7.     ' Compare automatically resized LongPtr to fixed size Long and LongLong
  8. #Else
  9.     Value As Long
  10. #End If
  11. End Type

  12. ' Win32 data type. Different signatures for different versions of VBA
  13. Private Type BROWSEINFO
  14. #If VBA7 Then
  15.     hWndOwner       As LongPtr
  16.     pIDLRoot        As LongPtr
  17.     pszDisplayName  As Long
  18.     lpszTitle       As String
  19.     ulFlags         As Long
  20.     lpfnCallback    As LongPtr
  21.     lParam          As Long
  22.     iImage          As Long
  23. #Else
  24.     hWndOwner As Long
  25.     pIDLRoot        As Long
  26.     pszDisplayName  As Long
  27.     lpszTitle       As String
  28.     ulFlags         As Long
  29.     lpfnCallback    As Long
  30.     lParam          As Long
  31.     iImage          As Long
  32. #End If
  33. End Type

  34. Private Const MAX_PATH = 260
  35. 'Directories only
  36. Private Const BIF_RETURNONLYFSDIRS = &H1&
  37. 'Windows 2000 (Shell32.dll 5.0) extended dialog
  38. Private Const BIF_NEWDIALOGSTYLE = &H40
  39. ' show edit box
  40. Private Const BIF_EDITBOX = &H10&

  41. Private Const WM_USER = &H400
  42. Private Const BFFM_INITIALIZED = 1
  43. Private Const BFFM_SELCHANGED = 2
  44. Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)

  45. Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
  46. Private Const BFFM_SETEXPANDED = (WM_USER + 16)

  47. Private m_sDefaultFolder As String

  48. Public Const SWP_NOMOVE = 2
  49. Public Const SWP_NOSIZE = 1
  50. Private Const SWP_NOZORDER = 4

  51. Private Type RECT
  52.     Left As Long
  53.     Top As Long
  54.     Right As Long
  55.     Bottom As Long
  56. End Type

  57. ' Win32 API declarations. Different signatures for different versions of VBA.
  58. ' Note the mandatory use of PtrSafe keyword in VBA7.
  59. #If VBA7 Then
  60. Private Declare PtrSafe Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  61. Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
  62. Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long
  63. Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
  64. Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
  65.                                        ByVal hWndInsertAfter As LongPtr, _
  66.                                        ByVal x As Long, _
  67.                                        ByVal y As Long, _
  68.                                        ByVal cx As Long, _
  69.                                        ByVal cy As Long, _
  70.                                        ByVal wFlags As Long) As Long
  71. Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long

  72. #Else
  73. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  74. Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
  75. Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
  76. Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)
  77. Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
  78.                                        ByVal hWndInsertAfter As Long, _
  79.                                        ByVal x As Long, _
  80.                                        ByVal y As Long, _
  81.                                        ByVal cx As Long, _
  82.                                        ByVal cy As Long, _
  83.                                        ByVal wFlags As Long) As Long
  84. Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long

  85. #End If

  86. Private lastKnownPosition As RECT
  87. Private lockLastKnownPosition As Boolean

  88. Public Function BrowseForFolder() As String
  89.   Dim tBI         As BROWSEINFO
  90.   Dim lngPIDL     As LongPtr_T
  91.   Dim strPath     As String
  92.   
  93.   With tBI
  94.     .lpszTitle = "Select the folder you want to use."

  95.     ' TO DO: Do you want the new UI? Or the initial selected folder visible when the dialog opens?
  96.     ' Choose one of the following:
  97.     '  New UI. Selected folder is probably out of view.
  98.     .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_NEWDIALOGSTYLE Or BIF_EDITBOX
  99.     ' ... or ...
  100.     ' Old UI. Selected folder is scrolled into view when dialog opens.
  101.     '.ulFlags = .ulFlags = BIF_RETURNONLYFSDIRS
  102.     ' ... or ...
  103.     ' Old UI with edit box. Selected folder is scrolled into view when dialog opens.
  104.     ' Focus defaults to the edit box making the selected folder less obvious in the tree.
  105.     '.ulFlags = .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_EDITBOX
  106.    
  107.     .lpfnCallback = GetAddress(AddressOf BrowseCallbackProc).Value
  108.   End With
  109.   
  110.   lockLastKnownPosition = True
  111.   lngPIDL.Value = SHBrowseForFolder(tBI)
  112.   If (lngPIDL.Value <> 0) Then
  113.     ' get path from ID list
  114.     strPath = Space$(MAX_PATH)
  115.     SHGetPathFromIDList lngPIDL.Value, strPath
  116.     strPath = Left$(strPath, InStr(strPath, Chr$(0)) - 1)
  117.     ' release list
  118.     CoTaskMemFree lngPIDL.Value
  119.   End If
  120.   BrowseForFolder = strPath
  121. End Function

  122. ' Callback function for Win32 API.
  123. ' Must conform to the expected method signature therefore cannot use our LongPtr_t
  124. #If VBA7 Then
  125. Private Function BrowseCallbackProc(ByVal hWnd As LongPtr, ByVal uMsg As Long, ByVal lParam As Long, ByVal lpData As Long) As Long
  126. #Else
  127. Private Function BrowseCallbackProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal lParam As Long, ByVal lpData As Long) As Long
  128. #End If
  129.         ' If dialog has been initialised, record its current location
  130.         If Not lockLastKnownPosition Then
  131.             GetWindowRect hWnd, lastKnownPosition
  132.         End If
  133.         
  134.         Select Case uMsg
  135.         Case BFFM_INITIALIZED
  136.             ' Start recording the dialogs location
  137.             lockLastKnownPosition = False
  138.             
  139.             If Len(m_sDefaultFolder) > 0 Then
  140.                 ' Move the dialog to the last recorded position
  141.                 SetWindowPos hWnd, 0, lastKnownPosition.Left, lastKnownPosition.Top, 0, 0, SWP_NOSIZE + SWP_NOZORDER
  142.                 ' Set the selected folder
  143.                 SendMessage hWnd, BFFM_SETSELECTIONA, True, ByVal m_sDefaultFolder
  144.             End If
  145.         Case BFFM_SELCHANGED
  146.             SendMessage hWnd, BFFM_SETEXPANDED, True, ByVal m_sDefaultFolder

  147.         End Select
  148. End Function

  149. ' Workaround for syntax limitation of AddressOf. Can only use in a function call, not an assignment
  150. #If VBA7 Then
  151. Private Function GetAddress(nAddress As LongPtr) As LongPtr_T
  152. #Else
  153. Private Function GetAddress(nAddress As Long) As LongPtr_T
  154. #End If
  155.     Dim address As LongPtr_T
  156.     address.Value = nAddress
  157.     GetAddress = address
  158. End Function
复制代码


作者: MJ-Destiny    时间: 2016-4-7 16:34
takeshi999 发表于 2016-4-7 16:08

不好意思,我没用过宏,所以我把这段代码输进去以后没法运行,请问是怎么回事?
作者: gt.adan    时间: 2016-4-7 16:35
takeshi999 发表于 2016-4-7 16:08

請問這段代碼的作用是什麼呢?:doubt

作者: pyczt    时间: 2016-4-9 15:47
估计printout2语名可以用于打印宏吧,实现当前图纸的打印,以下是该语名的帮助说明,把起始页和终止页都设为当前页

Dim instance As IModelDoc
Dim FromPage As Integer
Dim ToPage As Integer
Dim NumCopies As Integer
Dim Collate As Boolean
Dim Printer As String
Dim Scale As Double
Dim PrintToFile As Boolean
Dim PtfName As String

instance.PrintOut2(FromPage, ToPage, NumCopies, Collate, Printer, Scale, PrintToFile, PtfName)
作者: pyczt    时间: 2016-4-10 00:26
拼一个宏:在多页工程图中直接打印当前图纸
作者: 莱虫    时间: 2016-4-10 12:18
谢谢楼上神人。可是代码加密了,声称学习的淫情何以堪。
作者: qiminger    时间: 2016-4-11 07:41
本帖最后由 qiminger 于 2016-4-11 07:46 编辑

我的单页就是当前图纸选中状态,多页是所有图纸,会不会是模板问题呢?






作者: MJ-Destiny    时间: 2016-4-11 11:46
pyczt 发表于 2016-4-10 00:26
拼一个宏:在多页工程图中直接打印当前图纸

这个宏实现了自动打印当前页,我想请问一下宏能否再实现弹框选取纸张大小选择和横纵向
作者: pyczt    时间: 2016-4-11 15:15
MJ-Destiny 发表于 2016-4-11 11:46
这个宏实现了自动打印当前页,我想请问一下宏能否再实现弹框选取纸张大小选择和横纵向

应该在文件中设定好,这样就可以快速打印了。由于纸张大小不同,选择不同的打印机倒是有必要的

作者: pyczt    时间: 2016-4-13 12:52
下载次数只有2次,挺可怜的,顶一下
作者: 莱虫    时间: 2016-4-13 14:36
沒法子,夕陽行業,收入越低,入行的人水平越低落,惡性循環,最近甚至有文盲也可以入行。
作者: 黑暗贤者    时间: 2016-10-10 11:34
宏有密码啊。。。。。。。。。。。。
作者: pyczt    时间: 2016-10-11 08:07
黑暗贤者 发表于 2016-10-10 11:34
宏有密码啊。。。。。。。。。。。。
  1. Option Explicit
  2. Dim swApp As SldWorks.SldWorks
  3. Dim swModel As SldWorks.ModelDoc2
  4. Dim FromPage As Integer
  5. Dim strCurrentSheet As String
  6. Dim strSheetNames() As String
  7. Dim SheetCount As Long

  8. Sub main()
  9. Set swApp = Application.SldWorks
  10. Set swModel = swApp.ActiveDoc
  11. strCurrentSheet = swModel.GetCurrentSheet.GetName
  12. strSheetNames = swModel.GetSheetNames
  13. SheetCount = swModel.GetSheetCount
  14. For FromPage = 1 To SheetCount
  15.     If strCurrentSheet = strSheetNames(FromPage - 1) Then
  16.      swModel.PrintOut2 FromPage, FromPage, 1, False, "", 1, False, ""
  17.      Exit Sub
  18.     End If
  19. Next
  20. End Sub
复制代码
有几人感兴趣

作者: 冉冉升起liu    时间: 2016-11-5 15:38
谢谢分享
作者: MJ-Destiny    时间: 2016-11-30 15:57
pyczt 发表于 2016-4-13 12:52
下载次数只有2次,挺可怜的,顶一下

您的宏十分的使用,我想请问这个宏能否增加两个功能,第一就是可以选择哪台打印机,第二就是页面设置里的能选择高品质图纸。

作者: MJ-Destiny    时间: 2016-12-28 15:04
本帖最后由 MJ-Destiny 于 2016-12-28 15:29 编辑
pyczt 发表于 2016-10-11 08:07
有几人感兴趣

高人,你的宏能否借助Task Scheduler自定义任务来批量打印?





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