• ベストアンサー
  • すぐに回答を!

Excel VBA で1時的に右クリックを使いたい

  • 質問No.9654276
  • 閲覧数76
  • ありがとう数6
  • 気になる数1
  • 回答数5
  • コメント数0

お礼率 44% (153/346)

30枚ほどのシートの表を一挙に変更したいです。ところが、各シートに次のコードが入っているため、右クリックしてコピーとか一切使えません。各シートの変更ができるまで、右クリック使いたいです。何か方法ありませんでしょうか?

' 画面の一番上表示
Dim hr As Range
Set hr = Range("A1") '左上隅セルを設定
ActiveWindow.ScrollRow = hr.Row '行の一番上にスクロール
ActiveWindow.ScrollColumn = hr.Column '列の一番左にスクロール
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示
If Target.Row > 14 And Target.Row < 45 And Target.Column > 13 And Target.Column < 15 Then
明細入力フォーム.Show
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 1 And Target.Column < 3 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 3 And Target.Column < 5 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 5 And Target.Column < 7 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 8 And Target.Column < 10 Then
Call ShowCalendarFromRange2(Target)
End If

If Target.Row > 36 And Target.Row < 45 And Target.Column > 2 And Target.Column < 4 Then
UserForm3.Show
End If

If Target.Row > 36 And Target.Row < 45 And Target.Column > 4 And Target.Column < 6 Then
UserForm3.Show
End If

If Target.Row > 36 And Target.Row < 45 And Target.Column > 6 And Target.Column < 8 Then
UserForm3.Show
End If

If Target.Row > 36 And Target.Row < 44 And Target.Column > 9 And Target.Column < 11 Then
UserForm3.Show
End If
End Sub

質問者が選んだベストアンサー

  • 回答No.5
  • ベストアンサー

ベストアンサー率 64% (265/409)

イミディエイト ウィンドウで
Application.EnableEvents=False
を実行してから編集作業をしてください。

編集終了後
Application.EnableEvents=True
を実行。
お礼コメント
aitaine

お礼率 44% (153/346)

いま、あなた様のコード入力で、完璧にしかも早く各シートの表を変更することができました。心からお礼を申し上げます。本当にありがとうございました。
投稿日時:2019/09/09 10:44

その他の回答 (全4件)

  • 回答No.4

ベストアンサー率 59% (967/1632)

他カテゴリのカテゴリマスター
モジュールの関数宣言より前に
Public Const SHIFT_KEY = &H10 'Shift key code
Declare Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer
と宣言しておいて、関数の先頭で
If GetKeyState(SHIFT_KEY) = 0 Then Exit Sub
を入れておくと、Shiftキーを押して右クリックした場合のみそのマクロを機能させられます。
  • 回答No.3

ベストアンサー率 53% (549/1027)

Excel(エクセル) カテゴリマスター
No2の追加です。
イベントをオンオフする以外にコードそのものをオフにしてしまう手もあります。
添付画像のようにツールバーの上で右クリックし編集にチェックを入れます。
画像のツールバーが出てきますので
該当のコードをすべて選択状態にして
指の絵でさしているアイコン「コメントブロック」をクリックすると、選択した行の行頭に「'」が追加されてコード全体が緑色になりそのコードが実行されなくなります。

操作が終わったら
該当のコードをすべて選択状態にして
「コメントブロック」の右の「非コメントブロック」をクリックすると元に戻ります。
  • 回答No.2

ベストアンサー率 53% (549/1027)

Excel(エクセル) カテゴリマスター
以下二つのコードを追加してそれぞれ
イベントを停止したいときに実行
Sub EventsOff()
Application.EnableEvents = False
End Sub
停止を再開したいときに実行
Sub EventsOn()
Application.EnableEvents = True
End Sub
  • 回答No.1

ベストアンサー率 62% (465/744)

Excel(エクセル) カテゴリマスター
>1時的に右クリックを使いたい
Z1セルに1が入力されている時のみ右クリックが使えます。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  If Range("Z1").Value = 1 Then
    Exit Sub
  Else
    Cancel = True
  End If
  If Target.Row > 14 And Target.Row < 45 And Target.Column > 13 And Target.Column < 15 Then
    明細入力フォーム.Show
  End If
  If Target.Row > 36 And Target.Row < 45 And Target.Column > 1 And Target.Column < 3 Then
    Call ShowCalendarFromRange2(Target)
  End If
'・・・・・・
'・・・・・・
'・・・・・・
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ