こんばんは。Wendy02です。
たいへんすみませんでした。手を抜いたわけではなかったのですが、マクロをある程度、ご存知の方とそうでない方があって、教えても、「ThisWorkbook モジュールは何」と聞かれて説明するのも気が進まないもので、あのような形にしてしまいました。
きちんとした形に、変えさせていただきます。
一応、こちらでも調べてみましたが、もう一度調べてみてください。
ThisWorkbook モジュールに設定して試してみてください。
'-----------------------------------------
Private Sub Workbook_Activate()
'ブックをアクティブにした時
Call SettingMacro
End Sub
Private Sub Workbook_Open()
'ブックをオープンした時
Call SettingMacro
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'ブックをクローズした時
Call SettingOffMacro
End Sub
Private Sub Workbook_Deactivate()
'ブックを非アクティブにした時
Call SettingOffMacro
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'シートをアクティブにした時
If Sh.Name = "Sheet1" Then
Call SettingMacro
End If
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'シートをアクティブにした時
If Sh.Name = "Sheet1" Then
Call SettingOffMacro
End If
End Sub
'---------------------------
Private Sub SettingMacro()
'設定
Application.OnKey "{Enter}", "ThisWorkbook.JumpingMacro"
Application.OnKey "~", "ThisWorkbook.JumpingMacro"
End Sub
Private Sub SettingOffMacro()
'解除
Application.OnKey "{Enter}"
Application.OnKey "~"
End Sub
'---------------------------
Private Sub JumpingMacro()
If ActiveSheet.Name = "Sheet1" Then
If Not Intersect(ActiveCell, Range("$B$2")) Is Nothing Then
Cells(65536, 1).End(xlUp).Offset(1).Select
ElseIf Not Intersect(ActiveCell, Range("A5:H65536")) Is Nothing And _
ActiveCell.Column = 8 Then
Cells(ActiveCell.Row, 1).Select
Else
ActiveCell.Offset(, 1).Select
End If
Else
ActiveCell.Offset(1).Select
End If
End Sub
situmon10hanakoさん、こんばんは。
Wendy02です。
>もし、シート名を変更した場合はその都度VBAのシート名も変えないと構文の効き目がないのですね。
すみません、シート名を変更しても、シート名を変えずに出来ます。これは、また、少し上の段階になります。簡単に換えればよいことですが、それでも、慣れていないと間違えやすいです。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'シートをアクティブにした時
If Sh.CodeName = "Sheet1" Then
Call SettingMacro
End If
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'シートをアクティブにした時
If Sh.CodeName = "Sheet1" Then
Call SettingOffMacro
End If
End Sub
'***
Private Sub JumpingMacro()
If ActiveSheet.CodeName = "Sheet1" Then
・
・
・
この『CodeName』 というのは、左下のプロパティ・ウィンドウに出てくるオブジェクト名のことです。これは、一般的に、手動でしか変更しないものですから、ほとんど固有ですから、これで固定できます。
>VBAを含めパソコンのなかをよく知っている人は魔法使いと似ています。
>たくさんの呪文を学んで身につけ、呪文ひとつで何でもやってしまうような感じです。
プログラミングは、ひじょうに語学に似ています。
私は、それほど語学が出来ませんので、毎日、VBAやVisual Basic は勉強を続けています。たかがExcelなのに、ただ、それだけでは、足らないようです。単語と構文の組み合せです。基礎的な組み合せによって構文を作ります。主語がオブジェクト、動詞がメソッド、目的語はそれぞれのプロパティのようなものです。そして、ExcelはExcelだけの固有の環境があります。
でも、私は、語学が、VBAのレベルと同じように、できるようにならないかなって、いつも思っています。
補足
Wendy02さん!あ~~またお会いできてよかった。 いまsheet1のコードでなくThisWorkbook モジュールに貼り付けて確認しました。 バックで他のファイルを開いても大丈夫でした。 確認したのは自宅のExcelなので、明日、実際に使う会社のExcelでやってみます。 いま締め切ってまた勇み足になりたくないので、取り急ぎ、いまは回答を見たというご報告まで、です。 (実は、貼り付け先がsheet1とThisWorkbook モジュールではどう違うのかわかりません。 VBAことはぜんぜんわかっていません。 わかりませんが、ここで手を煩わせるとWendy02さんの回答を待つ多くの方々への回答が遅れますので、気になさらないでください。)