Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2016)
VBAで宛先、CCへの追加
投稿日時: 18/03/03 02:20:46
投稿者: hame

たびたび申し訳ありませんが
前日、宛先についてご教授頂き
CCへの追加も自分なりに調べて行ってみました
下記の通りの記述にしたところ
テーブルの一番最後に読みだしたアドレスのみが区分がmではないにもかかわらず 
宛先のほうに入ってしまいます
原因は何でしょうか?
 
       Do Until rsM.EOF
            If rsM!区分 = "m" Then
              objMAIL.Recipients.Add (rsM!アドレス)
            Else
              Set NewRecipient = objMAIL.Recipients.Add(rsM!アドレス)
              NewRecipient.Type = 2
            End If
            rsM.MoveNext
        Loop

回答
投稿日時: 18/03/05 13:38:56
投稿者: sk

引用:
テーブルの一番最後に読みだしたアドレスのみが区分がmではないにもかかわらず 
宛先のほうに入ってしまいます

それをどのようにして確認されたのでしょうか。
 
もし、テーブルをデータシートビューで開いて
「目視で判断した」ということであれば、
 
引用:
rsM![区分]

をウォッチ式に追加し、任意のステートメントに
ブレークポイントを設定した上で、1行ずつ
ステップイン実行しながら、各レコードの[区分]の
値が何であるかを確認された方がよいでしょう。

投稿日時: 18/03/05 18:54:14
投稿者: hame

回答ありがとうございます
wath式がどうしても表示されないので
イミディエイトウィンドウで確認したところ
該当のメールアドレスに対する区分はmではありませんでした
 
一番最後にあるアドレスをAとします 区分はmではありません
この状態で実行するとAは宛先に入ります
テーブルでAの下にBというアドレスで区分もmではないものを追加します
すると、AはCCに入り、今度はBが宛先に入ります
 
このような現象になっています
 
またブレイクポイントを下記の式の一番上に置き、ステップインで進めた場合
2へ入ってきた場合は、5へ進みますが
3へ入ってきた場合は4には進まず、1へ進みます
 
       Do Until rsM.EOF                          ・・・1
             If rsM!区分 = "m" Then
               objMAIL.Recipients.Add (rsM!アドレス) ・・・2
             Else
               Set NewRecipient = objMAIL.Recipients.Add(rsM!アドレス)  ・・・3
               NewRecipient.Type = 2                   ・・・4
             End If                             ・・・5
             rsM.MoveNext
         Loop

回答
投稿日時: 18/03/06 09:27:58
投稿者: sk

引用:
一番最後にあるアドレスをAとします 区分はmではありません
この状態で実行するとAは宛先に入ります
テーブルでAの下にBというアドレスで区分もmではないものを追加します
すると、AはCCに入り、今度はBが宛先に入ります

引用:
またブレイクポイントを下記の式の一番上に置き、ステップインで進めた場合
2へ入ってきた場合は、5へ進みますが
3へ入ってきた場合は4には進まず、1へ進みます

それはまた奇妙な現象。
 
引用:
If rsM!区分 = "m" Then
    objMAIL.Recipients.Add (rsM!アドレス)
Else
    Set NewRecipient = objMAIL.Recipients.Add(rsM!アドレス)
    NewRecipient.Type = 2
End If

上記のステートメントを以下のように書き換えて
実行した場合も同様でしょうか。
 
-------------------------------------------------------------
 
Set NewRecipient = objMAIL.Recipients.Add(rsM!アドレス)
NewRecipient.Resolve
If rsM!区分 = "m" Then
    NewRecipient.Type = 1
Else
    NewRecipient.Type = 2
End If
Set NewRecipient = Nothing
 
-------------------------------------------------------------

投稿日時: 18/03/06 20:17:44
投稿者: hame

教えていだたいたコードにしたところ
ステップインでの動作で奇妙な動きはなくなりました。
なぜ、最後のアドレスだけCCにならないかの原因はわかりましたが
解決方法がわかりません
 
1でF8で進めたら、区分がmでなくてもいったん宛先にアドレスが入ります
そのまま進めていって、次のレコードでまた、1に来て
次に進んだ時点で、1つ前のアドレスがCCへ移ります
レコードの最後に入っているアドレスは、1には戻ってこないので
宛先のままになっているようです
解決方法はありますでしょうか?
 
一応、今まではテーブル上区分がmのものを先に書き
mでないものを後に書いていましたが
これを逆にすればきれいに宛先とCCに分かれましたが
テーブルの順序を気にせずに動作させる方法はありますでしょうか?
 
Set NewRecipient = objMAIL.Recipients.Add(rsM!アドレス)・・・1
NewRecipient.Resolve
 If rsM!区分 = "m" Then
     NewRecipient.Type = 1
 Else
     NewRecipient.Type = 2
 End If
 Set NewRecipient = Nothing

投稿日時: 18/03/24 02:41:52
投稿者: hame

とりあえずは問題が出ていないので
閉めさせていただきます