エクセルのVBAで困っております。
使用環境はウィンドウズ10 pro 64ビット オフィス2019プロ+64ビットです。
エクセルからアウトルックを操作するVBAが二つあるのですが、一つはアウトルックの【日報受信】という名称のサブフォルダからメールをエクセルに取り込むVBA、もう一つは先のVBAで取り込んだ【日報受信】のサブフォルダの中のメールを違う名称の【取り出し済】のサブフォルダにメールをすべて移動させるVBAでサブフォルダからサブフォルダにメールをすべて移動させるVBAとなります。
両方とも標準モジュールに格納しております
別々にマクロからVBAを実行すると両方とも正常に動作するのですが、都合上連続でVBAを実行しなくてはならず
二つのVBAをcallで呼び出して実行したときにエラーとなります
二つのVBAをcallで実行するVBAは下記になります
Sub VBA連続実行()
Call 日報受信参照
Call アウトルックVBA
End Sub
こちらがそれぞれのマクロです
Option Explicit
Public Sub 日報受信参照()
' 定義
Dim objOL As Object
Dim sht As Worksheet
Dim rowCnt As Long
Dim objNAMESPC As Object
Dim itms1 As Variant '足した記述Option Explicit宣言に対応させるため
' 「Outlookから取得する」をobjOLと命名
Set objOL = CreateObject("Outlook.Application")
' 読み込むシート(シート名リスト)をshtと命名
Set sht = Worksheets("重複処理後") ' シート名
rowCnt = Cells(Rows.Count, "D").End(xlUp).row
' メールの場所をobjNAMESPCと命名
Set objNAMESPC = objOL.GetNamespace("MAPI")
' Outlookの指定フォルダのメールを最終行の1行下に取得・件数分繰り返す
For Each itms1 In objNAMESPC.Folders("Outlook データ ファイル").Folders("受信トレイ").Folders("日報受信").Items
sht.Cells(rowCnt + 1, 1).Value = itms1.SenderName ' A列・差出人 sht.Cells(rowCnt + 1, 2).Value = itms1.Subject ' B列・件名 sht.Cells(rowCnt + 1, 3).Value = itms1.ReceivedTime ' C列・受信日時 sht.Cells(rowCnt + 1, 4).Value = itms1.body ' D列・本文 rowCnt = Cells(Rows.Count, "D").End(xlUp).row Next
' セットしていた条件を解除
Set objOL = Nothing
Set sht = Nothing
Set objNAMESPC = Nothing
Range("A1").Select
End Sub
こちらがもう一つのVBAです。
Option Explicit
Public Sub アウトルックVBA()
RunOutlookMacro "Project1.ThisOutlookSession.日報から取り出しに移動" 'ThisOutlookSession
End Sub
Public Sub RunOutlookMacro(ByVal MacroName As String)
If CreateObject("WbemScripting.SWbemLocator").ConnectServer.ExecQuery _
("Select * From Win32_Process Where Name = 'OUTLOOK.EXE'").Count < 1 Then
Shell "OUTLOOK.EXE"
End If
With CreateObject("Outlook.Application")
With .ActiveExplorer.CommandBars("Standard").Controls.Add(Type:=1, Temporary:=True)
.OnAction = MacroName
.Execute
.Delete
End With
.Quit
End With
End Sub
それぞれでは正常に動くのですがCALLで連続で実行するとエラーとなってしまいます
実行時エラー91 オブジェクト変数またはwithブロック変数が設定されていませんとなります
デバックで黄色になる行は
二つ目のVBAのこの行となります。
With .ActiveExplorer.CommandBars("Standard").Controls.Add(Type:=1, Temporary:=True)
色々と自分なりに宣言の書き換えなど試してみたのですがどうにもエラーが解決できません。
無知を承知で質問しております。どうか解決方法が分かる方にご教授いただければ嬉しく思います
よろしくお願いします
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/12 00:05
2021/02/12 09:23
2021/02/14 12:08
2021/02/14 12:16
2021/02/14 13:01