Matersammichman 发表于 2006-9-7 12:08:44

如何删除图层状态?

我有一个名为 LayerState (Temp) 的 LayerState。
如何使vba删除它?
**** Hidden Message *****

DaveW 发表于 2006-9-7 12:33:29

我不认为你可以。 根据我的记忆,LayerStates不会暴露给VBA

T.Willey 发表于 2006-9-7 12:38:40

您可以通过命令行将其自动化
您可以打开图层管理器,然后使用sendkeys,字母“r”将打开状态管理器
进入tere后,您可以使用alt和sndkeys访问命令,因为字母带有下划线<这应该行得通。

DaveW 发表于 2006-9-7 12:40:02

以下是我如何在lisp(ActiveX)中获得它们的列表,我认为您可以很容易地将其转换为VBA<br>和<pre>(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(setq LayCol (vla-get-Layers ActDoc))
(setq LayDict (vla-GetExtensionDictionary LayCol))
(setq LayStDict (vl-catch-all-apply 'vla-Item (list LayDict "ACAD_LAYERSTATES")))

如果“LayStDict”不是错误,则当前图形中存在图层状态。希望这有帮助。

SomeCallMeDave 发表于 2006-9-7 12:46:10

快速插入命令行一:
Public Sub DeleteLaterStateTemp()
      ThisDrawing.SendCommand "-layer" & vbCr
      ThisDrawing.SendCommand "a" & vbCr
      ThisDrawing.SendCommand "d" & vbCr
      ThisDrawing.SendCommand "temp" & vbCr & vbCr & vbCr
      
End Sub

DaveW 发表于 2006-9-7 22:25:00

这似乎在 v2004 中有效。 也许它会有所帮助

Public Sub DelLayerState()
    Dim colLayers As AcadLayers
    Dim objDict As AcadDictionary
    Dim objLayerStates As AcadDictionary
    Dim objXrec As AcadXRecord
   
    Set colLayers = Me.Layers
    If colLayers.HasExtensionDictionary Then
       Set objDict = colLayers.GetExtensionDictionary
       Set objLayerStates = objDict("Acad_LayerStates")
       objLayerStates("temp").Delete
   End If
End Sub

需要更多的错误检查,还没有经过充分的测试

Matersammichman 发表于 2006-9-7 23:03:23

美好的

SomeCallMeDave 发表于 2006-9-8 08:50:39

戴夫,
谢谢你的帮助,但是……Vba被“我.层”的想法噎住了
吗?

Matersammichman 发表于 2006-9-8 09:01:21

请尝试
ThisDrawing.Layers

Jeff_M 发表于 2006-9-11 16:17:33

工作漂亮!
谢谢!
页: [1] 2
查看完整版本: 如何删除图层状态?