2016-08-11 2 views
2

Ich habe diesen Code, wenn der Dateityp in dem Verzeichnis in Outlook blockiert ist, wird es nicht im Anhang enthalten sein. DieseÜberprüfen Array, wenn es einen blockierten Dateityp in Outlook enthält

Dim objMail as object 
dim i,count as integer 
With objMail 
     .Subject = "sample" 
     For i = 20 To lRow ' directories starts in row 20 in column O 
      On Error GoTo pst 
      attach.add main.Range("O" & i).Value 
pst: 
     If count = 0 Then 
      MsgBox "Some files is not allowed." 
      count = 1 'count 1 so that this error will not be displayed again and again 
     End If 
     Next i 
end with 

bereits funktioniert, aber mein Problem ist, wenn der Benutzer einen anderen Typ-Datei hinzufügt und die leere Zelle ist zwischen der nicht-leere Zelle, wird es nicht aufgefüllt werden.

Ich habe diesen Code, der die Verzeichnisse in Spalte O hinzufügt und auffüllt.

dim file as variant 
file = Application.GetOpenFilename("All Files, *.*", , "Select File", , True) 
For i = 1 To UBound(file) 

    lRow = Cells(Rows.count, 15).End(xlUp).Row 
    lRow = lRow + 1 
    ThisWorkbook.Sheets("Main").Range("O" & lRow).Value = CStr(file(i)) 
Next i 

Gibt es eine andere Art und Weise zuerst, wenn der Inhalt in der Anordnung zu überprüfen, einer des Dateitypen in Outlook blockiert ist?

Können Sie mir einen Hinweis geben, was zu tun ist, wenn ich die leere Zelle von O20-29 überprüfe und das Verzeichnis in die erste leere Zelle einfüge oder das Array überprüfe? Übrigens sind das die blocked file types in Outlook. Danke!

Antwort

0

Die blockierten Typen finden Sie hier: https://support.office.com/en-us/article/Blocked-attachments-in-Outlook-3811cddc-17c3-4279-a30c-060ba0207372

Wenn ich es täte, würde ich wahrscheinlich dieses Geschäft in einem separaten Arbeitsblatt, wo ich für die Validierung von statischen Daten speichern. Sie können diese Typen dann beispielsweise in ein Wörterbuch einlesen und die Methode dictionary.exists verwenden, um zu testen, ob einer der Anhänge, die Sie durchlaufen, einer der blockierten Typen ist.

' to create a dictonary 
dim objDic as object: set objDic = createobject("scripting.dictionary") 

ich persönlich nicht lieber MsgBox in jeder Schleife verwenden, da sie den Code brechen. Möglicherweise möchten Sie die Fehlermeldungen in einem separaten Array speichern und mithilfe von Join alle Fehlermeldungen auf einmal ausgeben, kurz bevor das Sub-Ende beendet wird.

+0

In welchem ​​Teil des Skripts werden Sie beziehen? MsgBox ist mir egal, aber danke. Kannst du mir bitte etwas über mein Hauptproblem erzählen? Vielen Dank! – ramj

3

Dies ist, wie ich es tun würde,

Sub Sample() 
    Dim sFileType As String, Extn As String 
    Dim MyAr As Variant, file As Variant 

    '~~> List of blocked types 
    sFileType = "ade|adp|app|asp|bas|bat|cer|chm|cmd|com|cpl|crt|csh|der|" 
    sFileType = sFileType & "exe|fxp|gadget|hlp|hta|inf|ins|isp|its|js|jse|" 
    sFileType = sFileType & "ksh|lnk|mad|maf|mag|mam|maq|mar|mas|mat|mau|mav|" 
    sFileType = sFileType & "maw|mda|mdb|mde|mdt|mdw|mdz|msc|msh|msh1|msh2|" 
    sFileType = sFileType & "mshxml|msh1xml|msh2xml|ade|adp|app|asp|bas|bat|cer|" 
    sFileType = sFileType & "chm|cmd|com|cpl|crt|csh|der|exe|fxp|gadget|hlp|" 
    sFileType = sFileType & "hta|msi|msp|mst|ops|pcd|pif|plg|prf|prg|pst|reg|" 
    sFileType = sFileType & "scf|scr|sct|shb|shs|ps1|ps1xml|ps2|ps2xml|psc1|" 
    sFileType = sFileType & "psc2|tmp|url|vb|vbe|vbs|vsmacros|vsw|ws|wsc|wsf|wsh|xnk" 

    '~~> Create an array of blocked types 
    MyAr = Split(sFileType, "|") 

    file = Application.GetOpenFilename("All Files, *.*", , "Select File", , True) 

    If file = False Then Exit Sub 

    For i = 1 To UBound(file) 
     '~~> Get file extension 
     Extn = Right$(file(i), Len(file(i)) - InStrRev(file(i), ".")) 

     '~~> Check if Extn is a blocked type 
     If IsInArray(Extn, MyAr) Then 
      Debug.Print file(i) & " is of blocked type" 
      '~~> Do what you want 
     Else 
      '~~> Do what you want 
     End If 
    Next i 
End Sub 

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean 
    On Error Resume Next 
    IsInArray = Application.Match(stringToBeFound, arr, 0) 
    On Error GoTo 0 
End Function 
Verwandte Themen