Ниже приведен мой псевдокод для вашего требования. Вы понимаете, что я предлагаю? Можете ли вы предложить улучшения? Попробуйте преобразовать мой псевдокод в VBA и обновите ваш вопрос по мере продвижения. Я отвечу с комментариями на ваш код, если я думаю, что вы идете не так. Это может быть макрос Outlook или макрос Excel. Макрос Outlook будет легче написать. Но чтобы запустить его, вам придется открыть Outlook и запустить макрос. С помощью макроса Excel вы можете создать заданную рабочую книгу c с макросом автозапуска. Вы просто щелкнете книгу, чтобы запустить ее, и письма будут распространены. В последнем сообщении будет указано, сколько писем было распространено. Макрос Excel потребует большего понимания связывания различных продуктов Microsoft Office и некоторого понимания событий.
Dim FldrInbox as Folder
Dim FldrsTeam(1 To 4) as Folder
Dim InxEmail as Long
Dim InxTeam as Long
Set FldrInbox = Reference to Shared Inbox
Set FldrsTeam(1) = Reference To Alice’s folder
Set FldrsTeam(2) = Reference To Bernard’s folder
Set FldrsTeam(3) = Reference To Christine’s folder
Set FldrsTeam(4) = Reference To David’s folder
InxTeam = Random number between 1 and 4
For InxEmail = FldrInbox.Items.Count To 1 Step -1
FldrInbox.Items(InxEmail).Move FldrsTeam(InxTeam)
If InxTeam = 4 Then
InxTeam = 1
Else
InxTeam = InxTeam + 1
End If
Next
Редактировать 1
Приведенный ниже код демонстрирует второй метод поиска папок. Он создает файл на вашем рабочем столе, содержащий список с отступами для каждого магазина и папки, к которым у вас есть доступ. Примечание. Некоторые из этих папок являются «секретными» и не отображаются на панели папок, поскольку вы, как человек, ничего не можете сделать с этими папками. Однако вы можете написать макрос для доступа к этим папкам, если у вас есть sh.
У меня есть много модулей Outlook, которые я назвал по их содержанию. В общем, у меня есть один модуль для каждой задачи. У меня также есть несколько общих модулей. Этот код взят из моих «ModDemonstrations». Вы только начинаете, поэтому вам могут не понадобиться несколько модулей, но я пишу Outlook VBA в течение 15 лет и у меня много макросов, и их организация крайне необходима.
Для этой процедуры требуется ссылка на библиотеку сценариев Microsoft. Если вы не знаете, что это значит, я добавлю объяснение.
Запустите ListStoresAndAllFolders()
, и на вашем рабочем столе будет создан файл с именем «ListStoresAndAllFolders.txt». Вам не нужен этот код сегодня, но я верю, что вы найдете его полезным в будущем. Использует рекурсию. Посмотрите на рекурсию. Если вы не понимаете найденных объяснений, я постараюсь написать собственное объяснение.
Обратите внимание, что я пишу Dim FldrCrnt As Outlook.Folder
. Существует два типа папок: Outlook и Scripting. Scripting.Folder - это папка dis c. Если вы переходите к копированию информации из папок Outlook в папки c, вы должны внимательно указать, какой тип папки вы имеете в виду.
Sub ListStoresAndAllFolders()
' Displays the name of every accessible store
' Under each store, displays an indented list of all its folders
' Technique for locating desktop from answer by Kyle:
' http://stackoverflow.com/a/17551579/973283
' Needs reference to Microsoft Scripting Runtime if "TextStream"
' and "FileSystemObject" are to be recognised
Dim FileOut As TextStream
Dim FldrCrnt As Outlook.Folder
Dim Fso As FileSystemObject
Dim InxFldrChild As Long
Dim InxStoreCrnt As Long
Dim Path As String
Dim StoreCrnt As Outlook.Folder
Path = CreateObject("WScript.Shell").specialfolders("Desktop")
Set Fso = CreateObject("Scripting.FileSystemObject")
Set FileOut = Fso.CreateTextFile(Path & "\ListStoresAndAllFolders.txt", True)
With Application.Session
For InxStoreCrnt = 1 To .Folders.Count
Set StoreCrnt = .Folders(InxStoreCrnt)
With StoreCrnt
FileOut.WriteLine .Name
For InxFldrChild = .Folders.Count To 1 Step -1
Set FldrCrnt = .Folders(InxFldrChild)
Call ListAllFolders(FldrCrnt, 1, FileOut)
Next
End With
Next
End With
FileOut.Close
End Sub
Sub ListAllFolders(ByRef Fldr As Folder, ByVal Level As Long, ByRef FileOut As TextStream)
' This routine:
' 1. Output name of Fldr
' 2. Calls itself for each child of Fldr
' It is designed to be called by ListStoresAndAllFolders()
Dim InxFldrChild As Long
With Fldr
FileOut.WriteLine Space(Level * 2) & .Name
For InxFldrChild = .Folders.Count To 1 Step -1
Call ListAllFolders(.Folders(InxFldrChild), Level + 1, FileOut)
Next
End With
End Sub