乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: hardwired

这个层存在吗?

[复制链接]

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2010-10-11 19:04:47 | 显示全部楼层
你好,Eric / Bryco,
我已经尝试了你的两个建议,但它并没有改变砌块的层数..
为了让我头脑清楚,我应该把函数放在哪里?我认为它在主命令按钮的sub或插入块的过程之前,所以它首先计算函数。我有这种方法,但是我不能让它工作..
如果我在下面贴出我的整个代码(我不能贴出用户表单,但我相信你们可以想象它lol) -哦,原谅任何编码的粗糙,我几乎是自学的,所以如果你有时间,任何关于干净代码的指示都将非常感谢:
  1. Option Explicit
  2. Dim response As Integer  'Yes/No..
  3. Dim BlockPoint As Variant 'First Insertion point..
  4. Dim RMblock As AcadBlockReference 'Inserted Revision Marker block..
  5. Dim AttribZ As Variant
  6. Dim CountX As Integer 'Counter..
  7. Dim RMlayer As AcadLayer
  8. ' FINISHED..
  9. Private Sub FINISHEDbtn_Click()
  10. Unload Me
  11. End Sub
  12. ' HELP..
  13. Private Sub HELPbtn_Click()
  14. 'Dim retval
  15. 'retval = Shell("C:\Program Files\Internet Explorer\IExplore.exe ""X:\CAD_Tools\Help\RM_help.html""", vbMaximizedFocus)
  16. End Sub
  17. Private Function DoesLayerExist() As AcadLayer
  18. Dim LayerName As String
  19. Dim objLayer As AcadLayer
  20. LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
  21.       
  22.       For Each objLayer In ThisDrawing.Layers
  23.             If UCase(objLayer.Name) = UCase(LayerName) Then
  24.                   DoesLayerExist = True
  25.                   RMlayer = objLayer
  26.                   MsgBox "Layer Does Exist: " & objLayer
  27.                   Exit Function
  28.             End If
  29.       Next objLayer
  30.       
  31.       DoesLayerExist = False
  32.       MsgBox "Layer Does Not Exist: " & objLayer
  33.       RMlayer = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
  34.       RMlayer.Plottable = False
  35. End Function
  36. '********************************************
  37. '******** INSERT MARKERS ***********
  38. '********************************************
  39. Private Sub AddMArkersBTN_Click()
  40. revmarkform.Hide
  41. ' Check if input is present..
  42. If revnumCOMBO.Text = "" Then
  43.     MsgBox "Please enter or select the Revision Number..", vbExclamation, "Revision Markers.."
  44.     Exit Sub
  45. End If
  46. If revdateTXT.Text = "" Then
  47.     MsgBox "Please enter or select the revision date..", vbExclamation, "Revision Markers.."
  48.     Exit Sub
  49. End If
  50. 'Get pick point..
  51. 'Error Test for GetPoint method..
  52. On Error Resume Next
  53. TryAgain:
  54. BlockPoint = ThisDrawing.Utility.GetPoint(, vbCr & "Pick the first insertion point for the Revision Marker..")
  55. 'Insert block..
  56.     Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
  57.     RMblock.Layer = DoesLayerExist(objLayer.Name)
  58. AttribZ = RMblock.GetAttributes ' Get Block attributes..
  59.                
  60. For CountX = LBound(AttribZ) To UBound(AttribZ)
  61.     Select Case AttribZ(CountX).TagString
  62.     Case "REV_NUM_INDICATOR"
  63.         AttribZ(CountX).TextString = UCase(revnumCOMBO.Text)
  64.     Case "COMMENTS_DATE"
  65.         AttribZ(CountX).TextString = revdateTXT.Text
  66.     End Select
  67. Next CountX
  68. ErrHndlr:
  69.     If Err.Number  0 Then
  70.         If Err.Number = -2145320928 Then
  71.             GoTo END_DO
  72.         End If
  73.         Err.Clear
  74.         GoTo TryAgain
  75.     End If
  76.     On Error GoTo ErrHndlr
  77. '*******************************
  78. '** Start the point pick loop **
  79. '*******************************
  80. Do
  81. CountX = CountX + 1  'Add 1 to the counter..
  82. ' Error Test for GetPoint method..
  83. 'On Error Resume Next
  84. TryAgain2:
  85. BlockPoint = ThisDrawing.Utility.GetPoint(, vbCr & "Pick the insertion point for the next Revision Marker..")
  86. 'Insert block..
  87.     Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
  88.     RMblock.Layer = DoesLayerExist(objLayer.Name)
  89. AttribZ = RMblock.GetAttributes ' Get Block attributes..
  90.                
  91. For CountX = LBound(AttribZ) To UBound(AttribZ)
  92.     Select Case AttribZ(CountX).TagString
  93.     Case "REV_NUM_INDICATOR"
  94.         AttribZ(CountX).TextString = UCase(revnumCOMBO.Text)
  95.     Case "COMMENTS_DATE"
  96.         AttribZ(CountX).TextString = revdateTXT.Text
  97.     End Select
  98. Next CountX
  99. ErrHndlr2:
  100.     If Err.Number  0 Then
  101.         If Err.Number = -2145320928 Then
  102.             GoTo END_DO
  103.         End If
  104.         Err.Clear
  105.         GoTo TryAgain2
  106.     End If
  107.     'On Error GoTo ErrHndlr2
  108.     On Error GoTo END_DO 'Exit the loop if ENTER or another key is hit (basically an error)..
  109.    
  110. Loop
  111. '*******************************
  112. '******** End the loop *********
  113. '*******************************
  114. END_DO:
  115. revmarkform.Show
  116. End Sub
  117. '********************************************
  118. '******** INSERT MARKERS ***********
  119. '********************************************
  120. Private Sub revdateTXT_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  121. revdateTXT.Text = Format(Date, "DD/MM/YYYY")
  122. End Sub
  123. '********************************************
  124. '*************** FORM LOAD ******************
  125. '********************************************
  126. Private Sub UserForm_Initialize()
  127. ThisDrawing.ActiveSpace = acPaperSpace
  128. With revnumCOMBO
  129.     .AddItem ("P2")
  130.     .AddItem ("P3")
  131.     .AddItem ("P4")
  132.     .AddItem ("P5")
  133.     .AddItem ("P6")
  134.     .AddItem ("P7")
  135.     .AddItem ("P8")
  136.     .AddItem ("P9")
  137.     .AddItem ("P10")
  138.     .AddItem ("C1")
  139.     .AddItem ("C2")
  140.     .AddItem ("C3")
  141.     .AddItem ("C4")
  142.     .AddItem ("C5")
  143.     .AddItem ("C6")
  144.     .AddItem ("C7")
  145.     .AddItem ("C8")
  146.     .AddItem ("C9")
  147.     .AddItem ("C10")
  148.     .AddItem ("AB")
  149. End With
  150. End Sub
  151. '********************************************
  152. '*************** FORM LOAD ******************
  153. '********************************************
  154. '********************************************
  155. '*************** FORM UNLOAD ****************
  156. '********************************************
  157. Private Sub UserForm_QueryClose(Cancel As Integer, closemode As Integer)
  158. response = MsgBox("Are you sure you've finished with the 'Revision Markers'?..", vbQuestion + vbYesNo, "End the Program..")
  159.     If response = vbNo Then
  160.     Cancel = 1
  161.     End If
  162.     If response = vbYes Then
  163.         Unload Me
  164.     End If
  165. End Sub
  166. '********************************************
  167. '*************** FORM UNLOAD ****************
  168. '********************************************

回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2010-10-13 05:34:49 | 显示全部楼层
私有函数DoesLayerExist()作为字符串<br>此函数必须返回字符串layername
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2010-10-13 08:32:36 | 显示全部楼层
Hi Bryco,
我试过了(除了您展示的代码行之外,没有更改其他代码),但它返回来说没有设置objLayer变量,尽管它在函数中设置了。有什么想法吗?
回复

使用道具 举报

16

主题

168

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2010-10-13 09:06:23 | 显示全部楼层
这是从一些模糊的记忆中产生的,所以我会让你决定它是否有价值,但它可能值得一试。如果我没记错的话,如果图层已经存在,用VBA制作图层不会有任何影响,所以你可以尝试取消检查功能,每次都制作图层。除此之外,您可以在主sub中进行检查,而不是将其分解到一个函数中。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-1 08:14 , Processed in 0.246496 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表