過去の記事なども調べ
下記でアプリケーション単位での設定はわかりました。
しかし全ブックに影響がでるのはこまるのでこれをブック単位に設定することはできますでしょうか。
お願いします!
▽ソース
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件)
- 最新から表示
- 回答順に表示
No.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
No.1
- 回答日時:
こんばんは。
本来、そのコードは、クラス-インスタンスだったはずですが……。
それは、ともかく、以下のように、ThisWorkbook モジュール上の Activate, Deactiveate イベントで、Call で、設定のオン・オフをしてあげればよいのではありませんか?
ただし、コードの中の、[With Workbook] は、[With Application] だとは思いますし、
サブルーチンですから、例えば、
Sub DisEnableKeys1(flg As Boolean)
だとは思いますが。
この回答への補足
お返事ありがとうございます。
確かに元は、[With Workbook]が、[With Application] でした 汗
自分でいじってる間にそのまま保存しちゃってました…。
Activate, Deactiveateとはどのように使えばいいんでしょうか…。
教えてくださいorz
サブルーチンは標準モジュールにいれてしまえばいいんですよね?
指定したいブックに下記を記述
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
------------------------------------
してみましたが、やはりエクセルのアプリ全体にかかってしまいます。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
ExcelVBA AddinでOnAction
-
ACCESSのVBAでPrivate Sub ~en...
-
COBOLで、Shellを起動するには?
-
VBAで2重のDoLoop関数から抜け...
-
モジュールとサブルーチン
-
プログラムの可読性が悪いです...
-
GOSUB命令とは
-
VBAのサブルーチンとプロシージ...
-
fortran subroutineについて
-
BASIC言語で時差を求めるには?
-
ArduinoのジャイロモジュールMP...
-
Excel VBAでリンク切れをチェッ...
-
エクセルVBAでシートモジュール...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
Perlソースコードをコンパイル...
-
モジュールとは何ですか
-
Form間の値の渡し方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
COBOLで、Shellを起動するには?
-
モジュールとサブルーチン
-
”:”がいっぱいの文について。
-
GOSUB命令とは
-
ACCESSのVBAでPrivate Sub ~en...
-
サブルーチンを使った再帰的な...
-
サブルーチンを認識しません。
-
初歩的な質問なのですが、サブ...
-
オフコン(富士通Kシリーズ)...
-
perlの構文でカンマの意味が分...
-
サブルーチンの中にサブルーチ...
-
配列と互換性のない型の要素に...
-
ExcelVBA AddinでOnAction
-
perlを使って英文だけを取り出...
-
Excel VBAから利用できるフリー...
-
Attempt to free unreferenced ...
-
サブルーチンやif分以外での中括弧
-
サブルーチンに引数を2つ以上...
おすすめ情報