Excel VBA質問箱 IV

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

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


8574 / 13646 ツリー ←次へ | 前へ→

【32480】シートのActive設定 こぼらー 05/12/15(木) 19:40 質問[未読]
【32481】Re:シートのActive設定 とおりすがり 05/12/15(木) 20:18 発言[未読]
【32487】Re:シートのActive設定 ichinose 05/12/15(木) 23:30 発言[未読]
【32500】Re:シートのActive設定 こぼらー 05/12/16(金) 10:12 質問[未読]
【32502】Re:シートのActive設定 Statis 05/12/16(金) 10:53 発言[未読]
【32519】Re:シートのActive設定 こぼらー 05/12/16(金) 17:28 お礼[未読]
【32505】Re:シートのActive設定 ichinose 05/12/16(金) 12:01 発言[未読]
【32518】Re:シートのActive設定 こぼらー 05/12/16(金) 17:25 お礼[未読]

【32480】シートのActive設定
質問  こぼらー  - 05/12/15(木) 19:40 -

引用なし
パスワード
   質問させていただきます。

あるシートをDeactivateになった際に入力内容をチェックするVBAを作成しています。

【処理】
1.sheet1内のセル内容を編集します。
2.sheet2を選択します。
3.sheet1内の入力内容をチェックします。

【困ってること】
2.を実行した時点でsheet2が表示され、sheet2を表示したままエラーメッセージボックスが表示されます。チェック処理が終了した時点でsheet2へ遷移するのが、ベストなのですがよい方法はあるでしょうか?

【32481】Re:シートのActive設定
発言  とおりすがり  - 05/12/15(木) 20:18 -

引用なし
パスワード
   ↓はどうしますか?

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=32409;id=excel

【32487】Re:シートのActive設定
発言  ichinose  - 05/12/15(木) 23:30 -

引用なし
パスワード
   ▼こぼらー さん:
こんばんは。
>質問させていただきます。
>
>あるシートをDeactivateになった際に入力内容をチェックするVBAを作成しています。
>
>【処理】
>1.sheet1内のセル内容を編集します。
>2.sheet2を選択します。
>3.sheet1内の入力内容をチェックします。
>
>【困ってること】
>2.を実行した時点でsheet2が表示され、sheet2を表示したままエラーメッセージボックスが表示されます。チェック処理が終了した時点でsheet2へ遷移するのが、ベストなのですがよい方法はあるでしょうか?
新規ブックの
Thisworkbookのモジュールに
'============================================
Private oldsht As Object
'======================================================
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Dim retcode As Long
  If oldsht.Name = "Sheet1" Then
    Application.EnableEvents = False
    oldsht.Activate
    retcoide = 0
    For idx = 1 To 3
     If Cells(idx, 1).Value <> idx Then
       retcode = 1
       MsgBox "入力が未完です"
       Exit For
       End If
     Next
    If retcode = 0 Then Sh.Activate
    Application.EnableEvents = True
    End If
End Sub
'===============================================================
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  Set oldsht = Sh
End Sub


として下さい。
上記のコードは、
シートSheet1のセルA1,A2,A3にそれぞれ1,2,3と入力されていないと
シートの切り替えができない仕様です。

試してみて下さい。

【32500】Re:シートのActive設定
質問  こぼらー  - 05/12/16(金) 10:12 -

引用なし
パスワード
   返信ありがとうございます。

実行するとうまくいきました。
そこで2点質問させてください

1.
ThisWorkBookの
>Private Sub Workbook_SheetActivate(ByVal Sh As Object)
については
「全てのワークシートについてシートがアクティブになったとき」
という考えでよいのでしょうか?

2.
>    Application.EnableEvents = False
のコードの意味がわかりません。すみません。

よろしくお願いします。

【32502】Re:シートのActive設定
発言  Statis  - 05/12/16(金) 10:53 -

引用なし
パスワード
   ▼こぼらー さん:
こんにちは
こぼらー さんのためにも
まずは、自分で試したりヘルプなどで調べてみてください。


>1.
>ThisWorkBookの
>>Private Sub Workbook_SheetActivate(ByVal Sh As Object)
>については
>「全てのワークシートについてシートがアクティブになったとき」
>という考えでよいのでしょうか?

新規ファイルで試す。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox Sh.Name
End Sub

>2.
>>    Application.EnableEvents = False
>のコードの意味がわかりません。すみません。
>
ヘルプで確認する。

それでも良く解からないときは質問された方が良いと思います。

【32505】Re:シートのActive設定
発言  ichinose  - 05/12/16(金) 12:01 -

引用なし
パスワード
   ▼こぼらー さん:
こんにちは。
え〜っと、
こんな事しなくても、Deactivateイベントだけで可能でした。
新規ブックのシートSheet1のモジュールに

'========================================================
Private Sub Worksheet_Deactivate()
  Dim retcode As Long
  Dim nsht As Worksheet
  Set nsht = ActiveSheet
  Application.EnableEvents = False
  Me.Activate
  retcoide = 0
  For idx = 1 To 3
    If Cells(idx, 1).Value <> idx Then
     retcode = 1
     MsgBox "入力が未完です"
     Exit For
     End If
    Next
  If retcode = 0 Then nsht.Activate
  Application.EnableEvents = True
End Sub


>

因みに
>
>1.
>ThisWorkBookの
>>Private Sub Workbook_SheetActivate(ByVal Sh As Object)
>については
>「全てのワークシートについてシートがアクティブになったとき」
>という考えでよいのでしょうか?

当該ブックのワークシートについてシートがアクティブになったとき

ですね


>2.
>>    Application.EnableEvents = False
>のコードの意味がわかりません。すみません。
これは、イベントの2重発生を防ぐためです。
詳細はHelpで確認してください。

【32518】Re:シートのActive設定
お礼  こぼらー  - 05/12/16(金) 17:25 -

引用なし
パスワード
   何から何までありがとうございます。
こういった質問は確かに自分で調べれますね。
ついつい「ついで」で聞いてしまいました。

ほんとうにありがとうございます。

【32519】Re:シートのActive設定
お礼  こぼらー  - 05/12/16(金) 17:28 -

引用なし
パスワード
   >まずは、自分で試したりヘルプなどで調べてみてください。
その通りです。以後気をつけます。

>それでも良く解からないときは質問された方が良いと思います。
そのときはよろしくお願いします。

ご指摘ありがとうございました。

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