Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4092 / 13644 ツリー ←次へ | 前へ→

【58456】列の挿入・削除の無効化 ようたん 08/10/27(月) 0:37 質問[未読]
【58457】Re:列の挿入・削除の無効化 kanabun 08/10/27(月) 1:40 発言[未読]
【58465】Re:列の挿入・削除の無効化 ようたん 08/10/27(月) 12:29 お礼[未読]
【58470】Re:列の挿入・削除の無効化 kanabun 08/10/27(月) 16:13 発言[未読]
【58490】Re:列の挿入・削除の無効化 ようたん 08/10/27(月) 23:24 発言[未読]
【58492】Re:列の挿入・削除の無効化 kanabun 08/10/28(火) 1:44 発言[未読]

【58456】列の挿入・削除の無効化
質問  ようたん  - 08/10/27(月) 0:37 -

引用なし
パスワード
   またお世話になります。
どなたかご指導よろしくお願いします。
質問は2件あります。

その1、

何とかユーザーからの列の挿入操作を無効にできないものかと、以下のコード
にたどりつきました。


rivate WithEvents myButton As Office.CommandBarButton

'***********************************************************************

Private Sub myButton_Click( _
  ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  
    CancelDefault = True
End Sub

'***********************************************************************

Private Sub Workbook_Open()

  Set myButton = Application.CommandBars("Worksheet Menu Bar") _
      .Controls("挿入(&I)").Controls("列(&C)")
      
End Sub

'***********************************************************************

Private Sub Workbook_BeforeClose(Cancel As Boolean)

  Set myButton = Nothing

End Sub


うまくいったと思ったのですが、列番号上右クリックで表示されるショートカット
メニューから挿入を実行されると、列が挿入されてしまいます。
どのようなコードを書き加えれば、右クリックからの列の挿入操作を無効にできるのでしょうか?


その2、

今度は列の削除の操作も無効にしようと考えたのですが、以下のコードではエラー表示されてしまいます。右クリックからの列の削除操作ともどもどう対処すればよいのかご指導お願いいたします。


rivate WithEvents myButtonDele As Office.CommandBarButton

'***********************************************************************

Private Sub myButtonDele_Click( _
  ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  
    CancelDefault = True
End Sub

'***********************************************************************

Private Sub Workbook_Open()

  Set myButtonDele = Application.CommandBars("Worksheet Menu Bar") _
      .Controls("編集(&E)").Controls("削除(&D)")
      
End Sub

'***********************************************************************

Private Sub Workbook_BeforeClose(Cancel As Boolean)

  Set myButtonDele = Nothing

End Sub

【58457】Re:列の挿入・削除の無効化
発言  kanabun  - 08/10/27(月) 1:40 -

引用なし
パスワード
   ▼ようたん さん:
こんにちは。
>うまくいったと思ったのですが、列番号上右クリックで表示されるショートカット
>メニューから挿入を実行されると、列が挿入されてしまいます。
>どのようなコードを書き加えれば、右クリックからの列の挿入操作を無効にできるのでしょうか?

'---------------------------------------------
Private WithEvents myButton As Office.CommandBarButton
Private WithEvents myButtonDele As Office.CommandBarButton

Private Sub Workbook_Open()
 
 MsgBox "列の 挿入と削除を禁止します"
 With Application.CommandBars
   Set myButton = .FindControl(ID:=3183)  '列の挿入
   Set myButtonDele = .FindControl(ID:=294) '列の削除
 End With
   
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Set myButton = Nothing
  Set myButtonDele = Nothing
End Sub

Private Sub myButton_Click(ByVal Ctrl As Office. _
      CommandBarButton, CancelDefault As Boolean)
  CancelDefault = True
  MsgBox "挿入禁止されてます"
End Sub

Private Sub myButtonDele_Click(ByVal Ctrl As Office. _
      CommandBarButton, CancelDefault As Boolean)
  CancelDefault = True
  MsgBox "削除禁止されてます"
End Sub

【58465】Re:列の挿入・削除の無効化
お礼  ようたん  - 08/10/27(月) 12:29 -

引用なし
パスワード
   ▼kanabun さん:

ご指導ありがとうございます。

教えていただいたコードを実行したところ列の挿入は、残念ながら無効化できませんでした。削除の方は、右クリックで表示されるショートカットメニューの削除に関しては無効にできましたが、メニューバーで編集ー削除の操作をすると削除されてしまいました。当方は、Excel2000を使用しているのですが、そのせいでしょうか?それともうひとつ。教えていただいたコードではボタンに割り当てられているIDを指定していますが(こんな方法はじめて知りました。勉強不足でお恥ずかしい・・・・・・。)どうすれば必要なボタンやコマンド(?)のIDを知ることができるのでしょうか?ご指導よろしくお願いいたします。

【58470】Re:列の挿入・削除の無効化
発言  kanabun  - 08/10/27(月) 16:13 -

引用なし
パスワード
   ▼ようたん さん:
 こんにちは。

>教えていただいたコードを実行したところ列の挿入は、残念ながら無効化できませんでした。削除の方は、右クリックで表示されるショートカットメニューの削除に関しては無効にできましたが、メニューバーで編集ー削除の操作をすると削除されてしまいました。

とりあえず、
列を選択して右メニューから「削除」は 調べてみたら、
別のIDが割り当てられているようで、
↓は あらたにそれ用の ボタンを追加してみたものです。
 列の挿入のほうも(こちらではうまくいっているようなのですが)
 操作方法によって、別のIDが使われているのかも知れませんね。
 詳しいことはぼくもよく分かりません。

'---------------
Option Explicit
Private WithEvents myButton As Office.CommandBarButton
Private WithEvents myButtonDele As Office.CommandBarButton
Private WithEvents myDelete As Office.CommandBarButton

Private Sub Workbook_Open()
 
 MsgBox "列の 挿入と削除を禁止します"
 With Application.CommandBars
   Set myButton = .FindControl(ID:=3183) '列の挿入
   Set myButtonDele = .FindControl(ID:=294) '列の削除
   Set myDelete = .FindControl(ID:=292) '削除(列選択 右クリック)
 End With
   
End Sub

Private Sub myDelete_Click(ByVal Ctrl As Office. _
      CommandBarButton, CancelDefault As Boolean)
  CancelDefault = True
  MsgBox "削除禁止されてます"
End Sub

> それともうひとつ。教えていただいたコードではボタンに割り当てられているIDを指定していますが(こんな方法はじめて知りました。勉強不足でお恥ずかしい・・・・・・。)どうすれば必要なボタンやコマンド(?)のIDを知ることができるのでしょうか?ご指導よろしくお願いいたします。

ぼく自身は CommandBarのリストを一覧するUserFormを自作して、
調べるときはいつもそれを使ってますが、
ht tp://www.moug.net/tech/exvba/0080007.htm
などを参考にしてください。

【58490】Re:列の挿入・削除の無効化
発言  ようたん  - 08/10/27(月) 23:24 -

引用なし
パスワード
   ▼kanabun さん:

ご指導ありがとうございます。その後、色々試し続けた結果、以下の
IDで偶然(?)列の削除・挿入を無効化することに成功しました。
ありがとうございました。

 With Application.CommandBars
   Set myButton = .FindControl(ID:=297) '列の挿入
   Set myButtonDele = .FindControl(ID:=478) '列の削除
   Set myDelete = .FindControl(ID:=294) '削除(列選択 右クリック)
 End With

【58492】Re:列の挿入・削除の無効化
発言  kanabun  - 08/10/28(火) 1:44 -

引用なし
パスワード
   ▼ようたん さん:
こんばんは。

>ご指導ありがとうございます。その後、色々試し続けた結果、以下の
>IDで偶然(?)列の削除・挿入を無効化することに成功しました。
>ありがとうございました。
>
> With Application.CommandBars
>   Set myButton = .FindControl(ID:=297) '列の挿入
>   Set myButtonDele = .FindControl(ID:=478) '列の削除
>   Set myDelete = .FindControl(ID:=294) '削除(列選択 右クリック)
> End With

おぉー、そうでしたか。 フィードバックありがとうございます。
さっそく メモ メモ (^^)

4092 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free