3

Visio 2003 を使用しており、選択したアイテムを「削除済みアイテム」という非表示レイヤーに移動するマクロを作成したいと考えています。

マクロを記録しようとしましたが、得られたのはこれだけで、レイヤーの操作方法さえ示していません。:(

Sub Move_to_Delete_Layer()
'
' Moves the selected item(s) to the "zDeleted Items" Layer (which typically remains hidden). This is basically an "undo-able" way to delete the item.
'
' Keyboard Shortcut: Ctrl+d
'

    Dim UndoScopeID1 As Long
    UndoScopeID1 = Application.BeginUndoScope("Layer")
    Application.ActiveWindow.Page.Shapes.ItemFromID(175).CellsSRC(visSectionObject, visRowLayerMem, visLayerMember).FormulaU = """9"""
    Application.EndUndoScope UndoScopeID1, True

End Sub

編集:

ありがとう。SDK は少しは役に立ちますが、残念ながら動作するコードを生成するには不十分です。やりたいことは基本的に

Dim myLayer As Visio.Layer
Set myLayer = Application.ActiveWindow.Page.Layers.Add("Deleted Items")
myLayer.Add Application.ActiveWindow.Selection.ContainingShape, 1

しかし、そのコードは機能しません。「実行時エラー '-2032465766 (86db089a)': 要求された操作は現在無効になっています」というエラーが表示されます

また、既に存在していたレイヤーからシェイプを削除したいのですが、その方法がわかりません。

4

1 に答える 1

3

レイヤーは VBA では非常に単純です。これにより、すべてのレイヤー メンバーシップがページから削除されます。

dim i as integer
for i = ShpObj.LayerCount to 1 Step -1
    dim Lay as Visio.Layer
    set Lay = ShpObj.Layer(i)
    Lay.Remove ShpObj
next

これにより、削除レイヤーにシェイプが追加されます

Dim myLayer As Visio.Layer
Set myLayer = Application.ActiveWindow.Page.Layers.Add("Deleted Items")
myLayer.Add Application.ActiveWindow.Selection(1), 1
于 2013-10-11T00:35:00.180 に答える