| 
    
     |  | ▼ichinose さん: こんばんは。
 おかげさまで意とする動作が確認できました。
 ありがとうございます。
 プロシージャの中ではなく外で宣言するのですね。
 今後ともご指導をお願いします。
 
 >こんばんは。
 >プロシジャー内で宣言したローカル変数は、
 >
 >原則としてプロシジャーが実行されている間、値が保持されます。
 >
 >プロシジャー終了後は開放されます。
 >
 >よって、このままだとプロシジャーAでdtBfr1にデータをセットしても
 >
 >プロシジャーBで参照しているdtBfr1とは別物です。
 >
 >
 >Private dtBfr1 As String
 >
 >>Sub A()
 >   Dim dtBfr1 As String '←この行は、削除
 >>  Range("z5").Select
 >>  dtBfr1 = ActiveCell.Value  ←dtBfr1は更新前のデータです。
 >>  ActiveWorkbook.RefreshAll  ←ここでデータ更新します。(外部データ)
 >>  Application.OnTime Now + TimeValue("00:00:20"), "B" ←「Sub Bを呼びま                              す」
 >>End Sub
 >>
 >>
 >>Sub B()
 >>  Dim dtAftr1 As String
 >>  Range("z5").Select
 >>  dtAftr1 = ActiveCell.Value   ←dtAftr1は更新後のデータです。
 >>  If dtBfr1 <> dtAftr1 Then    ←データが変更されている場合は変更後の                   データを音声で読みあげたいのですが、                   ここでdtBfr1の値が「empty」となってし                   まいます。
 >>    Application.Speech.Speak (dtAftr1)
 >>  End If
 >>End Sub
 >
 >としてみてください。
 >
 >確認していませんが、この仕様だとシートのChangeイベントは
 >使えませんか?
 
 |  |