你好,Eric / Bryco,
我已经尝试了你的两个建议,但它并没有改变砌块的层数..
为了让我头脑清楚,我应该把函数放在哪里?我认为它在主命令按钮的sub或插入块的过程之前,所以它首先计算函数。我有这种方法,但是我不能让它工作..
如果我在下面贴出我的整个代码(我不能贴出用户表单,但我相信你们可以想象它lol) -哦,原谅任何编码的粗糙,我几乎是自学的,所以如果你有时间,任何关于干净代码的指示都将非常感谢:
- Option Explicit
- Dim response As Integer 'Yes/No..
- Dim BlockPoint As Variant 'First Insertion point..
- Dim RMblock As AcadBlockReference 'Inserted Revision Marker block..
- Dim AttribZ As Variant
- Dim CountX As Integer 'Counter..
- Dim RMlayer As AcadLayer
- ' FINISHED..
- Private Sub FINISHEDbtn_Click()
- Unload Me
- End Sub
- ' HELP..
- Private Sub HELPbtn_Click()
- 'Dim retval
- 'retval = Shell("C:\Program Files\Internet Explorer\IExplore.exe ""X:\CAD_Tools\Help\RM_help.html""", vbMaximizedFocus)
- End Sub
- Private Function DoesLayerExist() As AcadLayer
- Dim LayerName As String
- Dim objLayer As AcadLayer
- LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
-
- For Each objLayer In ThisDrawing.Layers
- If UCase(objLayer.Name) = UCase(LayerName) Then
- DoesLayerExist = True
- RMlayer = objLayer
- MsgBox "Layer Does Exist: " & objLayer
- Exit Function
- End If
- Next objLayer
-
- DoesLayerExist = False
- MsgBox "Layer Does Not Exist: " & objLayer
- RMlayer = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
- RMlayer.Plottable = False
- End Function
- '********************************************
- '******** INSERT MARKERS ***********
- '********************************************
- Private Sub AddMArkersBTN_Click()
- revmarkform.Hide
- ' Check if input is present..
- If revnumCOMBO.Text = "" Then
- MsgBox "Please enter or select the Revision Number..", vbExclamation, "Revision Markers.."
- Exit Sub
- End If
- If revdateTXT.Text = "" Then
- MsgBox "Please enter or select the revision date..", vbExclamation, "Revision Markers.."
- Exit Sub
- End If
- 'Get pick point..
- 'Error Test for GetPoint method..
- On Error Resume Next
- TryAgain:
- BlockPoint = ThisDrawing.Utility.GetPoint(, vbCr & "Pick the first insertion point for the Revision Marker..")
- 'Insert block..
- Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
- RMblock.Layer = DoesLayerExist(objLayer.Name)
- AttribZ = RMblock.GetAttributes ' Get Block attributes..
-
- For CountX = LBound(AttribZ) To UBound(AttribZ)
- Select Case AttribZ(CountX).TagString
- Case "REV_NUM_INDICATOR"
- AttribZ(CountX).TextString = UCase(revnumCOMBO.Text)
- Case "COMMENTS_DATE"
- AttribZ(CountX).TextString = revdateTXT.Text
- End Select
- Next CountX
- ErrHndlr:
- If Err.Number 0 Then
- If Err.Number = -2145320928 Then
- GoTo END_DO
- End If
- Err.Clear
- GoTo TryAgain
- End If
- On Error GoTo ErrHndlr
- '*******************************
- '** Start the point pick loop **
- '*******************************
- Do
- CountX = CountX + 1 'Add 1 to the counter..
- ' Error Test for GetPoint method..
- 'On Error Resume Next
- TryAgain2:
- BlockPoint = ThisDrawing.Utility.GetPoint(, vbCr & "Pick the insertion point for the next Revision Marker..")
- 'Insert block..
- Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
- RMblock.Layer = DoesLayerExist(objLayer.Name)
- AttribZ = RMblock.GetAttributes ' Get Block attributes..
-
- For CountX = LBound(AttribZ) To UBound(AttribZ)
- Select Case AttribZ(CountX).TagString
- Case "REV_NUM_INDICATOR"
- AttribZ(CountX).TextString = UCase(revnumCOMBO.Text)
- Case "COMMENTS_DATE"
- AttribZ(CountX).TextString = revdateTXT.Text
- End Select
- Next CountX
- ErrHndlr2:
- If Err.Number 0 Then
- If Err.Number = -2145320928 Then
- GoTo END_DO
- End If
- Err.Clear
- GoTo TryAgain2
- End If
- 'On Error GoTo ErrHndlr2
- On Error GoTo END_DO 'Exit the loop if ENTER or another key is hit (basically an error)..
-
- Loop
- '*******************************
- '******** End the loop *********
- '*******************************
- END_DO:
- revmarkform.Show
- End Sub
- '********************************************
|