Cambia l'elemento selezionato in successivo o precedente
-
12-09-2019 - |
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
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