2016-08-11 2 views
2

У меня есть этот код, который, если тип файла в каталоге заблокирован в Outlook, он не будет включен в приложение.Проверьте массив, если он содержит заблокированный тип файла в Outlook

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 

Это уже работает, но моя проблема в том случае, если пользователь добавляет другой тип файла и пустая ячейка между непустой ячейкой, он не будет заполнен.

У меня есть этот код, который добавляет каталоги в столбце O и заполняет его.

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 

Есть ли другой способ сначала проверить, если содержимое в массиве является одним из блокированного типа файла в перспективе?

Можете ли вы дать мне советы о том, что делать, если я проверил пустую ячейку с O20-29 и вставим каталог в первую пустую ячейку или проверили массив? Кстати, это blocked file types in Outlook. Спасибо!

ответ

0

Блокированные типов можно найти здесь: https://support.office.com/en-us/article/Blocked-attachments-in-Outlook-3811cddc-17c3-4279-a30c-060ba0207372

Если бы я это сделать, я бы, вероятно, хранить это в отдельном листе, где я хранить статические данные для проверки. Например, вы можете прочитать эти типы в словаре и использовать метод dictionary.exists для проверки того, является ли какое-либо из вложений, которое вы перебираете, является одним из заблокированных типов.

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

лично я не предпочитаю использовать MsgBox в каждом цикле, так как она нарушает код. Возможно, вы захотите сохранить сообщения об ошибках в отдельном массиве и использовать соединение для вывода всех сообщений об ошибках сразу до конца.

+0

В какой части сценария вы имеете в виду? MsgBox не имеет значения для меня, но спасибо. Не могли бы вы дать мне несколько голов по моей основной проблеме? Благодаря! – ramj

3

Это, как я хотел бы сделать это

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 
Смежные вопросы