Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2666 / 13645 ツリー ←次へ | 前へ→

【66638】入力後のセル移動 たろう 10/9/17(金) 18:08 質問[未読]
【66639】Re:入力後のセル移動 よろずや 10/9/17(金) 19:38 回答[未読]
【66649】Re:入力後のセル移動 UO3 10/9/21(火) 15:47 回答[未読]
【66650】Re:入力後のセル移動 teian 10/9/21(火) 19:57 発言[未読]
【66652】Re:入力後のセル移動 UO3 10/9/21(火) 23:00 発言[未読]

【66638】入力後のセル移動
質問  たろう  - 10/9/17(金) 18:08 -

引用なし
パスワード
   あるシートだけ入力後Enterを押したら右にカーソルが移動するようにしたかったので

Private Sub Worksheet_Activate()

  Application.MoveAfterReturn = True
  Application.MoveAfterReturnDirection = xlToRight

End Sub

を指定して右に行くようにしたんですが
これだとこのシートを使った後別のブックやシートなどを使用するときにもその設定が適用されてしまいます。

あくまで通常は下で、一つのシートだけ右にしたいのです。
何かいい方法はないでしょうか。

【66639】Re:入力後のセル移動
回答  よろずや  - 10/9/17(金) 19:38 -

引用なし
パスワード
   ▼たろう さん:
>あるシートだけ入力後Enterを押したら右にカーソルが移動するようにしたかったので
>
>Private Sub Worksheet_Activate()

シートをアクティブにした時に設定してるなら、
アクティブじゃなくなった時に戻せばよろしいかと。

【66649】Re:入力後のセル移動
回答  UO3  - 10/9/21(火) 15:47 -

引用なし
パスワード
   ▼たろう さん:

こんにちは

回答そのものは、よろずやさんから出ています。

ちょっと気になった点。
対象のシートが、仮にブックを開いたときにアクティブだった場合、
この時点ではシートのActivateイベントが発生しません。
(というか、発生しているけど、VBAのチョンボでイベントルーティンに飛ばない?)

ですので、ブックを開いた時点で、アクティブシートが対象のものであれば【強制的に】
MoveAfterReturnDirectionを設定してやる必要があります。これはシートモジュールではなく
ThisWorkbookモジュールで対応しますので、他のコードも同じ場所に記述してみました。

【ThisWorkbookモジュール】

Option Explicit

Dim svMAR As Boolean
Dim svMARD As Long
Const mySheet As String = "Sheet1" '<== 対象シート


Private Sub Workbook_Open()
 svMAR = Application.MoveAfterReturn
 svMARD = Application.MoveAfterReturnDirection
 If ActiveSheet.Name = mySheet Then Call SetMAR
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
 If Sh.Name = mySheet Then Call SetMAR
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
 ResetMAR
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 ResetMAR
End Sub

Private Sub SetMAR()
 Application.MoveAfterReturn = True
 Application.MoveAfterReturnDirection = xlToRight
End Sub

Private Sub ResetMAR()
 Application.MoveAfterReturn = svMAR
 Application.MoveAfterReturnDirection = svMARD
End Sub

【66650】Re:入力後のセル移動
発言  teian  - 10/9/21(火) 19:57 -

引用なし
パスワード
   ▼UO3 さん:
Sheet系のActivate、Deactivateイベントだけだと、
目的のシートをアクティブのまま、別のブックのWindowに切り替えた場合は、
Resetされないのでは?Workbook_Deactivate()にも考慮が必要かと。
さらに、別のブックから戻った時の考慮も。
例えば、
Private Sub Workbook_Activate()
 Call Workbook_SheetActivate(Me.ActiveSheet)
End sub
とかの追加をしとくとか?

【66652】Re:入力後のセル移動
発言  UO3  - 10/9/21(火) 23:00 -

引用なし
パスワード
   ▼teian さん:

なるほど。
同じエクセル配下で開かれている別ブックだと、そこにも影響しちゃいますね。
ご指摘ありがとうございます。

▼たろうさん

ということで、そのような場合も想定し、さらに以下を追加しておいてください。

Private Sub Workbook_Activate()
 If ActiveSheet.Name = mySheet Then Call SetMAR 
End Sub

Private Sub Workbook_Deactivate()
  ResetMAR
End Sub

2666 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free