| 
    
     |  | ▼勉強中 さん: こんばんは。
 プロシジャー内で宣言したローカル変数は、
 
 原則としてプロシジャーが実行されている間、値が保持されます。
 
 プロシジャー終了後は開放されます。
 
 よって、このままだとプロシジャー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イベントは
 使えませんか?
 
 |  |