
OutlookでVBAを実行したあと、Excelを開こうとすると「他で開いています」となり、毎回タスクマネージャーからバックグラウンドプロセスExcelをとじる作業が必要になっています。
下のコードを修正して対処できるでしょうか。
ご教授お願い致します。
Sub 添付ファイルを保存かつ添付ファイルリストをExcelへ出力()
Dim objInbox As Object
Dim objFolder As Object
Dim strPath As String
Dim i As Long
'Excel用定義
Dim myExcel As Excel.Application
Dim objBook As Excel.Workbook
Dim objSheet As Excel.worksheet
Dim n As Long
'Excelオブジェクト生成、ブックの追加
Set myExcel = CreateObject("Excel.Application")
Set objBook = myExcel.Workbooks.Add()
Set objSheet = objBook.sheets(1)
'項目目を追加
objSheet.Cells(1, 1) = "ID"
objSheet.Cells(1, 2) = "件名"
objSheet.Cells(1, 3) = "送信者"
objSheet.Cells(1, 4) = "受信日時"
objSheet.Cells(1, 5) = "添付ファイル"
objSheet.Cells(1, 6) = "添付ファイルのパス"
'添付ファイルリストを書き込む行の位置
n = 2
Set objInbox = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
'添付ファイルがあるメールのフォルダを指定します。2階層以上ある場合は「.Folders.Item(<フォルダ名>)」を追加してください。
Set objFolder = objInbox.Folders.Item("請求書")
'添付ファイルの保存先をパスで指定します。
strPath = "C:\Users\keiri\Desktop\outlook_seikyuusyo\"
For Each objitem In objFolder.Items
For i = 1 To objitem.Attachments.Count
'添付ファイルに拡張子がある場合のみ処理します。
If InStr(objitem.Attachments.Item(i), ".") <> 0 Then
objitem.Attachments.Item(i).SaveAsFile strPath & objitem.Attachments.Item(i)
'Excelへ添付ファイル情報を追加
objSheet.Cells(n, 1) = n - 1
objSheet.Cells(n, 2) = objitem.ConversationTopic '件名
objSheet.Cells(n, 3) = objitem.SenderName '送信者
objSheet.Cells(n, 4) = objitem.ReceivedTime '受信日時
objSheet.Cells(n, 5) = objitem.Attachments.Item(i) '添付ファイル
objSheet.Cells(n, 6) = strPath & objitem.Attachments.Item(i) '添付ファイルのパス"
n = n + 1
End If
Next i
Next objitem
'添付ファイル保存場所へExcelを保存 ※ファイル名は適当な名前に変えてください。
objBook.SaveAs strPath & "添付ファイルリスト.xlsx"
Set objitem = Nothing
Set objInbox = Nothing
Set objFolder = Nothing
Set objSheet = Nothing
End Sub
No.3ベストアンサー
- 回答日時:
元ネタはこちらですね。
https://extan.jp/?p=912
上記サイトでは ブックを閉じていますが
それを削除した、ということは、
ブックを開きっぱなしにして内容を見たい、ということかと思います。
ブックが見えないから新たに開こうとしてエラーになっているということでしょうか。
ブックが表示されれば良いということなら
Set myExcel = CreateObject("Excel.Application")
の次に
MyExcel.Visible = True
を追加してください。
ありがとうございます。
ご指摘があり、もう一度見てみたところ、削除してしまってました。。。
私のミスでございます。
申し訳ございませんでした。
ご教授いただきましてありがとうございました。
No.2
- 回答日時:
こんにちは
バックグラウンドで処理しているのでわかり難いですが、例えば
myExcel.Visible = Tlue
を入れて実行すると、状況がよくわかるようになると思います。
結果から(多分)理解はなさっているようですが、ご提示のコードだと
・ブックは開いたまま(Saveはされている)
・エクセルのインスタンスも作成されたまま
の状態になっているはずです。
これらの両方を処理するために。
1)ブックを閉じる
objBook.Close SaveChanges:=False
2)エクセルを終了する
myExcel.Quit
3)変数等をクリアする
Set myExcel = Nothing
などの処理が必要になります。
ご提示のコードでは3)のクリアだけはされていますが、この意味は「変数を開放する」だけですので、インスタンスが無くなるわけではありません。(変数が再定義されているので、参照できなくなってしまいますが…)
ですので、先にインスタンスを終了してから、変数をクリアするという順序になります。
これで、VBAの処理が全て終わるのであれば、変数のクリアは必ずしも必須ではありません。
(処理終了時に、変数はクリアされるので。しかし、オブジェクトの実態はクリアされませんので、1)、2)は必須ということになります。)
丁寧にご説明いただきましてありがとうございました。
とてもわかりやすく、勉強になりました。ありがとうございます。
閉じる、終了する!の処理が抜けていました。
ありがとうございました。
No.1
- 回答日時:
.SaveAs でBookが閉じるのか忘れましたが、閉じられていないようなら閉じるコードが必要なのかも。
あと
'Excel用定義
Dim myExcel As Excel.Application
Dim objBook As Excel.Workbook
Dim objSheet As Excel.worksheet
で定義された変数の解放を上記の後ろに追加(Set objitem = Nothing の前に)が必要なのかもです。
検証できず憶測ではありますが、VBなどでは解放は重要な部分として解説もあったりはします。
ありがとうございます。
はい!その通りでございます。
閉じるこードが抜けておりました。。。
ありがとうございます、無事思ったことができました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 3個のfileのセルデータを1個のfileのセルに貼り付けるVBAコードですが。 1 2023/02/20 09:21
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
このQ&Aを見た人はこんなQ&Aも見ています
-
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
Excelのプロセスが消えません
Excel(エクセル)
-
-
4
ExcelVBAにてアプリをタスクマネージャーから強制終了させたいのですが
Visual Basic(VBA)
-
5
Access からオブジェクトとして開いたExcelのプロセスが終了しない
その他(データベース)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
8
【Excel VBA】 WorksheetやRangeオブジェクトとして宣言した変数の開放は必要でしょうか?
その他(Microsoft Office)
-
9
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
10
VBAでOutlookを終了させたい ExcelVBAで既に起動されているOutlookを終了させる
Visual Basic(VBA)
-
11
Excel VBA でExcelを終了したいのですが・・
Excel(エクセル)
-
12
エクセルで別ブックをバックグラウンドでオープンする方法
Excel(エクセル)
-
13
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
14
アクセスのレポート起動時のウィンドウの大きさ
Access(アクセス)
-
15
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
16
Excelマクロをバックグラウンドで動かす方法
Excel(エクセル)
-
17
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
18
別インスタンスのエクセルを制御したい
Excel(エクセル)
-
19
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
指定時間にプリントアウトする方法
-
ExcelのVBAで、選択したファイ...
-
Timer_Tickについて
-
VBA フォルダ内の全てブックの...
-
VBAの3次方程式にたいする質問
-
EXCEL VBAで思ったよ...
-
マクロの解読に困っています
-
ストアドプロシージャの処理終...
-
VBAでBook読み込み時の非表示方...
-
AVIFileInitに関して
-
ERRORHandlerへの処理の移行
-
UWSCのTHREADについて
-
vb2010 Sleepを使うと調子が悪...
-
処理水問題についてスライドを...
-
RaiseEventのメリット
-
access2010 マクロで...
-
Timerイベントについて
-
ドリブン??
-
Javaについての質問なんですが…
-
強制終了するマクロプログラム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
private subモジュールを他のモ...
-
マクロで、次のコードへ行く前...
-
シグナル 6(SIGABRT)とは?
-
特定の名前のオートシェイプの...
-
IF文に時間(何時から何時ま...
-
どう増強すべきか
-
特定のファイルを他のプロセス...
-
Word VBA。各マクロの間に待ち...
-
どうやってもFor文を抜けてしま...
-
Excel VBA セルの名前があるか...
-
ExcelのVBAで、選択したファイ...
-
【C#】Page_Loadさせない方法に...
-
StatusStripの表示が更新されな...
-
途中で処理を中断させたい (ア...
-
エクセル VBAで複数セル選択時...
-
Functionで戻り値を複数返す方法
-
VBAでBook読み込み時の非表示方...
-
VBA 複数の行を高速で削除する...
おすすめ情報