こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

EXCEL2007 VBA アクティブでないワークシートの名前を取得したい

Sheet1とSheet2の【A1セル】【B1セル】には以下の処理が入っています。また2つのシートにはVBAを使って、再計算がされるたびに自身のシート名を表示するメッセージボックスを出力する処理を記述しています。

【A1セル】
 リアルタイムで値が送られてくる。
【B1セル】
 A1セルの値を使った式
【VBA】
 Private Sub Worksheet_Calculate()
  MsgBox **************
 End Sub

ここからが質問なんですが、Sheet3をアクティブシートにしている場合、VBAの「*****」の部分に何と記述すれば、再計算されたシート名を取得できますか?

投稿日時 - 2009-12-13 00:32:55

QNo.5518179

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

こんにちは。

ご質問内容は、Sheet3をアクティブシートにしているけれども、Sheet1 と Sheet2 のどちらかにデータがDDEかOLEで入ってくるというわけですか?その入ってきた方のデータがどちらのシートか、というのを見つけたい、というご質問ですか?

データの流入は、安定していますか?

さて、

> Private Sub Worksheet_Calculate()
>  MsgBox **************
> End Sub

「再計算がされるたびに自身のシート名を表示するメッセージボックスを出力する処理を記述しています。」
あまりメッセージボックスで出すのは賛成しません。メッセージボックスを、いちいち、ボタンをクリックしないと、マクロが止まってしまいます。メッセージボックスは、ユーザーの指示を待機しているわけで、VBAでコントロールできるものもありますが、データの流入とぶつかるとうまく行かないように思います。

私は、アプリーションの一番下のステータスバーに表示することをお勧めします。音が必要なら、Beep を入れればよいと思います。シートのCalculate イベントを発生するために、=NOW() の数式をそれぞれのシートに置きます。

'-------------------------------------------
'標準モジュール

Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
'-------------------------------------------
'シート1とシート2 のシートモジュールに同じ内容のマクロを置く。
'ThisWorkbook モジュールのSub Workbook_SheetCalculate(ByVal Sh As Object)は、こちらではハングしました。

Private Sub Worksheet_Calculate()
On Error GoTo EndLine
  Application.EnableEvents = False
  'Beep ''音を鳴らす
  Application.StatusBar = Me.Name
  DoEvents
  Sleep 3000
EndLine:
  Application.StatusBar = ""
  Application.EnableEvents = True
End Sub

投稿日時 - 2009-12-13 18:52:02

あなたにオススメの質問