[[20090519135803]] 『シェイプを選択出来なくする』(とんざ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シェイプを選択出来なくする』(とんざ)
 シートに複数のシェイプがありますが、その中の一つのシェイプを
 ロック(位置、大きさその他の情報を変更不可)して、その他の物を
 変更可能にしたいのですが、どうも出来そうにありませんので、
 (出来る方法があれば教えて欲しいです。)
 そのロックしたいシェイプのみ選択出来なくしてはどうかと思ってます。
 指定するシェイプの名前はA1セルにでも入れておいてと思うのですが
 可能でしょうか?


 オートシェイプの書式設定、保護タブのロックにチェックが入っていれば、シート保護したときに
 (オブジェクトの編集を許可していなければ)編集ができなくなります。
 (ROUGE)

 特定のシェイプのみロックして、他のシェイプは編集したいのです。(とんざ)
 特定のシェイプにマクロ(ダミー)を登録してみましたら、編集出来なく
 なりました。ただ右クリックすると編集可能です。
 右クリック不可にしてみましたが、
 Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As _
 Excel.Range, Cancel As Boolean)
    Cancel = True
 End Sub
 これはシェイプの編集には無効で右クリックメニューが表示されます。
 ただ殆どロック状態とも言えますので、これでいいかも?と思って来ました。


A1セルに入っているシェイプがセレクトされると、非セレクトにする(A1セルを選択)(とんざ)
 事は出来るでしょうか?
 複数シェイプがシートに存在して、シェイプAがロックしたい物とした時
 シェイプBが選択されている状態から、シェイプAを選択する場合が考えられますが、
 その時にワークシートイベントが働かないので無理ですか?


 ROUGEさんが書いて居られる方法は
 正しく試されましたか?

 シェイプAと、シェイプBがある時に
 1.シェイプBのオートシェイプの書式設定を開き
   保護タブで ロックのチェックを外します。

 2.シェイプAのロックのチェックはつけておきます。

 3.エクセルのメニューから、シートの保護をします。

 4.シェイプBは選択出来なくなります。

 その方法が駄目なら、まず 駄目な理由を書きましょう。
  保護は掛けたくない
 とか
  A1セルに入っているシェイプをセレクトすると、A1セルを選択したい
 とか。

 (HANA)

すみません。更にシェイプを追加したい場合もあるので、(とんざ)
 保護をかけたくないのでした。


 >特定のシェイプにマクロ(ダミー)を登録してみましたら、編集出来なく
 >なりました。ただ右クリックすると編集可能です。
 >右クリック不可にしてみましたが、
 >・・・(中略)・・・
 >ただ殆どロック状態とも言えますので、これでいいかも?と思って来ました。

 と言う事であれば、
 ダミーマクロではなく「A1セルを選択する」と言うマクロを
 そのシェイプに登録するのではどうでしょう?

 (HANA)

 方法1
 ロックしたいという対象図形を「コントロールツールボックス」にあるイメージコントロールの中に
 埋め込んでしまう方法は?

 例
 新規ブックの標準モジュールに

 '=============================================================
 Sub 再現1()
    With ActiveSheet
       .Ovals.Add [i3:k11].Left, [i3:k11].Top, [i3:k11].Width, [i3:k11].Height
       With .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
        DisplayAsIcon:=False, Left:=[a3:a11].Left, Top:=[a3:c11].Top, Width:=[a3:c11].Width, Height:= _
        [a3:c11].Height)
          .Object.BorderStyle = 0
       End With
    End With
 End Sub

 適当なシートで上記 再現1を実行してください。
 セルi3:k11の範囲に楕円が作成されます。
 この楕円をセルA3:C3に作成されたイメージコントロールに埋め込むことを考えます。

 ・まず、コントロールツールボックスのデザインモードをONにしてイメ−ジコントロール操作可能にしてください。
 ・次に楕円を選択してください。選択した状態でShiftキーを押しながら、「編集」---「図のコピー」とクリックします。

 ・図のコピー ダイアログが表示されますから、外観 画面  形式ビットマップと選択してOKボタンをクリックしてください。

 ・イメージコントロールを選択して下さい。選択した状態でコントロールツールボックスのプロパティボタンをクリックしてください。

 ・プロパティ ダイアログが表示されます。その中にPictureというプロパティがありますから、選択して下さい。選択した状態で Ctrl+Vを押してください。 
 手順どおりやれば、イメージコントロールに楕円が表示されます。

 ・最後にコントロールツールボックスにて、デザインモードを終了してください。

 これでイメージコントロールに埋め込まれた図形は簡単には操作できないと思います。

 尚、これらをVBAで行うならば、APIになります。

 方法2
 VBAで監視して、シェイプを選択したら、セルを選択するという処理をループ内で行う

 上記のとおりのアルゴリズムを作成すればよいのですが、ちょっと動作が不安定です。
 興味があれば、コードはアップします。

 方法3
 結構難しい仕様なので仕様を見直す。

 ichinose


 HANAさん
 Sub test()
  Range("a1").Select
 End Sub
 をシェイプに登録してみましたが、やはり右クリック出来て編集出来て
 しまうのは同じでした。

 ichinoseさん確かに絵は編集出来ませんが、イメージを選択して位置を変更
 出来てしまうのは、他の方法と同様です。やはりロックしてシートの保護の
 必要があります。

 最初からどう使うのかを書くべきでした
 イメージデータtifファイルをシートに読み込んでこのイメージデータ上に
 シェイプを追加して文字やら線やらを追加していって、重ねたデータを
 プリントアウトする作業を行います。
 イメージデータの中で消したい部分は白のシェイプを置き・・・
 つまり最初のイメージデータtifは、一番下の階層にあって、一度配置したら
 位置が変わったり大きさを変えたりしないので、または、シェイプを置いた
 後にイメージデータの位置が変わるととんでもないことになる為にロック
 したいのです。(イメージデータが大きい為にどうしてもこれをクリックして
 間違って位置を変えてしまいやすい。)

 追加するシェイプの種類は限られているので、既にマクロで組んでますので。
 今思ったのは、恒にシートは保護状態にしておいて、シェイプを追加する時に
 保護解除 → シェイプ追加 → 保護とすれば良いですね。
 (先に教えて頂いた、イメージデータはロック、他のシェイプはロック解除)

 大変手間をかけさせてしまい済みませんです。(とんざ) 

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.