hardwired 发表于 2010-10-11 06:33:45

这个层存在吗?

嗨,
希望你们都好..
这无疑是一个非常简单的问题,但我似乎无法找到我需要的所有答案..
我试图检查一个层是否存在,如果存在,使用它进行块插入,如果不存在,创建它并使用它..下面是我的函数(我想是从这里找到的一个函数修改而来的):
Private Function DoesLayerExist(ByRef LayerName As String) As Boolean
LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
      Dim objLayer As AcadLayer
      For Each objLayer In ThisDrawing.Layers
            If UCase(objLayer.Name) = UCase(LayerName) Then
                  DoesLayerExist = True
                  Exit Function
            End If
      Next objLayer
      DoesLayerExist = False
      RMlayer = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
      RMlayer.Plottable = False
End Function
首先,这个功能可以吗?其次,我如何在程序中的其他subs中使用它?
这是部分主要代码的摘录,我正在使用:
'Insert block..
    Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
    RMblock.Layer = RMlayer

有什么想法吗?
**** Hidden Message *****

Arizona 发表于 2010-10-11 06:49:11

一旦你知道该层存在,你需要设置它为激活层,如果你想你的块插入该层。或者替代方案是在插入后将块改变到层。

hardwired 发表于 2010-10-11 10:16:39

嗨,亚利桑那州,
我当前的代码在插入后确实改变了块的层,但是我的功能有问题或者我忽略了什么...
有什么想法吗?

hardwired 发表于 2010-10-11 10:19:55

请注意,如果该图层存在,请为 RMlayer 设置一个值。 试试这个。
Private Function DoesLayerExist(ByRef LayerName As String) As Boolean
LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
      Dim objLayer As AcadLayer
      For Each objLayer In ThisDrawing.Layers
            If UCase(objLayer.Name) = UCase(LayerName) Then
                  DoesLayerExist = True
                  RMlayer = objLayer
                  Exit Function
            End If
      Next objLayer
      DoesLayerExist = False
      RMlayer = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
      RMlayer.Plottable = False
End Function

hardwired 发表于 2010-10-11 10:52:03

嗨,埃里克,
好的。我试过了,但还是一无所获。如果我在函数后使用floowing代码….
'Insert block..
    Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
    RMblock.Layer = RMlayer

…这一切是如何相互联系的?如何在插入块的代码中调用函数的返回?

hardwired 发表于 2010-10-11 11:10:02

它没有。拉斯蒂+没有完全清醒+还没有咖啡=回答不好
试试
Private Function DoesLayerExist(ByRef LayerName As String) As acadlayer
LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
      Dim objLayer As AcadLayer
      For Each objLayer In ThisDrawing.Layers
            If UCase(objLayer.Name) = UCase(LayerName) Then
                  DoesLayerExist = objLayer
                  Exit Function
            End If
      Next objLayer
      DoesLayerExist = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
      RMlayer.Plottable = False
End Function
'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
仅供参考,尽管咖啡现在已经煮好了,但我的杯子还没有装满。有一段时间没有做任何VBA,也没有加载它,所以我无法测试,所以我只是瞎插。

Bryco 发表于 2010-10-11 11:36:00

嗨埃里克,
希望你的咖啡很好.
我累了把...
RMblock.Layer = DoesLayerExist

...但它打破了并说“参数不是可选的”

hardwired 发表于 2010-10-11 11:44:45

人民币锁。Layer=DoesLayerExist(将传递给LayerName的字符串放在这里)
咖啡是古德咖啡

Bryco 发表于 2010-10-11 12:09:19

嗨,Eric,我尝试了各种方法:
RMblock.Layer = DoesLayerExist(RMLayer.name)

or
Private Function DoesLayerExist() As acadlayer
dim LayerName as string
LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
      Dim objLayer As AcadLayer
      For Each objLayer In ThisDrawing.Layers
            If UCase(objLayer.Name) = UCase(LayerName) Then
                  DoesLayerExist = objLayer
                  Exit Function
            End If
      Next objLayer
      DoesLayerExist = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
      RMlayer.Plottable = False
End Function
'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
抱歉,这和我在没有第一手资料的情况下所能做的一样好。

hardwired 发表于 2010-10-11 14:25:41

RMblock。layer = DoesLayerExist(RM layer . name)
DoesLayerExist需要返回一个字符串(Layername而不是acadlayer本身)
页: [1] 2
查看完整版本: 这个层存在吗?