Sviluppare funzionalita su Microsoft Office con VBA Creazione eventi Outlook da dati Excel

Login Registrati
Stai vedendo 16 articoli - dal 1 a 16 (di 16 totali)
  • Autore
    Articoli
  • #8440 Score: 0 | Risposta

    MickSC

      Buonasera,

      ho trovato sul forum la seguente discussione: https://www.excelvba.it/Forum/story/Excel_e_gli_applicativi_Office/Gestione_Calendar_Outlook_tramite_Excel.html

      premettendo che devo creare un qualcosa di molto simile a quanto descritto nel link precedente, il mio problema sorge soltanto dopo la prima esecuzione della macro: i dati inseriti in Excel prima dell'esecuzione, vengono trasformati in eventi Outlook e, se ci sono eventi uguali già inseriti, o li salta o li aggiorna; ma, dalla seconda esecuzione in poi, se la prima riga del file Excel contiene un evento non ancora inserito, la macro lo inserisce e controlla anche le righe successive (inserendo eventualmente anche quelle), se, invece, la prima riga contiene un evento già inserito, la macro si ferma lì e non controlla le altre righe. Così, se aggiorno il file Excel ed inserisco delle righe nuove al di sotto di quelle originarie, la macro non mi crea più i rispettivi eventi Outlook.

      Detto ciò, grazie in anticipo a chiunque mi aiuterà.

      Buona serata

      #8442 Score: 0 | Risposta

      MickSC

        P.S. dimenticavo di dire che sto utilizzando il codice di vecchio frac (presente nella discussione linkata).

        #8443 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          238 pts

          Bella discussione quella, impegnativa, mi ricordo. Certo è fuori contesto ma possiamo farcela a capire cosa serve a te... magari puoi allegare un pezzo di file con lo scenario e l'obiettivo da raggiungere 🙂 Così vediamo anche il codice che hai scritto tu e vediamo che problemi ci sono.

          #8444 Score: 0 | Risposta

          MickSC

            <u>Purtroppo non ho il file con me, ma sto adoperando esattamente il codice scritto da te. Ho cambiato giusto i numeri delle colonne per fargli trovare i dati corretti. Dalle prove che ho effettuato, mi è parso di capire che il problema sorge nel momento in cui controlla il subject: se la prima riga Excel ha un subject non inserito, fa gli altri controlli e poi inserisce l'evento proseguendo con le righe successive, ma se ha un subject già inserito, si ferma alla prima riga e non controlla le successive. Questo, come dicevo, solo dopo aver aggiunto nuove righe al file Excel, mentre, alla prima esecuzione, qualsiasi sia il numero e la disposizione delle righe, funziona perfettamente.</u>

            #8445 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              238 pts

              Allora devo rileggere meglio quel thread e capire il problema, se il codice si adatta bene anche a te, meglio... riutilizzare è meglio che reinventare 🙂

              #8447 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                238 pts

                Tanto per cominciare a eliminare dubbi, dove comincia il ciclo

                For Each v In Range("A1").CurrentRegion.Rows

                sei certo che la base dati (l'indirizzario con l'elenco eventi) sia integra, cioè non ci siano righe vuote in mezzo?

                #8448 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  238 pts

                  Riesco a seguire il flusso del mio vecchio codice, però servirebbe molto avere sottomano la tua struttura dati per poter fare qualche test. Così alla cieca non riesco :/

                  #8453 Score: 0 | Risposta

                  MickSC

                    Domani provo a farti avere il file.

                    Comunque, avevo pensato anch'io agli spazi vuoti, leggendo "CurrentRegion", ma nel file Excel non ce ne sono.

                    In pratica, ho una situazione di questo tipo:

                    Subject - Body - Start

                    1 ...........................

                    2 ...........................

                    3 ...........................

                    avvio la macro e mi carica gli eventi (se la eseguo due volte, non li inserisce nuovamente, quindi, i controlli dovrebbero andare);

                    poi, aggiungo dei dati in una nuova riga: 

                    Subject - Body - Start

                    1 ...........................

                    2 ...........................

                    3 ...........................

                    4 ........................... <----

                    avvio nuovamente la macro ed ecco che se la riga 1 non è stata inserita su Outlook, inserisce sia quella che la numero 4, ma, se la riga 1 ha già il relativo evento, la 4 non la inserisce (probabilmente esegue il controllo solo sulla prima riga e poi si ferma).

                    Questo avviene qualsiasi sia la posizione della nuova stringa (riga 2, 3, 4, ecc...).

                    #8454 Score: 0 | Risposta

                    MickSC
                    Partecipante

                      Ho ricreato al volo il file e mi si presenta lo stesso problema dell'originale, quindi, credo dovrebbe andare bene per le prove.

                       

                      Allegati:
                      You must be logged in to view attached files.
                      #8456 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        238 pts

                        Ok bene appena riesco mi dedico 🙂

                        #8590 Score: 0 | Risposta

                        MickSC
                        Partecipante

                          Ciao,

                          per caso hai novità a riguardo?

                          Grazie in anticipo.

                          #8602 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            238 pts

                            Uh mi ero perso questo thread. Spero di riuscire ad applicarmi, non ho avuto tempo ultimamente.

                            #8639 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              238 pts

                              Dunque, ho controllato il codice nel file che hai allegato e (pur non potendolo provare qui a casa perchè non ho Outlook), credo di notare questo: se viene trovato un evento con lo stesso soggetto definito nel foglio, la variabile bFound viene impostata su True, il che impedisce poi la creazione di eventi successivi (if not bFound Then ...). Il problema è che ad ogni assaggio la variabile bFound rimarrà su True, impedendo la creazione anche successiva di nuovi eventi. La soluzione è, semplicemente, settare bFound a False ad ogni giro.

                              Modifica quindi il codice di aggiornaScadenze come segue:

                              ...
                                  '---- check
                                  For Each ItemAppt In fdrCalendar.Items
                                      bFound = False  ' <----
                                      If ItemAppt.Subject = Trim(v.Cells(1)) Then
                                          bFound = True
                                          'trovato subject uguale: verifico se il corpo è uguale, se diverso lo aggiorno
                              
                              ...
                              #8687 Score: 0 | Risposta

                              MickSC
                              Partecipante

                                Ciao,

                                ho provato, ma adesso, se eseguo la macro due volte consecutivamente, mi crea nuovamente gli stessi eventi su Outlook. La cosa non si verifica solo se, prima di eseguire per la seconda volta la macro, aggiungo una nuova stringa di dati al file Excel.

                                #8737 Score: 0 | Risposta

                                MickSC
                                Partecipante

                                  Ciao,

                                  ho fatto qualche prova e credo che il problema sia questo: lanciata la macro la prima volta e creati gli eventi (il problema si presenta soltanto se sono più di uno), nel lanciarla la seconda volta, questa confronta il primo evento con la prima riga di Excel, vede che è uguale e non lo reinserisce. A questo punto, invece di passare all'evento Outlook successivo, continua a confrontare il primo, ma, questa volta, con la seconda riga di Excel, così, vede che sono diversi e lo reinserisce. Questo si ripete tutte le volte, così che ogni volta che si lancia la macro, vengono ricreati tutti gli eventi.

                                  #25572 Score: 0 | Risposta

                                  aeron
                                  Partecipante

                                    buongiorno a tutti, ho preso spunto dal codice che avete allegato all'inizio per la gestione di un foglio excel con outlook, ho solo un problema che mi piacerebbe vedere con voi, ho messo come vincolo la data e l'ora di fine del meeting, ma nel momento in cui modifico la data di fine meeting non mi aggiorna la riunione in outlook, sapete aiutarmi?

                                    allego codice grazie mille in anticipo

                                    Option Explicit

                                    Sub aggiornaScadenze_VF()
                                    Dim v As Variant
                                    Dim OutApp As Object
                                    Dim fdrCalendar As Object
                                    Dim ItemAppt As Object
                                    Dim i As Long, j As Long
                                    Dim bFound As Boolean

                                    Set OutApp = CreateObject("Outlook.Application")
                                    Set fdrCalendar = OutApp.GetNamespace("MAPI").GetDefaultFolder(9) '9 = olFolderCalendar

                                    OutApp.Session.Logon

                                    Sheets("Foglio1").Select
                                    For Each v In Range("A1").CurrentRegion.Rows
                                    If v.Row > 1 Then
                                    If Trim(v.Cells(3)) = "" Then
                                    MsgBox "il documento " & v.Cells(1) & " non ha una data scadenza", vbInformation, "campo obbligatorio"
                                    Else
                                    '---- check
                                    For Each ItemAppt In fdrCalendar.Items
                                    If ItemAppt.Subject = Trim(v.Cells(1)) Then
                                    bFound = True
                                    'trovato subject uguale: verifico se il corpo è uguale, se diverso lo aggiorno
                                    If ItemAppt.Body <> Trim(v.Cells(2)) Then
                                    ItemAppt.Body = Trim(v.Cells(2))
                                    ItemAppt.Save
                                    j = j + 1
                                    End If

                                    'data di scadenza non uguale all'appuntamento già inserito:
                                    'cancella appuntamento esistente e lo reinserisce in nuova posizione
                                    If ItemAppt.Start <> v.Cells(3) Then
                                    ItemAppt.End = v.Cells(4)
                                    ItemAppt.Delete
                                    Call CreateItem(OutApp, v)
                                    j = j + 1
                                    End If
                                    End If
                                    Next
                                    '--------------------
                                    If Not bFound Then
                                    Call CreateItem(OutApp, v)
                                    i = i + 1
                                    bFound = False
                                    End If
                                    End If
                                    End If
                                    Next

                                    Set OutApp = Nothing

                                    MsgBox "Ho inserito " & i & " scadenze, ho modificato " & j & " scadenze"
                                    End Sub
                                    Private Sub CreateItem(olApp As Object, v As Variant)
                                    Dim OutCalendar As Object
                                    Set OutCalendar = olApp.CreateItem(1) 'nuovo appuntamento
                                    With OutCalendar
                                    .AllDayEvent = False
                                    .Start = Trim(v.Cells(3)) 'data scadenza
                                    .End = Trim(v.Cells(4)) 'data fine riunione
                                    .Subject = Trim(v.Cells(1)) 'tipo documento
                                    .Body = Trim(v.Cells(2)) 'note documento
                                    .ReminderMinutesBeforeStart = 15
                                    .ReminderSet = True
                                    .Recipients.Add ("mattiaponkia@hotmail.it")
                                    .MeetingStatus = 1 ' 1 = olMeeting
                                    .Recipients.ResolveAll
                                    .Send
                                    .Save
                                    End With
                                    Set OutCalendar = Nothing
                                    End Sub

                                     

                                  Login Registrati
                                  Stai vedendo 16 articoli - dal 1 a 16 (di 16 totali)
                                  Rispondi a: Creazione eventi Outlook da dati Excel
                                  Gli allegati sono permessi solo ad utenti REGISTRATI
                                  Le tue informazioni: