プロが教えるわが家の防犯対策術!

過去の記事なども調べ
下記でアプリケーション単位での設定はわかりました。
しかし全ブックに影響がでるのはこまるのでこれをブック単位に設定することはできますでしょうか。
お願いします!

▽ソース
Sub Auto_Open()
Call DisEnableKeys1
Call DisEnableKeys2
End Sub
Sub DisEnableKeys1()
Dim eFlg As Boolean
eFlg = False 'サブルーチンにしてトグルも可能
With Workbook
.CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("貼り付け(&P)").Enabled = eFlg
.CommandBars("Cell").FindControl(, 22).Enabled = eFlg
If eFlg = False Then
.OnKey "^v", "DummyMacro1"
Else
.OnKey "^v"
End If
End With
End Sub
Sub DisEnableKeys2()
Dim eFlg As Boolean
eFlg = False 'サブルーチンにしてトグルも可能
With Workbook
.CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("コピー(&C)").Enabled = eFlg
.CommandBars("Cell").FindControl(, 19).Enabled = eFlg
If eFlg = False Then
.OnKey "^c", "DummyMacro2"
Else
.OnKey "^c"
End If
End With
End Sub
Sub DummyMacro1()
MsgBox "貼り付けは禁止されています。", vbInformation
End Sub
Sub DummyMacro2()
MsgBox "コピーは禁止されています。", vbInformation
End Sub

A 回答 (2件)

こんばんは。


#1の説明だけでは、お分かりにはならなかったのですね。「サブルーチンにしてトグルも可能」と書いていらっしゃるので、分かっているかと思いましたが、以下のようにしたら、どうかということです。


'指定するブックのThisWorkbook モジュール

Private Sub Workbook_Activate()
  Call DisEnableKeys1(False)
  Call DisEnableKeys2(False)
End Sub

Private Sub Workbook_Deactivate()
  Call DisEnableKeys1(True)
  Call DisEnableKeys2(True)
End Sub
Private Sub Workbook_Open()
  Call DisEnableKeys1(False)
  Call DisEnableKeys2(False)
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Call DisEnableKeys1(True)
  Call DisEnableKeys2(True)
End Sub

'------------------------------------------
'標準モジュール
'------------------------------------------

Sub DisEnableKeys1(eflg As Boolean)
  With Application
    .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("貼り付け(&P)").Enabled = flg
    .CommandBars("Cell").FindControl(, 22).Enabled = eflg
    If eflg = False Then
      .OnKey "^v", "DummyMacro1"
    Else
      .OnKey "^v"
    End If
  End With
End Sub
Sub DisEnableKeys2(eflg As Boolean)
  With Application
    .CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("コピー(&C)").Enabled = eflg
    .CommandBars("Cell").FindControl(, 19).Enabled = eflg
    If eflg = False Then
      .OnKey "^c", "DummyMacro2"
    Else
      .OnKey "^c"
    End If
  End With
End Sub
Private Sub DummyMacro1()
MsgBox "貼り付けは禁止されています。", vbInformation
End Sub
Private Sub DummyMacro2()
MsgBox "コピーは禁止されています。", vbInformation
End Sub
    • good
    • 0

こんばんは。



本来、そのコードは、クラス-インスタンスだったはずですが……。

それは、ともかく、以下のように、ThisWorkbook モジュール上の Activate, Deactiveate イベントで、Call で、設定のオン・オフをしてあげればよいのではありませんか?

ただし、コードの中の、[With Workbook] は、[With Application] だとは思いますし、

サブルーチンですから、例えば、
Sub DisEnableKeys1(flg As Boolean)
だとは思いますが。

この回答への補足

お返事ありがとうございます。
確かに元は、[With Workbook]が、[With Application] でした 汗
自分でいじってる間にそのまま保存しちゃってました…。

Activate, Deactiveateとはどのように使えばいいんでしょうか…。
教えてくださいorz

サブルーチンは標準モジュールにいれてしまえばいいんですよね?

補足日時:2008/02/12 20:14
    • good
    • 0
この回答へのお礼

指定したいブックに下記を記述
Private Sub Workbook_Activate()
Call DisEnableKeys1
Call DisEnableKeys2
End Sub
------------------------------------
標準モジュールに下記を記述
Sub DisEnableKeys1()
Dim eFlg As Boolean
eFlg = False 'サブルーチンにしてトグルも可能
With Application
.CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("貼り付け(&P)").Enabled = eFlg
.CommandBars("Cell").FindControl(, 22).Enabled = eFlg
If eFlg = False Then
.OnKey "^v", "DummyMacro1"
Else
.OnKey "^v"
End If
End With
End Sub
Sub DisEnableKeys2()
Dim eFlg As Boolean
eFlg = False 'サブルーチンにしてトグルも可能
With Application
.CommandBars("Worksheet Menu Bar").Controls("編集(&E)").Controls("コピー(&C)").Enabled = eFlg
.CommandBars("Cell").FindControl(, 19).Enabled = eFlg
If eFlg = False Then
.OnKey "^c", "DummyMacro2"
Else
.OnKey "^c"
End If
End With
End Sub
Sub DummyMacro1()
MsgBox "貼り付けは禁止されています。", vbInformation
End Sub
Sub DummyMacro2()
MsgBox "コピーは禁止されています。", vbInformation
End Sub

------------------------------------

してみましたが、やはりエクセルのアプリ全体にかかってしまいます。。。

お礼日時:2008/02/12 20:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!