処理時間を短縮させることはできないでしょうか。
VBS
1'************************************************************* 2' ドラッグ&ドロップしたmsgファイルから添付ファイルを抽出し、 3' 指定したフォルダに保存するスクリプト 4' 5' 2015/12/16 @kinuasa 6' 2021/07/22 @Nonomura 保存フォルダをVBSのあるフォルダに変更 https://qiita.com/asterisk9101/items/54cdcedb9ef60ea0bb21 @asterisk9101が2015年06月09日に更新 7'************************************************************* 8 9Option Explicit 10 11Dim fso '2021/07/22 @Nonomura 12set fso = createObject("Scripting.FileSystemObject") '2021/07/22 @Nonomura 13 14Dim strFolderPath '2021/07/22 @Nonomura 15strFolderPath = fso.getParentFolderName(WScript.ScriptFullName) '2021/07/22 @Nonomura 16 17Dim Dup '2021/07/22 @Nonomura 重複ファイル名蓄積 18Dim MyFlag '2021/07/22 @Nonomura 重複フラグ 19Dim Mydic 20Set Mydic = CreateObject("Scripting.Dictionary") 21 22Dup = "削除された添付ファイル,MSGファイル" & vbCrLf '2021/07/22 @Nonomura 重複メッセージ 23MyFlag = 0 '2021/07/22 @Nonomura 重複フラグ 24 25 26Dim args 27Dim olApp 28Dim i 29'Const SaveFolderPath = "C:\Users\user\Desktop\添付ファイル抽出" '添付ファイルの保存先フォルダ(※要変更) 2021/07/22 @Nonomura ↓に変更 30dim SaveFolderPath '2021/07/22 @Nonomura 31SaveFolderPath = strFolderPath '2021/07/22 @Nonomura 32 33Set args = WScript.Arguments 34If args.Count < 1 Then 35 MsgBox "msgファイルを当スクリプトファイルにドラッグ&ドロップしてください。", vbExclamation + vbSystemModal 36 WScript.Quit 37End If 38 39With CreateObject("Scripting.FileSystemObject") 40 If .FolderExists(SaveFolderPath) = False Then 41 MsgBox "添付ファイルの保存先フォルダが見つかりませんでした。" & vbCrLf & _ 42 "処理を中止します。", vbCritical + vbSystemModal 43 WScript.Quit 44 End If 45 Set olApp = CreateObject("Outlook.Application") 46 For i = 0 To args.Count - 1 47 If .FileExists(args(i)) = True Then 48 Select Case LCase(.GetExtensionName(args(i))) 49 Case "msg" 'msgファイルのみ処理 50 SaveMsgAttachments olApp, args(i), AddPathSeparator(SaveFolderPath), Mydic, Dup, MyFlag '2021/07/22 @Nonomura 引数追加 51 End Select 52 End If 53 Next 54 olApp.Quit 55End With 56 57 if MyFlag = 1 then 58 msgbox "添付ファイルの一部は、ファイル名が同一であったため、上書きされました。" & vbCrLf & _ 59 "重複データ.csvを確認してください。" '2021/07/22 @Nonomura 重複メッセージ 60 61 Dim ts 62 Set ts = fso.CreateTextFile(SaveFolderPath & "\重複データ.csv", True, True) 63 64 ts.Write (Dup) ' 書き込み 65 ts.Close ' ファイルを閉じる 66 End if 67 68 69 70MsgBox "処理が終了しました。", vbInformation + vbSystemModal 71 72Private Sub SaveMsgAttachments(ByVal OutlookApp, ByVal MsgFilePath, ByVal SaveFolderPath, ByRef Mydic, ByRef Dup, ByRef MyFlag) '2021/07/22 @Nonomura 引数追加 73 Dim itm 'Outlook.MailItem 74 Dim atc 'Outlook.Attachment 75 Dim fn 76 77 With OutlookApp.GetNamespace("MAPI") 78 Set itm = .OpenSharedItem(MsgFilePath) 79 Select Case LCase(TypeName(itm)) 80 Case "mailitem" 81 If itm.Attachments.Count < 1 Then 82 MsgBox "添付ファイルがありません。" & vbCrLf & _ 83 "(ファイル名:" & MsgFilePath & ")", vbExclamation + vbSystemModal 84 Exit Sub 85 Else 86 With CreateObject("Scripting.FileSystemObject") 87 For Each atc In itm.Attachments 88 fn = SaveFolderPath & atc.FileName 89 If .FileExists(fn) = True Then 90 Dup = Dup & atc.FileName & "," & Mydic(atc.FileName) & vbCrLf '2021/07/22 @Nonomura 91 If Mydic.Exists(atc.FileName) = True Then '2021/07/22 @Nonomura 92 Mydic.Remove atc.FileName '2021/07/22 @Nonomura 93 Mydic.Add atc.FileName, .getFileName(MsgFilePath) '2021/07/22 @Nonomura 94 End If 95 .DeleteFile fn, True '同名のファイルがあったら事前に削除 96 End If 97 If Mydic.Exists(atc.FileName) = False Then '2021/07/22 @Nonomura 98 Mydic.Add atc.FileName, .getFileName(MsgFilePath) '2021/07/22 @Nonomura 99 Else '2021/07/22 @Nonomura 100 MyFlag = 1 '2021/07/22 @Nonomura 重複フラグ 101 End If '2021/07/22 @Nonomura 102 atc.SaveAsFile fn 103 Next 104 End With 105 End If 106 End Select 107 End With 108 109End Sub 110 111Private Function AddPathSeparator(ByVal s) 112 If Right(s, 1) <> ChrW(92) Then s = s & ChrW(92) 113 AddPathSeparator = s 114End Function
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。