2017-12-13 26 views
0

実装したい機能は、ユーザが図形を削除することを決定したときに、yesまたはnoのオプションで警告メッセージを表示することです。彼らがいいえを選択した場合、私は図形を削除したくありません。形状削除イベントをスキップ

私が考えることができる唯一の解決策は、すべてのシェイプの削除をロックし、OnBeforeShapeDeleteイベントを使用することです。ユーザが「はい」を選択した場合、削除保護は削除されます。ユーザーが「いいえ」を選択した場合、削除されませんが、毎回そのプロテクションバブルがポップアップするのが嫌です(オフにすることはできますか?)。

シェイプの削除イベントをスキップできるOnBeforeShapeイベントの方法はありますか?または他のソリューション?ありがとう!

編集: 下記の独自の質問に回答しました。

+1

'Application.EnableEvents = False'は答えでしょうか? – Vityata

+0

悪い考えではありませんが、イベントがオフになってもそれを元に戻すにはどうしたらいいでしょうか? – jediderek

+0

'Application.EnableEvents = True'はそれをオンにします。 – Vityata

答えて

2

あなたは形状イベントで

Application.DisplayAlerts = False

、その後

Application.DisplayAlerts = True

を使用することができます。

0

私は、BeforeDeleteEventを介してシェイプの削除を防ぐことができないことを学びました。形状にLockDelete = 1がある場合、BeforeDeleteEventはトリガーしません。したがって、メッセージボックスからオブジェクトを削除する唯一の方法は、ボタンやその他のコントロールイベントによってトリガできるUIフォームを使用する方法です。

3

QueryCancelで始まるイベントを使用すると、フローを強制的に中断できます。むしろ、

Private Function Document_QueryCancelSelectionDelete(ByVal Selection As IVSelection) As Boolean 
    Dim queryResult As Boolean 
    Dim shp As Shape 
    Set shp = Selection.PrimaryItem 
    If Not shp Is Nothing Then 
     If Not shp.Master Is Nothing Then 
      If shp.Master.NameU = "Process" Then 
       Dim res As VbMsgBoxResult 
       res = MsgBox("Are you sure you want to delete '" & shp.NameID & "'?", vbYesNo, "Delete Process shape?") 
       If Not res = vbYes Then 
        queryResult = True 
       End If 
      End If 
     End If 
    End If 

    'Return True to cancel the event 
    'Return False to let it continue 
    Document_QueryCancelSelectionDelete = queryResult 

End Function 

あなたは常に選択を扱うことになるだろう:だから、たとえば、ThisDocumentのにこれを追加すると、そのPrimaryItemは「プロセス」のマスターに由来するものであったかどうかに基づいて選択範囲を削除しないでできるようになりますShapeの削除イベントよりも、キャンセル可能なイベントのすべてのイベントが表示されますが、簡単に選択を繰り返して、そのイベントが目的のシェイプであるかどうかを確認できます。リスニングは、必要に応じてアプリケーション、ドキュメント(上記のように)またはページレベルで行うことができます。

関連する問題