Sviluppare funzionalita su Microsoft Office con VBA Macro che inserisca una freccia su una colonna stabilita e cambi per ogni giorno

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

    tempusfugit
    Partecipante

      Buongiorno amici del forum,

      è da poco che mi sto cimentando con piccole routine per VBA, avrei bisogno sul mio foglio Excel (vedi esempio allegato), di una macro che mi inserisca una freccia (sulla colonna F, poi sulla colonna I e così via), che mi indichi ogni giorno della settimana la colonna dove vanno inseriti i dati inserire i dati.

       

      Grazie.

      Massimiliano

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

      GiuseppeMN
      Partecipante
        19 pts

        Buona sera, @tempusfugit;
        consentimi una domanda, per quale motivo nella struttura della Data 22/agosto (Colonna "D") mancano i Campi "fatti" e "anticipi".

        Chiarito questo dubbio, credo potresti pensare ad avere una "freccia" su ogni Data da nascondere o visualizzare in funzione della scelta operata; anche se personalmente preferirei:
        - Nacondere tutte le Date ad esclusione della Data scelta.

        Voglio dire:
        - Un Codice VBA per visualizzare tutta la settimana
        - Un Codice VBA per visualizzare solo le tre Colonne della Data scelta.

        Giuseppe

        #27262 Score: 0 | Risposta

        tempusfugit
        Partecipante

          Buonasera Giuseppe,

          la colonna con il sabato serve solo come collegamento alla settimana precedente, quindi in quella colonna io non ci vado a scrivere nulla, il discorso della freccia serve perché a volte per un errore di parallasse sbaglio ad inserire nella cella corretta (ho provato anche con una macro che mi evidenziasse la colonna giusta, ma poi mi va a cambiare tutta la formattazione del foglio.

           

          Grazie come sempre.

          Massimiliano

          #27264 Score: 0 | Risposta

          zer0kelvin
          Partecipante
            5 pts

            Ciao a tutti.

            Puoi utilizzare questo codice da inserire nel modulo del foglio interessato

            Private Sub Worksheet_Activate()
                
                Dim Cella As Range
                Dim Lc As Long
                
                Lc = Cells(5, Columns.Count).End(xlToLeft).Column
                For Each Cella In Range(Range("D5"), Cells(5, Cells(5, Columns.Count).End(xlToLeft).Column))
                    If IsDate(Cella) Then
                        If CDate(Cella) = Date Then
                            Shapes(1).Cut
                            Paste Cella.Offset(1, 1)
                            Exit For
                        End If
                    End If
                Next Cella
                
            End Sub
            

            Devi inoltre salvare il file in uno dei formati che supportano le macro (xlsx non va bene) cioè xls, xlsm, xlsb.

            Il codice viene automaticamente eseguito ogni volta  che visualizzi il foglio; il foglio non deve contenere altre immagini, pulsanti e simili.

            #27275 Score: 0 | Risposta

            tempusfugit
            Partecipante

              Ciao Karma,

              ho fatto tutti i passaggi ma non funziona nulla!!!

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

              GiuseppeMN
              Partecipante
                19 pts

                Buona giornata, @tempusfugit.
                Consentimi un saluto a @zer0kelvin.

                Il Codice VBA funziona perfettamente basta impostare le condizioni per farlo funzionare.

                - Inserisci la "Freccia" come nel tuo File iniziale; in Colonna "F"
                - Il Codice funziona dalla Data 24/agosto/2020 alla Data 30/agosto/2020
                - Prova a inserire in Cella "E5" la Data 17-ago; oppure aspetta la prossima settimana
                - Considera che "Worksheet_Activate" viene attivato quando il Foglio di lavoro viene attivato; in questo caso servono almeno due Fogli di lavoro.

                Giuseppe

                #27282 Score: 0 | Risposta

                tempusfugit
                Partecipante

                  Ciao Giuseppe,

                  sempre gentile, ma Excel mi restituisce un errore:"riferimento non valido" e si blocca tutto.

                   

                  Saluti.

                  Massimiliano

                  #27283 Score: 0 | Risposta

                  GiuseppeMN
                  Partecipante
                    19 pts

                    Molto strano.

                    Allega il tuo File con le modifiche che ho consigliato in #27280.

                    Giuseppe

                    #27284 Score: 1 | Risposta

                    zer0kelvin
                    Partecipante
                      5 pts

                      GiuseppeMN ha scritto:

                      - Considera che "Worksheet_Activate" viene attivato quando il Foglio di lavoro viene attivato; in questo caso servono almeno due Fogli di lavoro.

                      Ciao @giuseppemn.

                      Errore mio, ho dato per scontato che l'evento si verificasse anche all'apertura del workbook, ma non è così.

                      Si potrebbe usare, con qualche modifica al codice, Workbook_Open

                      Private Sub Workbook_Open()
                          
                          Dim Cella As Range
                          
                          With Sheets("Foglio1")
                              For Each Cella In Range(.Range("D5"), .Cells(5, .Cells(5, Columns.Count).End(xlToLeft).Column))
                                  If IsDate(Cella) Then
                                      If CDate(Cella) = Date Then
                                          .Shapes(1).Cut
                                          .Paste Cella.Offset(1, 1)
                                          Exit For
                                      End If
                                  End If
                              Next Cella
                          End With
                              
                      End Sub
                      

                      @ tempusfugit il codice funziona correttamente; hai inserito, come richiesto, la freccia nel foglio?

                      #27286 Score: 0 | Risposta

                      tempusfugit
                      Partecipante

                        Grazie,

                        ragazzi domani provo e vi faccio sapere, ma è possibile che se io salvo con una versione di Excel (la mia è la 2019) e su un altro pc c'è la 2016 la macro non funzioni? esiste un modo per far si che la macro giri su tutte le versioni di Excel?

                        #27288 Score: 0 | Risposta

                        zer0kelvin
                        Partecipante
                          5 pts

                          Si, è possibile, ma allora il problema non è la macro in sè ma il riferimento a una delle librerie di oggetti.

                          Ci sono due ipotesi:

                          1) sul primo pc è presente un programma che ha attivato, alla sua installazione, una sua libreria ad oggetti che risulterà mancante sul secondo pc.

                          2) (più probabile) la versione più aggiornata di Excel ha abilitato automaticamente la versione più recente di una delle librerie di Office; per esempio

                          Microsoft Office 16.0 Object Library

                          che fa parte delle librerie di Office 2019.

                          Questo renderà il programma VBA incompatibile con le versioni precedenti di Office che hanno la versione meno aggiornata di quella  libreria.

                          In entrambi i casi la soluzione consiste nell'eliminare il riferimento alla libreria non disponibile ma, se si tratta di una delle librerie indispensabili (come quella che ho citato) al funzionamento del VBA, non puoi semplicemente eliminare il riferimento,  devi sostituirlo con un riferimento alla analoga libreria della versione meno aggiornata di office.

                          Fai questo:

                          - apri il file con la versione meno aggiornata di Excel

                          - se il VBA è bloccato clicca sul pulsante "ripristina" (il quadratino blu sulla barra degli strumenti)

                          - in VBA vai nel menù Strumenti e clicca su Riferimenti; a destra di una o più voci vedrai la scritta [Manca]

                          - se si tratta di librerie non comprese in questo elenco:

                              Visual Basic For Application

                              Microsoft Excel xx.0 Object Library

                              Microsoft Office xx.0 Object Library

                              OLE Automation

                          puoi semplicemente togliere il segno di spunta, salvare e chiudere il file

                          - in caso contrario devi cercare nell'elenco le due librerie

                              Microsoft Excel 14.0 Excel Library

                              Microsoft Office 14.0 Object Library

                          e togliere la spunta a quelle mancanti.

                          Le librerie 14.0 sono quelle di Office 2010, ma le funzionalità offerte dovrebbero essere identiche.

                           

                          #27298 Score: 0 | Risposta

                          tempusfugit
                          Partecipante

                            Buongiorno Karma,

                            il file non si è aggiornato è rimasto alla data di venerdì 21 agosto 🙁

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

                            GiuseppeMN
                            Partecipante
                              19 pts

                              Credo debba essere tu ad aggiornarlo manualmente modificando la data in Cella "E5".

                              Giuseppe

                              #27308 Score: 0 | Risposta

                              tempusfugit
                              Partecipante

                                Ciao Giuseppe,

                                ma scusa la giornata di sabato non è contemplata nel range delle date?

                                 

                                #27315 Score: 0 | Risposta

                                GiuseppeMN
                                Partecipante
                                  19 pts

                                  Buon pomeriggio, @tempusfugit.

                                  @tempusfugit in #27308, scrive:

                                  ... ma scusa la giornata di sabato non è contemplata nel range delle date?

                                  Forse non ho capito il problema ma se la Data del Sabato presente in "D5" è corretta, in "E5" puoi srivere: =$D$5+2

                                  O mi sbaglio?

                                   

                                  Giuseppe

                                  #27316 Score: 0 | Risposta

                                  Massimiliano

                                    Buonasera Giuseppe, 

                                    forse mi sono spiegato male, aprendo il foglio oggi che é sabato 22 agosto, la freccia rimane sul giorno 21!

                                    #27318 Score: 0 | Risposta

                                    GiuseppeMN
                                    Partecipante
                                      19 pts

                                      Buon pomeriggio, @massimiliano.

                                      @massimiliano in #27316, scrive:

                                      ... aprendo il foglio oggi che é sabato 22 agosto, la freccia rimane sul giorno 21!

                                      È strano, a me non accade; non vorrei insistere ma allega il tuo File e posso/possiamo chiarire l'arcano.

                                      Buon fine settimana.

                                      Giuseppe

                                      #27320 Score: 0 | Risposta

                                      Marius44
                                      Moderatore
                                        58 pts

                                        Salve a tutti

                                        Nella macro non è indicato il Foglio "Viaggi" bensì "Foglio1" e, pertanto, il foglio non si aggiorna.

                                        Ciao,

                                        Mario

                                        #27323 Score: 1 | Risposta

                                        Marius44
                                        Moderatore
                                          58 pts

                                          Ciao

                                          Guardando meglio il tuo allegato credo che la macro vada inserita in "Questa cartella di Lavoro" e non nel modulo del Foglio1 (Viaggi). Comunque la correzione del nome del Foglio va fatta comunque.

                                           

                                          Cia,

                                          Mario

                                          #27326 Score: 0 | Risposta

                                          GiuseppeMN
                                          Partecipante
                                            19 pts

                                            Buona sera, @massimiliano;
                                            al di là del nome del Foglio di lavoro, a mio modesto parere, ci sono discrepanze ben più gravi.

                                            Non mi è chiara il contenuto della Cella "C3":
                                            Settimana 29
                                            che non ha alcuna attinenza con le Date proposte.
                                            Credo che dovrebbe essere:
                                            Settimana 34

                                            Per evitare refusi andrebbe calcolata.
                                            Sarebbe utile calcolare anche la Data del "primo Lunedì della settimana corrente".

                                            Ciò premesso, consentimi di proporre la mia proposta iniziale; all'apertura del File viene visualizzata solo la Data del giorno corrente, vedi immagine in allegato.
                                            In questo modo non avresti più bisogno di alcuna "freccia" ma solo di un Codice VBA che, volendo, consenta di visualizzare l'intera settimana.

                                            Buona serata.

                                            Giuseppe

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

                                            tempusfugit
                                            Partecipante

                                              Buongiorno Giuseppe,

                                              con la diritta di Mario, ora funziona, ho messo anche la funzione  =NUM.SETTIMANA(E5), per calcolare la settimana in modo automatico al cambio del valore nella cella E5, purtroppo a me servono visualizzate tutte le date della settimana perché i viaggi possono cambiare.

                                              In allegato il file funzionante.

                                              Saluti.

                                              Massimiliano

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

                                              patel
                                              Moderatore
                                                51 pts

                                                dopo .Paste Cella.Offset(1, 1) io aggiungerei un

                                                Cella.Offset(1, 1).Select

                                                in modo da togliere la selezione alla freccia

                                              Login Registrati
                                              Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
                                              Rispondi a: Macro che inserisca una freccia su una colonna stabilita e cambi per ogni giorno
                                              Gli allegati sono permessi solo ad utenti REGISTRATI
                                              Le tue informazioni: