Excel VBA質問箱 IV

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

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


5818 / 13644 ツリー ←次へ | 前へ→

【48671】関数の値の共有 勉強中 07/5/1(火) 7:11 質問[未読]
【48672】Re:関数の値の共有 ichinose 07/5/1(火) 7:15 発言[未読]
【48673】Re:関数の値の共有 勉強中 07/5/1(火) 10:39 質問[未読]
【48680】Re:関数の値の共有 ichinose 07/5/1(火) 20:35 発言[未読]
【48686】Re:関数の値の共有 勉強中 07/5/1(火) 21:49 お礼[未読]

【48671】関数の値の共有
質問  勉強中  - 07/5/1(火) 7:11 -

引用なし
パスワード
   「sub 前回」 の中で関数Aの値を"100"と定義したとします。
「sub 今回」の中でも関数Aの値を反映させたいのですが、Aの値はEnptyとなってしまいます。「sub 今回」の中でも関数Aを反映させる方法はないのでしょうか。

【48672】Re:関数の値の共有
発言  ichinose  - 07/5/1(火) 7:15 -

引用なし
パスワード
   ▼勉強中 さん:
おはようございます。

>「sub 前回」 の中で関数Aの値を"100"と定義したとします。
>「sub 今回」の中でも関数Aの値を反映させたいのですが、Aの値はEnptyとなってしまいます。「sub 今回」の中でも関数Aを反映させる方法はないのでしょうか。

この記述だけで勉強中 さんがおっしゃっていることが
この質問を見ている方に再現できると思いますか?

勉強中 さんの記述どおりに操作すれば、上記の現象が再現できる
ドキュメントが必要です。

再度、投稿してみて下さい。

【48673】Re:関数の値の共有
質問  勉強中  - 07/5/1(火) 10:39 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます。
以下のとおりです。

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


>▼勉強中 さん:
>おはようございます。
>
>>「sub 前回」 の中で関数Aの値を"100"と定義したとします。
>>「sub 今回」の中でも関数Aの値を反映させたいのですが、Aの値はEnptyとなってしまいます。「sub 今回」の中でも関数Aを反映させる方法はないのでしょうか。
>
>この記述だけで勉強中 さんがおっしゃっていることが
>この質問を見ている方に再現できると思いますか?
>
>勉強中 さんの記述どおりに操作すれば、上記の現象が再現できる
>ドキュメントが必要です。
>
>再度、投稿してみて下さい。

【48680】Re:関数の値の共有
発言  ichinose  - 07/5/1(火) 20:35 -

引用なし
パスワード
   ▼勉強中 さん:
こんばんは。
プロシジャー内で宣言したローカル変数は、

原則としてプロシジャーが実行されている間、値が保持されます。

プロシジャー終了後は開放されます。

よって、このままだとプロシジャー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イベントは
使えませんか?

【48686】Re:関数の値の共有
お礼  勉強中  - 07/5/1(火) 21:49 -

引用なし
パスワード
   ▼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イベントは
>使えませんか?

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