[[20230614114902]] 『OutlookをオフラインにするVBA』(れいこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『OutlookをオフラインにするVBA』(れいこ)

メール作成のVBAがありますが、即時送信されないよう、
メール作成の前にOutlookをオフラインにしたいのですが、
下記でうまく動きません。
("**.*.*.*****")の*は調べて取得した数字です。
修正すべき箇所を教えていただきたいです。

Sub SwitchToOffline()

    Dim olApp As Object 'Outlook.Application
    Set olApp = CreateObject("**.*.*.*****")

    ' 現在のオンライン/オフライン状態を確認
    If olApp.Session.Offline = False Then
        ' オンラインモードの場合のみオフラインモードに切り替え
        olApp.Session.Offline = True
    End If

    Set olApp = Nothing
End Sub

< 使用 Excel:unknown、使用 OS:Windows10 >


 コード全部見てないですが、
 .Sendを.Saveにするだけで、下書きになると思うんですけど・・・。
(稲葉) 2023/06/14(水) 12:16:20

コメントありがとうございます。

下書きを作成した後に送信するということですね。
コードを確認したところ、「ML.send」とありました。

下書きを一括送信する必要があります。
下記、ネットから拾ったものですが、必要箇所を変更したうえで、
追加実行することで送信の流れで大丈夫でしょうか。

Sub 下書きメール全部送信()

Dim oApp As New Outlook.Application
Dim FSO As Object
Set FSO = CreateObject(“Scripting.FileSystemObject”)
Dim Path As String, WSH As Variant
Set WSH = CreateObject(“Wscript.Shell”)
Dim DesktopPath As String
DesktopPath = WSH.SpecialFolders(“Desktop”)

Dim oAcct
Dim oStore

Dim oFolder
Dim cITEM
Dim n As Integer, j As Integer, l As Integer

Set oAcct = oApp.Session.Accounts(“メールアドレス”)
Set oStore = oAcct.DeliveryStore

Set oFolder = oStore.GetDefaultFolder(16)

oFolder.Display

j = 0
l = 1

If oFolder.Items.Count = 0 Then
Exit Sub
End If

For n = 1 To oFolder.Items.Count
Set cITEM = oFolder.Items(l)
On Error GoTo 次の下書きメール送信
cITEM.Display
cITEM.Send ’送る場合
Set cITEM = Nothing
On Error GoTo 0

Next

Set oFolder = Nothing
Set FSO = Nothing

Exit Sub

次の下書きメール送信:

cITEM.Close 0
l = l + 1
Resume Next

End Sub

(れいこ) 2023/06/14(水) 12:49:34


 下書き全部ならいいでしょうけど、今回送りたいメール以外に下書き保存されてませんか?
 考え方変えて、メール作る前にチェックしてあげれば済む気がします。
 どうしても下書き一括で送りたいなら、件名や宛先で判断してから送ってあげた方が安全かと思います。
(稲葉) 2023/06/14(水) 13:17:54

ファイル作成、添付も含めVBAで大量にメール作成し、
その中の1つだけ添付されたファイルに修正を加えなければならず、
通常、Outlookを手動でオフラインにしてから作業開始するのですが、
オフラインにし忘れるとファイルの修正がされないまま送信されてしまうので、
VBAで制御できればと思っているので、
常に下書きが無い状態で運用できるか検討してみます。
ありがとうございます!

(れいこ) 2023/06/14(水) 14:45:03


話が進んでいるようですが投稿しておきます。

横からですが、「下書きを一括送信する」というのはExcelではなくOutlookの世界の話ですから、【OutlookVBA】に関するドキュメントを読むなり、当該に対応したフォーラムで相談されるなりした方がよいのではないでしょうか?

また「2023/06/14(水) 12:49:34」のコードを拝見すると使ってない変数や、冗長と思える箇所が何か所かあります。【OutlookVBA】の観点から冗長な部分を取っ払うと↓のように整理できるように思います。

    Sub 下書きメール全部送信()
        Dim MyOBJ As Object

        For Each MyOBJ In Session.Accounts("メールアドレス").DeliveryStore.GetDefaultFolder(16).Items
            MyOBJ.Display
            'MyOBJ.Send '送る場合
        Next MyOBJ
    End Sub

そのうえで質問の【メール作成のVBAがありますが、即時送信されないよう】というのがよく理解できませんが、ExcelVBAでメールアイテムを作成するときに即時送信してほしくないという話ならば、既にアドバイスされているようにSendせず、Saveすれば、下書きフォルダに保存されるとおもいます。

いや、そうではなくて決まった時間になるまで保留したいのだという話ならば、やはり【OutlookVBA】の範疇になりますが↓が参考になると思います。
https://fastclassinfo.com/entry/vba_outlookmail_fixedtime/

いずれにせよ、ネットで拾ったものであろうが、イチから作ったものであろうが導入した時点でメンテナンス担当はご自身になるのですからどの命令が何をしているのかちゃんと理解された方がよいとおもいます。

(もこな2 ) 2023/06/14(水) 18:44:26


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.