2017-02-28 7 views
1

Ich schrieb diesen Code auf einem anderen PC, der Win10 und Office 2016 hatte. Es wird in einer Outlook-Regel verwendet. Es speichert die xml Dateien von der E-Mail in einen Ordner und ändert es in xlsx Datei in einem anderen Ordner. In Outlook 2016 läuft es einwandfrei. Ich habe es auf ein anderes Notebook kopiert.VBA-Code-Update von Outlook 2016 bis 2013

Dieses Notebook verfügt über Win10 und Office 2013 und dieser Code wird in Outlook 2013 ohne Fehlermeldung ausgeführt, aber die xml Dateien wurden weder im angegebenen Ordner gespeichert noch in xlsx konvertiert.

Was könnte in diesem Code falsch sein?

  • Visual Basic für Aplications
  • Microsoft Outlook 15.0 Object Library
  • OLE Automation
  • Microsoft Office 15.0 Object Library
  • :

    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 
    

    In Tools Referenzen sind die falowings ausgewählt Microsoft Excel 15.0 Objektbibliothek

  • Microsoft Scripting Runtime
+1

Wo ist die Variable 'XML' definiert? (Ich nehme an, es muss irgendwo ** definiert werden ** oder es wäre nicht in Office 2016 gelaufen.) – YowE3K

+1

Haben Sie überprüft, ob der Code überhaupt gestartet wurde? Setzen Sie einen Haltepunkt in die erste Zeile und rufen Sie ihn manuell auf. Vielleicht sollten Sie 'Environ (" USERPROFILE ")' anstelle des fest codierten Pfades verwenden. – PatricK

+0

@ PatricK Ich kann keinen Unterbrechungspunkt darin setzen. Ich weiß nicht warum. Selbst die F8-Tasten-Schritt-für-Schritt-Funktion funktioniert nicht. – vega69

Antwort

1

Dies sollte für Sie arbeiten ...

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 

es zu testen, wählen Sie die E-Mail und den folgenden Code

Public Sub Test_Rule() 
    Dim Item As MailItem 

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

    Set Item = Nothing 
End Sub 
+0

Ich habe Ihren Code kopiert und er läuft, aber nichts wurde in den Ordnern gespeichert. – vega69

+0

@ vega69 hast du 'C: \ Temp \ xml \' aktualisiert? es läuft in Ordnung für mich ... – 0m3r

+0

@ vega69 stellen Sie sicher, dass Sie nicht Ihren alten Code mit neuem Code mischen, übrigens wie testen Sie? – 0m3r

Verwandte Themen