|
▼Kein さん:
Keinさん忙しいところすみません。
いまはチョットすぐ試せないので
また夜でも報告します。
ありがとうございました。
>あー・・どうも。イベントの動作に関しては理解できたようですね。
>で、今までは"特定の一枚のシート"で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 と同様に、そちらで正しくシート名を変更して下さい。
|
|