2017-02-28 7 views
1

私はこのコードをWin10とOffice 2016を持つ他のPCに書いています。これはOutlookのルールで使用されています。 xmlファイルを電子メールからフォルダに保存し、それを他のフォルダのxlsxファイルに変更します。 Outlook 2016では、正常に動作します。私はそれを他のノートにコピーしました。Outlook 2016から2013へのVBAコードの更新

このノートブックはWin10とOffice 2013があり、このコードはOutlook 2013でエラーメッセージなしで実行されますが、xmlファイルは指定されたフォルダに保存されず、xlsxにも変換されませんでした。

このコードで何が間違っている可能性がありますか?ツール・参考文献に

Option Explicit 

Public Sub saveconvAttachtoDisk(itm As Outlook.MailItem) 

Dim objAtt As Outlook.Attachment 
Dim saveFolder As String 
Dim dateFormat As String 
Dim convFormat As String 
Dim objFSO As Object 
Dim objFolder As Object 
Dim objFile As Object 

saveFolder = "C:\Users\tulaj\Documents\xml\" 
convFolder = "C:\Users\tulaj\Documents\xls\" 
dateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd HH-mm-ss") 

For Each objAtt In itm.Attachments 

objAtt.SaveAsFile saveFolder & dateFormat & objAtt.FileName 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder(saveFolder) 
    If UCase(Right(objAtt.FileName, Len(XML))) = UCase(XML) Then 
     NewFileName = convFolder & dateFormat & objAtt.FileName & "_conv.xlsx" 

Set ConvertThis = Workbooks.Open(saveFolder & dateFormat & objAtt.FileName) 
     ConvertThis.SaveAs FileName:=NewFileName, FileFormat:= _ 
     xlOpenXMLWorkbook 
     ConvertThis.Close 
    End If 
Next 
Set objAtt = Nothing 
End Sub 

falowingsを選択されています

  • のVisual Basic用のaplications
  • のMicrosoft Outlook 15.0オブジェクトライブラリ
  • OLEオートメーション
  • のMicrosoft Office 15.0 Object Libraryの
  • Microsoft Excel 15.0オブジェクトライブラリ
  • Microsoftスクリプトの実行時
+1

を、それをテストして電子メールを選択し、次のコードを実行するにはどこに変数は 'XML'定義されている? (私はそれが**どこか**で定義されていなければならないと仮定します。あるいは、Office 2016で実行されませんでした) – YowE3K

+1

コードが開始されているかどうかチェックしましたか?最初の行にブレークポイントを置き、手動で呼び出します。おそらく、ハードコーディングされたパスの代わりに 'Environ(" USERPROFILE ")'を使うべきでしょう。 – PatricK

+0

@PatricK私はそれにブレークポイントを置くことはできません。どうしてか分かりません。 F8キーのステップバイステップ機能でさえ機能しません。 – vega69

答えて

1

これはあなたのために働く必要があります...

Option Explicit 
Public Sub saveconvAttachtoDisk(itm As Outlook.MailItem) 
    Dim objAtt As Outlook.Attachment 
    Dim SaveFolder As String 
    Dim convFolder As String 
    Dim DateFormat As String 
    Dim ConvFormat As String 
    Dim NewFileName As String 
    Dim ConvertThis As Object 
    Dim objFSO As Object 
    Dim objFolder As Object 
    Dim objFile As Object 

    SaveFolder = "C:\Temp\xml\" 
    convFolder = "C:\Temp\xls\" 
    DateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd HH-mm-ss ") 

    For Each objAtt In itm.Attachments 
     Debug.Print objAtt.FileName 
     objAtt.SaveAsFile SaveFolder & DateFormat & objAtt.FileName 

     Set objFSO = CreateObject("Scripting.FileSystemObject") 
     Set objFolder = objFSO.GetFolder(SaveFolder) 

     If UCase(Right$(objAtt.FileName, Len("XML"))) = UCase("XML") Then 
      NewFileName = convFolder & DateFormat & objAtt.FileName & "_conv.xlsx" 

      Set ConvertThis = Workbooks.Open(SaveFolder & DateFormat & objAtt.FileName) 
      ConvertThis.SaveAs FileName:=NewFileName, FileFormat:= _ 
      xlOpenXMLWorkbook 
      ConvertThis.Close 
     End If 
    Next 
    Set objAtt = Nothing 
End Sub 

Public Sub Test_Rule() 
    Dim Item As MailItem 

    Set Item = ActiveExplorer.Selection.Item(1) 
    saveconvAttachtoDisk Item 

    Set Item = Nothing 
End Sub 
+0

コードをコピーしても実行されますが、フォルダには何も保存されませんでした。 – vega69

+0

@ vega69 'C:\ Temp \ xml \'を更新しましたか?その私のために実行して大丈夫です... – 0m3r

+0

@ vega69あなたの古いコードと新しいコードを混ぜないように、どうやってテストしていますか? – 0m3r

関連する問題