Я быстро взглянул на ваш код и заметил ошибку, поэтому сообщил об этом в комментарии. Затем я заметил еще одну ошибку и еще одну, о которой я сообщил в комментарии. Только после публикации комментария я задумался о том, какой смысл будет иметь мой комментарий для автора этого кода. Этот ответ является увеличенной версией комментария. Это должно помочь вам улучшить ваш код, но слишком много не хватает, чтобы дать полный ответ.
В Set wdApp = GetObject(, "Excel.Application")
, wdApp
- это имя, данное приложению Word. Я предполагаю, что вы нашли какой-то код, который использовал Word, чтобы что-то сделать, и адаптировали его. Set wdDoc = wdApp.Documents.Open(strFilename)
недопустимо для приложения Excel. Я предлагаю использовать имя xlApp
. Книга откроется, и код поиска необходимо будет переписать для Excel.
Вы не включили код для FolderExists
и CreateFolders
, но я был бы удивлен, если бы они не использовали FileSystemObject
. И FileSystemObject
, и Outlook
имеют тип данных Folder
. Если весь этот код находится в Outlook, Folder
интерпретируется как Outlook.Folder
, а FolderExists
и CreateFolders
могут не работать. При необходимости вам необходимо заменить тип данных Folder
в этих подпрограммах на Scripting.Folder
.
Set olItems = Session.GetDefaultFolder(olFolderInbox).Items
не работает в моей системе. Я домашний пользователь с двумя адресами электронной почты, каждый из которых имеет собственный магазин и папку «Входящие». Входящие по умолчанию не используются. Если вы являетесь корпоративным пользователем с одним адресом электронной почты, то вашим почтовым ящиком по умолчанию, скорее всего, будет именно тот, который вам нужен.
Вы пишете: «Если эта« строка »существует, я хочу, чтобы письма перемещались в другую папку». Я истолковал это как означающее, что вы хотите переместить Outlook MailItem
в другую папку Outlook. Вот почему я критиковал вас за использование Name
, который переименовывает файл диска или перемещает его в другую папку диска с, возможно, новым именем. Интересно, вы хотели переместить сохраненное вложение?
Для этого ответа нужен параграф, объясняющий, как переместить MailItem
или переместить сохраненное вложение в зависимости от того, что вам нужно. Пожалуйста, добавьте комментарий к этому ответу, объясняя, что вы хотите.
В Const strPath As String = " my_root "
я ценю, что «my_root» - это просто заполнитель, поэтому вам не нужно раскрывать что-то, что может быть конфиденциальным. Предположим, что истинное значение - «C: \ Users \ Georg \ Documents». Если это так, вы создаете путь «C: \ Users \ Georg \ Documentsmy_string». Если истинное значение - «C: \ Users \ Georg \ Documents \», вы создаете путь «C: \ Users \ Georg \ Documents \ my_string». В любом случае вы предполагаете, что истинное значение «my_string» не содержит символов, которые недопустимы в имени папки. Я не понимаю, почему вам нужно имя папки, чтобы включить строку поиска. Это просто временная папка для использования при тестировании вложений. Почему бы не назвать его «C: \ Users \ Georg \ Documents \ SavedAttachments» или другой временной папкой?
Пожалуйста, будьте осторожны, разделяя имена папок и файлов. Вы используете Chr(32)
и Chr(92)
. Я полагаю, Chr(32)
является ошибкой. Почему бы не написать «\» вместо Chr(92)
, что намного понятнее? Я использую Chr()
когда это необходимо, но обычно написание символа более четкое. Любой, кто использовал File Explorer, знает о «\», но сколько знает, что означает Chr(92)
, не просматривая его.
Я не понимаю сложного имени файла, которое вы даете сохраненным вложениям. Если вложение необходимо переместить в другую папку с другим именем. Если вложение не требуется, вы должны удалить его, используя Kill
. В любом случае некоторые простые. Все, что вам нужно - это фиксированное имя файла.
Знаете ли вы, как найти в рабочей книге определенную строку? Весь ваш существующий код предназначен для открытия и поиска документов Word.
Я пронумеровал свои абзацы, чтобы вы могли легко ссылаться на них, если вам нужно задать вопрос.