|
▼じろう さん:
あー・・どうも。イベントの動作に関しては理解できたようですね。
で、今までは"特定の一枚のシート"でOnKeyを設定することを前提に
していましたが
>もう1sheetあるのですが
ということなら、全体の構成を変更する必要があります。
即ち
1 OnKeyを設定するマクロは、ThisWorkbookモジュールの Sheet_Activate
イベントにする。解除するマクロも Sheet_Deactivate にする。
2 Private Sub JmpCell は、改造して標準モジュールへ移動
ということになります。で、現在仮に "Sheet1" と "Sheet2" のシートモジュール
にそれらのマクロを入れているとして、まずそれら全てのマクロを削除して下さい。
そして標準モジュールに以下のマクロを入れます。
Sub JmpCell2(Snm As String)
If TypeName(Selection) <> "Range" Then Exit Sub
With ActiveCell
Select Case .Column
Case 3
If Snm = "Sheet1" Then
.Offset(, 1).Select '★追加
Else
.Offset(1).Select
End If
Case 5
If Snm = "Sheet2" Then
.Offset(, 2).Select '★ココ修正
Else
.Offset(1).Select
End If
Case 4, 6
.Offset(, 2).Select
Case 8
If Snm = "Sheet1" Then
.Offset(, 1).Select '★追加
Else
.Offset(1).Select
End If
Case 11
.Offset(1, -8).Select
Case 22
If Snm = "Sheet2" Then
.Offset(1, -21).Select '★ココ修正
Else
.Offset(1).Select
End If
Case 129
If .Row = 14 Then
.Offset(40, -3).Select
Else
.Offset(1).Select
End If
Case 126
Select Case .Row
Case 54, 56, 58, 60: .Offset(, 11).Select
Case Else: .Offset(1).Select
End Select
Case Else
.Offset(1).Select
End Select
End With
End Sub
上のコードは、あなたがUPしたコードと比較してみれば分かると思いますが
1 Sheet1 の特定の列のみで動く部分
2 Sheet2 の特定の列のみで動く部分
3 Sheet1,Sheet2 共通の列で動く部分
で再構成しています。つまり変数 Snm はアクティブシートの名前になります。
いちおう、イベントマクロ以外でOnKeyの設定を解除できるようにするため、
以下のマクロも標準モジュールに入れておいて下さい。
Sub Release_KeyAction()
With Application
.OnKey "{ENTER}"
.OnKey "~"
End With
End Sub
次に ThisWorkbookモジュール に以下のマクロを入れます。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim PrcSet As String
If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
PrcSet = "'JmpCell2" & Chr(34) & Sh.Name & Chr(34) & "'"
With Application
.OnKey "{ENTER}", PrcSet
.OnKey "~", PrcSet
End With
End If
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
With Application
.OnKey "{ENTER}"
.OnKey "~"
End With
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Application
.OnKey "{ENTER}"
.OnKey "~"
End With
End Sub
もちろん Sheet_Activate, Sheet_Deactivate イベントマクロに共通する
>If Sh.Name = "Sheet1" Or Sh.Name = "Sheet2" Then
というコードは JmpCell2 と同様に、そちらで正しくシート名を変更して下さい。
|
|