Outlook 2013 でフィードを削除した後、以前にダウンロードした RSS アイテムを削除する

Outlook 2013 でフィードを削除した後、以前にダウンロードした RSS アイテムを削除する

Outlook 2013 の [ファイル] > [アカウント設定] > [RSS フィード] から RSS フィードを削除しました。

ただし、RSS フィードは Outlook 2013 の左側で引き続き利用できます。変更 (RSS フィードの削除) を有効にするには Outlook 2013 を閉じて再度開く必要があると思いましたが、何も起こりません。何が起こっているのでしょうか。どうすればよいでしょうか。

答え1

Microsoft の UI 規則 (Shift キーまたは Ctrl キーを押しながらクリックして複数選択するなど) が一貫していないのが本当に面白いです。うまくいくときもあれば、うまくいかないときもあり、この問題を解決する最も簡単な方法は Visual Basic の自動化であることがわかりました。

序文: 私はこれを Outlook 2007 でテストしました。これは現在私がアクセスできる唯一のバージョンです。とはいえ、私の経験では Outlook VBA API は一般的に非常に安定しており、2 つのメジャー バージョンで次のコードが動作しなくなるほど大幅に変更されるとは思いません。失敗した場合は、できるだけ詳細にその不具合を説明したコメントを投稿してください。デバッグを試みます。

Altまず、 -からVBAエディタを開きますF11。(それが機能しない場合は、まず開発タブからエディタを開く必要があります。リボンに追加するこれを行うには、[ファイル] タブをクリックし、[オプション] をクリックします。[オプション] ウィンドウで、左側のペインの [リボンのユーザー設定] をクリックし、[リボンのユーザー設定] ドロップダウンから [メイン タブ] を選択して、[開発] ボックスをオンにします。[開発] タブが表示されたら、それを選択して [Visual Basic] をクリックします。

Visual Basic エディタで、「Project1」を展開し、「Microsoft Office Outlook オブジェクト」を展開します。次に、「ThisOutlookSession」を右クリックして、「挿入」を選択し、「モジュール」を選択します。「Project1 - Module1 (コード)」というタイトルの空白のウィンドウが表示されます。そのウィンドウに、次のコードを貼り付けます。ここ:

Private Function GetFolder(ByVal FolderPath As String) As Outlook.folder
    Dim TestFolder As Outlook.folder
    Dim FoldersArray As Variant
    Dim i As Integer

    On Error GoTo GetFolder_Error
    If Left(FolderPath, 2) = "\\" Then
        FolderPath = Right(FolderPath, Len(FolderPath) - 2)
    End If
    'Convert folderpath to array
    FoldersArray = Split(FolderPath, "\")
    Set TestFolder = Application.Session.folders.Item(FoldersArray(0))
    If Not TestFolder Is Nothing Then
        For i = 1 To UBound(FoldersArray, 1)
            Dim SubFolders As Outlook.folders
            Set SubFolders = TestFolder.folders
            Set TestFolder = SubFolders.Item(FoldersArray(i))
            If TestFolder Is Nothing Then
                Set GetFolder = Nothing
            End If
        Next
    End If
    'Return the TestFolder
    Set GetFolder = TestFolder
    Exit Function

    GetFolder_Error:
        Set GetFolder = Nothing
        Exit Function
End Function

Private Sub DeleteFolders(ByVal oFolder As Outlook.folder)
    Dim folders As Outlook.folders
    Dim folder As Outlook.folder
    Dim foldercount As Integer

    On Error Resume Next
    Set folders = oFolder.folders
    foldercount = folders.Count
    If foldercount Then
        For Each folder In folders
            folder.Delete
            DeleteFolders folder
        Next
    End If
End Sub

Sub DeleteAllRssFeedsFolders()
    Dim folder As Outlook.folder
    ' If your PST isn't loaded under the name "Personal Folders", then edit the 
    ' folder path below and replace "Personal Folders" with whatever name heads
    ' the folder tree whose RSS feed contents you wish to remove.
    Set folder = GetFolder("\\Personal Folders\RSS Feeds")
    If Not (folder Is Nothing) Then
        DeleteFolders folder
    End If
End Sub

下部付近で、次の点に注意してください。GetFolder("\\Personal Folders\RSS Feeds")まれに、フォルダー ツリーの先頭に「Personal Folders」という名前が付いていない場合があります。その場合は、この行を編集して、「Personal Folders」をフォルダー ツリーの先頭に付いている名前に置き換える必要があります。そうしないと、おそらく何も表示されずにコードが失敗します。

コードを貼り付けて必要な編集を行ったら、F5 キーを押すか、[実行] メニューをクリックして [Sub/UserForm の実行] をクリックしてコードを実行します。実行するマクロを選択するように求められます。リストで既に選択されている唯一の項目は [DeleteAllRssFeedsFolders] です。必要に応じてその項目を選択し、[実行] をクリックします。RSS フォルダーがすぐに消え始めるのがわかります。特に数百のフォルダーを削除する場合は、プロセスが完了するまでに 1 ~ 2 分かかることがありますが、完了すると問題は解決されるはずです。

これを頻繁に実行する必要があると思われる場合は、おそらく VBA プロジェクトを保存し、それを呼び出すためのメニュー/リボン項目も追加する必要があります。このタスクについては、特に興味も知識もないので、興味のある読者の演習として残しておきます。(プロジェクトを他の時点で保存しない場合は、Outlook を閉じるときに保存するように求められます。プロジェクトを保持したくない場合は、「いいえ」と答えてください。)

関連情報