Сохранение вложений по типу файла + отображение случайного сообщения

У меня есть код VBA mAttachmentSaver, который сохраняет вложения из выбранных писем.

Я хотел бы сохранить только файлы .pdf, .doc и Excel. Это делается для того, чтобы исключить различные вложения электронной почты, такие как изображения, в самой почте.

Я думал что-то вроде этого кода, который нашел в Интернете FileFilter: = "Excel,.xls;.pdf,". Хотя не знаю, куда его вставить.

Кроме того, я хотел бы, чтобы эта строка отображала случайное предложение:

If lNum > 0 Then
    MsgBox CStr(lNum) & " attachment(s) was(were) saved successfully.", vbInformation, "Message from Attachment Saver"
Else

Например:

If lNum > 0 Then
    MsgBox CStr(lNum) & " attachment(s) was(were) saved successfully. Good job! :)", vbInformation, "Message from Attachment Saver"
    MsgBox CStr(lNum) & " attachment(s) was(were) saved successfully. Nice work!", vbInformation, "Message from Attachment Saver"
    MsgBox CStr(lNum) & " attachment(s) was(were) saved successfully. You got it!", vbInformation, "Message from Attachment Saver"
    MsgBox CStr(lNum) & " attachment(s) was(were) saved successfully. Job done! Time for weekend!", vbInformation, "Message from Attachment Saver"
Else

Для случайного заглянуть в rnd

erazorv4 21.05.2019 12:06

Я забыл упомянуть, что я полный нуб в таких вещах. Тем не менее, было бы здорово решить это самостоятельно с помощью других. Я нашел это, будет ли это полезно?

LAWYLAWY 21.05.2019 12:24

Dim strQuotes(10) As String Dim lngIndex As Long strQuotes(0) = "A" strQuotes(1) = "b" strQuotes(2) = "c" strQuotes(3) = "d" strQuotes(4) = "e " strQuotes(5) = "f" strQuotes(6) = "g" strQuotes(7) = "h" strQuotes(8) = "i" strQuotes(9) = "j" strQuotes(10) = "k" lngIndex = Int((10 - 0 + 1) * Rnd + 0) MsgBox strQuotes(lngIndex) End Sub

LAWYLAWY 21.05.2019 12:25

Я думаю, что это сработает, но это трудно читать в комментариях. Попробуйте и посмотрите, работает ли это. Также взгляните на ответ Мохита Бансала.

erazorv4 21.05.2019 12:38

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

LAWYLAWY 21.05.2019 13:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
140
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я просмотрел код, и вы можете добавить условие If, чтобы отфильтровать нужные форматы среди доступных вложений для сохранения.

If strAtmtName(1) = "xlsx" Or strAtmtName(1) = "pdf" Or strAtmtName(1) = "doc" Then

Else: GoTo G:

End If

Теперь вам нужно будет определить тег Goto G также перед следующим текущим циклом for, как на изображении.

Итак, что мы делаем, так это пропускаем цикл, если расширение файла не то, что нам нужно перед сохранением вложения.

Надеюсь, поможет!

Редактировать:

Измените условие Else, чтобы уменьшить количество на 1, как показано на рисунке.

Думаю, я понимаю, что вы здесь сделали. Вы прервали «сканирование», чтобы убедиться, что это правильные файлы. Если это «истина», то мы продолжаем «g:». Я включил его в код и протестировал: он действительно пропускает тестовый файл .png и помещает только 2 файла в папку назначения. Однако теперь в отображаемом сообщении говорится, что 3 вложения были успешно сохранены, включая файлы .png.

LAWYLAWY 21.05.2019 12:38

Да Вы также должны изменить печать сообщений. Просмотрите код и попробуйте изменить место, где печатается сообщение. "lCountEachItem = lCountEachItem - 1"

Mikku 21.05.2019 12:52

Я отредактировал ответ, чтобы показать, куда добавить эту строку.

Mikku 21.05.2019 12:54

Хм, я понимаю, что вы сделали, но я думаю, что -1 будет правильным только в этом конкретном тестовом примере. Если бы я попытался сохранить вложения, например, из 120 электронных писем, 5 из которых содержат файлы .png, он напечатал бы «119 успешно сохраненных», хотя это было бы неправильно.

LAWYLAWY 21.05.2019 12:59

Нет, это было бы не так. Если вы внимательно посмотрите на код, вы обнаружите, что есть два счетчика..... один подсчитывает файлы в текущей почте, а другой подсчитывает общее количество файлов. В этом случае вы уменьшаете 1 из общего количества файлов в этом конкретном электронном письме, а не в выбранной вами группе. ---------- Итак, если вы выбрали одно электронное письмо с 5 вложениями, и одно из них в формате .pdf, вы получите сообщение о сохранении 4 файлов.

Mikku 21.05.2019 13:08

Хм, он становится красным, и я получаю сообщение об ошибке. Я думаю, что я слишком нуб, чтобы понять, что я делаю, ха-ха imgur.com/a/rC9OFgw

LAWYLAWY 21.05.2019 13:15

lCountEachItem пишется через 1 или через L? @ЗАКОН . Также в чем ошибка?

erazorv4 21.05.2019 13:21

1 (один) ---------- хахаха понял!! Спасибо :D Работает как шарм =D Не могли бы вы также подтолкнуть меня в правильном направлении с другим вопросом о рандомизированных сообщениях? Это скорее уловка, но я хотел бы узнать больше об этом софте

LAWYLAWY 21.05.2019 13:22

Сделайте это L (строчная L)

erazorv4 21.05.2019 13:23

Большое спасибо, Мохит и Эразорв :) Есть ли способ дать какой-нибудь +1?

LAWYLAWY 21.05.2019 13:29

Ответ Мохита охватывал фильтрующую часть. Вот часть случайного сообщения.

Сейчас он с 4 сообщениями, как в примере, но если вы хотите расширить его, вам нужно изменить Int((4 * Rnd) + 1). Измените 4 на что-то большее, например 5, и тогда вы сможете получить 5 случайных сообщений. Также добавьте заявление Case с новым сообщением.

If lNum > 0 Then
    Dim Message As String
    Message = CStr(lNum) & " attachment(s) was(were) saved successfully."


    Select Case Int((4 * Rnd) + 1)
        Case 1
            Message = Message & " Good job! :)"
        Case 2
            Message = Message & " Nice work!"
        Case 3
            Message = Message & " You got it!"
        Case 4
            Message = Message & " Job done! Time for weekend!"
    End Select
    MsgBox Message, vbInformation, "Message from Attachment Saver"

Потрясающий! Большое спасибо! Я никогда не нуждался в VBA, но он выглядит довольно забавным языком для изучения, возможности кажутся безграничными. Особенно с Экселем. Спасибо еще раз!

LAWYLAWY 21.05.2019 13:52

Не за что :) Поскольку вы спрашивали, как дать своего рода +1 (в другом комментарии), вот связь, который может помочь.

erazorv4 21.05.2019 14:05

Я не могу проголосовать, у меня пока нет репутации :O

LAWYLAWY 21.05.2019 14:25

Все в порядке. Просто продолжайте принимать этот ответ. :)

erazorv4 21.05.2019 14:29

Другие вопросы по теме