Sviluppare funzionalita su Microsoft Office con VBA Prelevare dati da celle in cartella chiusa in base a valore da foglio aperto

LoginRegistrati
Stai vedendo 8 articoli - dal 1 a 8 (di 8 totali)
  • Autore
    Articoli
  • #24656 Risposta

    tozzetto
    Partecipante

      Buongiorno, grazie al vs forum ho iniziato ad usare Vba su excel, ho fatto diverse macro, ma ora avrei una richiesta se possibile, ho cercato ma non riesco, non so da dove iniziare.

      In base ai dati nella cella "Targa" in Scheda1 dovrei andare a prendere in automatico tutte le ore di lavorazione presenti nella cartella excel ConsutivoOperatore1 senza aprirlo e metterle nel Foglio Ore di Scheda1, creando un elenco di Data e ore a scendere.

      Non so dove sbattere la testa.... è un  po' che non creo codici con Vba.... Vi ringrazio anticipatamente... 

       

      Allegati:
      You must be logged in to view attached files.
      #24669 Risposta
      albatros54
      albatros54
      Moderatore
        51 pts

        metti i due file cha hai postato nella stessa cartella, apri il file "scheda1", inserisci un modulo e incolli il codice che ti posto,esegui il codice.

        Option Explicit
        Private cn As Object
        
        
        Sub albatros54ADO24656()
            Dim cn As Object    'dichiara l'oggetto che sarà la connessione alla fonte dati
            Dim rs As Object    'dichiara l'oggetto che sarà il recordset
            Dim s As String, s1 As String
        
            Const adOpenStatic = 3      'proprietà CursorType. Usa un cursore statico
            Const adLockOptimistic = 3  'proprietà LockType. Usa un blocco dal record corrente
            Const adCmdText = &H1       'proprietà CommandType. Si aspetta un comando di testo (non una tabella, p.es.)
            s1 = ThisWorkbook.Path & "\" & "consuntivooperatore1.xls"
            'crea gli oggetti ADO connection e recordset
            Set cn = CreateObject("ADODB.Connection")
            Set rs = CreateObject("ADODB.Recordset")
        
            'apre una connessione al file sopra individuato (il cui percorso è nella variabile "s");
            'attenzione alle doppie virgolette (fanno parte della stringa di connessione
            'e quindi vanno raddoppiate in fase di costruzione della stringa)
            cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Data Source=" & s1 & ";" & _
                    "Extended Properties=""Excel 12.0 Macro;HDR=Yes;"";"
        
            'apre il recordset impostando la stringa query necessaria
            'qui selezionaiamo tre campi e un campo calcolato al volo
            'dal foglio1, colonne A:G, raggruppando i dati sui primi tre campi
            'al metodo Open dobbiamo passare il riferimento all'oggetto connection
            'e i tre parametri opzionali per impostare il tipo di cursore.
        
            rs.Open "SELECT databi,totale FROM tabella where lavoro='" & Sheets("Scheda").Range("b14") & "'", cn
            Sheets("ORE").Range("b2:c14").ClearContents
            Sheets("ORE").Range("b2").CopyFromRecordset rs
            'chiudiamo il recordset, la connessione e annientiamo gli oggetti
            rs.Close
            cn.Close
            Set rs = Nothing
            Set cn = Nothing
        End Sub
        
        
        
        
        

         


        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #24670 Risposta
        albatros54
        albatros54
        Moderatore
          51 pts

          @ALLA VOCE:

          nel post precedente mi sono dimenticati di comunicarti le variazioni che bisogna fara al file "ConsuntivoOperatore1", devi modificare le voci "data"in databi" e la voce"totale(decimi)" in "totale", poi devi selezionare il range("A2:d22") e dargli il nome"Tabella".

           


          Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
          Sempre il mare, uomo libero, amerai!
          ( Charles Baudelaire )
          #24698 Risposta

          tozzetto
          Partecipante

            Ciao, grazie per la disponibiltà, ho provato ma esce sempre errore: 

            ---> rs.Open "SELECT databi,totale FROM tabella where lavoro='" & Sheets("Scheda").Range("b14") & "'", cn
            Sheets("ORE").Range("b2:c14").ClearContents
            Sheets("ORE").Range("b2").CopyFromRecordset rs

            Ho modificato si "data" in "databi"  e "totale" e dato il nome "Tabella" al range indicato... 

            Grazie

            #24700 Risposta
            albatros54
            albatros54
            Moderatore
              51 pts

              che errore ti da?che versione di excel usi?

               


              Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
              Sempre il mare, uomo libero, amerai!
              ( Charles Baudelaire )
              #24734 Risposta

              tozzetto
              Partecipante

                Uso Excel 2016, mi da:

                Errore di run-time

                Il motore di database di Microsoft Access non è in grado di trovare l'oggetto 'tabella'. Assicurarsi che l'oggetto esista e che il nome e il percorso digitati siano corretti.

                Il range indicato l'ho chiamato tabella come mi avevi detto.

                 

                #24740 Risposta
                albatros54
                albatros54
                Moderatore
                  51 pts

                  ti posto i file , dove ho fatto delle prove e tutto funziona, i due file li devi inserire nella stessa DIR. prova e fai sapere

                   


                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                  Sempre il mare, uomo libero, amerai!
                  ( Charles Baudelaire )
                  Allegati:
                  You must be logged in to view attached files.
                  #24754 Risposta

                  tozzetto
                  Partecipante

                    Grazie albatros54 ho modificato le varibile del codice e corretto in modo tale da avere 2 importazioni diverse. Grazie ancora mi hai fatto un favorone!! 

                     

                  LoginRegistrati
                  Stai vedendo 8 articoli - dal 1 a 8 (di 8 totali)
                  Rispondi a: Prelevare dati da celle in cartella chiusa in base a valore da foglio aperto
                  Gli allegati sono permessi solo ad utenti REGISTRATI
                  Le tue informazioni:



                  vecchio frac - 2750 risposte

                  albatros54
                  albatros54 - 1009 risposte

                  patel
                  patel - 976 risposte

                  Marius44
                  Marius44 - 839 risposte

                  Luca73
                  Luca73 - 717 risposte