Код VBA для случайного разделения всех непрочитанных писем в основном почтовом ящике Outlook на подпапки - PullRequest
0 голосов
/ 01 апреля 2020

На работе мы получаем число X электронных писем в день, которые должны обрабатываться 4 человека. Я пытаюсь придумать макрос, который при запуске берет X и разбивает его случайным образом и поровну на 4 подпапки, чтобы каждый человек знал, что он должен делать. У меня нет никакого опыта программирования, и мои знания Excel в лучшем случае основаны на c. Как бы я начал, и это даже выполнимо?

Спасибо!

1 Ответ

0 голосов
/ 01 апреля 2020

Ниже приведен мой псевдокод для вашего требования. Вы понимаете, что я предлагаю? Можете ли вы предложить улучшения? Попробуйте преобразовать мой псевдокод в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...