Domanda

Ho scritto il codice qui sotto che è molto simile a risposta accettata qui.Contrassegna i messaggi di posta elettronica e le risposte alle riunioni come letti e li sposta nell'archivio.

Ordino la posta in base alla più recente in alto.Dopo aver utilizzato la macro, la selezione passa automaticamente all'e-mail successiva (quella più vecchia).Voglio che venga spostato all'e-mail successiva (quella più recente).Se inverto l'ordinamento delle e-mail, funziona come voglio.Ho dedicato troppo tempo a questo per invertire semplicemente l'ordinamento delle mie e-mail.

Ho provato a impostare un MailItem su Application.ActiveExplorer.CurrentFolder.Items.GetNext quindi utilizzare MailItem.Display.Questo apre anziché modificare la selezione, non conosce la selezione corrente, non riesce a capire cosa è considerato "successivo".

Ho provato a impostare la proprietà Application.ActiveExplorer.Selection.Item.Ho provato (MSDN ed Expertcambio di sesso) alla ricerca di una soluzione.

Sub MoveToArchive()
    On Error Resume Next
    Dim objFolder As Outlook.MAPIFolder
    Dim objNS As Outlook.NameSpace, objItem As Outlook.MailItem
    Dim objMRItem As Outlook.MeetingItem
    Set objNS = Application.GetNamespace("MAPI")
    Set objFolder = objNS.Folders("Archive").Folders("Inbox")

    If Application.ActiveExplorer.Selection.Count = 0 Then
        Exit Sub
    End If

    For Each objItem In Application.ActiveExplorer.Selection
        If objFolder.DefaultItemType = olMailItem Then
            If objItem.Class = olMail Then
                objItem.UnRead = False
                objItem.Move objFolder
            End If
        End If
    Next

    For Each objMRItem In Application.ActiveExplorer.Selection
        If objFolder.DefaultItemType = olMailItem Then
            If objItem.Class = olMeetingResponsePositive Or olMeetingResponseNegative Or olMeetingResponseTentative Then
                objMRItem.UnRead = False
                objMRItem.Move objFolder
            End If
        End If
    Next

    Set objItem = Nothing
    Set objMRItem = Nothing
    Set objFolder = Nothing
    Set objNS = Nothing
End Sub
È stato utile?

Soluzione

Outlook non fornisce alcun modo per selezionare a livello di codice un particolare elemento della finestra di Explorer. Così si sarebbe in grado di farlo in questo modo. L'unico modo credo che si potrebbe fare sarebbe di premere il tasto di programmazione precedente sulla barra o nel menu strumenti. o redesgin l'applicazione per archiviare nella finestra di ispezione etc.

Altri suggerimenti

Inserisci nel tuo codice una delle due righe di codice SendKeys da una delle due macro seguenti per fare in modo che Outlook modifichi la selezione nel riquadro Elenco elementi di Outlook nel messaggio sopra o sotto il messaggio attivo.L'elemento del messaggio e-mail da cui ti stai spostando verso l'alto o verso il basso deve essere attivo nel riquadro Elenco elementi nell'applicazione Outlook prima che venga eseguito il codice SendKeys.Se necessario, aggiungi un ritardo nel codice per consentire al messaggio appropriato di diventare attivo in Outlook prima dell'esecuzione del codice SendKeys.Queste macro possono anche essere aggiunte alla barra multifunzione di Outlook 2010 per creare pulsanti freccia su e giù per spostarsi nel riquadro elenco elementi di Outlook.

- sub moveup ()

InviaChiavi "{UP}":DoEvents

Fine sott

Sotto Sposta giù()

SendKeys "{Giù}":DoEvents

Fine sott

Sono riuscito a ottenere un effetto simile utilizzando la funzione SendKeys.

ho voluto tornare al primo messaggio nella esploratore, dopo aver fatto qualche manipolazione degli elementi selezionati.

Ho appena aggiunto la seguente riga dopo la manipolazione è fatto:

SendKeys "{HOME}"

Questo funziona per me, in questo caso particolare, ma può essere modificato per essere utilizzato in altro contesto.

Usa clearselection e addtoselection come questo

Call e.ClearSelection
For Each itt In e.CurrentFolder.Items
    'MsgBox CStr(itt)
    If (e.IsItemSelectableInView(itt)) Then
        If itt.FullName = it.FullName Then
            Call e.AddToSelection(itt)
        End If
    End If
Next
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top