【问题标题】:Scripting Macro for Outlook to Find a Folder用于 Outlook 查找文件夹的脚本宏
【发布时间】:2013-06-26 17:47:04
【问题描述】:

自动化此功能的最佳方法是什么?

我希望能够在 Outlook 2010 中执行此操作,

(1)选择一个特定的邮件帐户 (2)键入我要查找的文件夹 (3)然后让宏/程序触发“*”星号 (4)然后插入我在第一步中键入的文本。

我正在尝试自动搜索已存在的文件夹热键。

我的问题是我无法足够快地键入我正在寻找的文件夹,而且我使用的所有搜索程序都太慢了。热键搜索很棒而且超级快,我只是无法足够快地输入我正在寻找的文件夹。这个过程可以自动化吗?

【问题讨论】:

  • 请显示您想要加速的实际代码。所有这些文件夹都在同一级别吗?还是它们是嵌套的?
  • 它们是嵌套的。我只需要一种方法来完全键入文件夹然后搜索。
  • 1.展开所有 Outlook 文件夹:突出显示左侧“邮件文件夹”框中的 PST 文件名,单击直到它变为蓝色。湾。键入 2. 找到文件夹: a.开始输入文件夹名称的前几个字符
  • 我的输入速度不够快,无法找到文件夹,所以我想要一个框,让我可以输入我要查找的内容,然后按 * > .

标签: vba vb.net outlook


【解决方案1】:

你可以试试这个代码

Private m_Folder As Outlook.MAPIFolder
Private m_Find As String
Private m_Wildcard As Boolean

Public Sub FindFolder()
  Dim Name$
  Dim Folders As Outlook.Folders

  Set m_Folder = Nothing
  m_Find = ""
  m_Wildcard = False

  Name = InputBox("Find Name:", "Search Folder")
  If Len(Trim$(Name)) = 0 Then Exit Sub
  m_Find = Name

  m_Find = LCase$(m_Find)
  m_Find = Replace(m_Find, "%", "*")
  m_Wildcard = (InStr(m_Find, "*"))

  Set Folders = Application.Session.Folders
  LoopFolders Folders

  If Not m_Folder Is Nothing Then
    If MsgBox("Activate Folder: " & vbCrLf & m_Folder.FolderPath, vbQuestion Or vbYesNo) = vbYes Then
      Set Application.ActiveExplorer.CurrentFolder = m_Folder
    End If
  Else
    MsgBox "Not Found", vbInformation
  End If
End Sub

Private Sub LoopFolders(Folders As Outlook.Folders)
  Dim F As Outlook.MAPIFolder
  Dim Found As Boolean

  For Each F In Folders
    If m_Wildcard Then
      Found = (LCase$(F.Name) Like m_Find)
    Else
      Found = (LCase$(F.Name) = m_Find)
    End If

    If Found Then
      Set m_Folder = F
      Exit For
    Else
      LoopFolders F.Folders
      If Not m_Folder Is Nothing Then Exit For
    End If
  Next
End Sub

取自http://www.vboffice.net/sample.html?mnu=2&smp=82&cmd=showitem&lang=en

【讨论】:

  • 不,这需要很长时间,我已经尝试过了。我有超过 2,500 个要搜索的文件夹,我所要求的几乎是即时的 - 您发布的代码需要 2 分钟以上才能找到。 ://
【解决方案2】:

假设“\”作为分隔符,您需要将文件夹名称拆分为字符串列表或数组,然后为每个元素递归检索下一个子文件夹。与 basher 的建议类似,但有一个关键区别 - 绝对没有理由遍历所有子文件夹:OOM 中的 Folders.Item 采用整数索引(1 到 Count)或子文件夹名称。

例如Subfolder = Folder.Folders.Item("Some name") 将检索名为“Some name”的子文件夹。

编辑:示例脚本 (VBA):

strFolderPath = "Subfolder 1\Subfolder 2"
FolderNames = Split(strFolderPath, "\")
'aassuming the path is relative to the currently displayed folder
'or use a top level folder
set RootFolder = Application.ActiveExplorer.CurrentFolder
set CurrentFolder = RootFolder
for each subFolderName in FolderNames
  set CurrentFolder = CurrentFolder.Folders.Item(subFolderName)
next
Debug.Print CurrentFolder.Name

【讨论】:

  • 您能详细介绍一下这种方法/技术吗?你会在这做什么? VBA? AHK?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多