Sviluppare funzionalita su Microsoft Office con VBA Popolamento Database tramite codice

Login Registrati
Stai vedendo 25 articoli - dal 51 a 75 (di 90 totali)
  • Autore
    Articoli
  • #45627 Score: 0 | Risposta

    Ale.1989
    Partecipante

      non so se possa essere utile ma nel file creato manca una cella che non viene compilata ( a47 ) e le celle a 43 e a46 sono colorate in maniera diversa rispetto al file originale e allego foto

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

      alexps81
      Moderatore
        58 pts

        Allora andiamo per gradi:

        1) il file si salva automaticamente o devi salvarlo tu? Eventualmente hai provato anche con:

        NomeFile = ThisWorkbook.Path & Application.PathSeparator & cella.Value & ".xlsx"

        oppure prova anche ":" al posto del "/"

         

        2) Le celle sono un po' tantine e probabilmente avrò fatto confusione nel creare i due Array. Prova con questo nuovo codice. Ho fatto più attenzione nel selezionare le varie celle.

        Sub PopolaScheda()
        Dim wsMR As Worksheet
        Dim wsST As Worksheet
        Dim vFieldsMR As Variant
        Dim vFieldsST As Variant
        Dim i As Byte
        
        i = MsgBox("Vuoi copiare i dati nel foglio ""Scheda Tecnica?""", vbQuestion + vbYesNo, "Copia dati")
        If i = vbNo Then Exit Sub
        
        Application.ScreenUpdating = False
        
        Set wsMR = ThisWorkbook.Worksheets("MASCHERA RICERCA")
        Set wsST = ThisWorkbook.Worksheets("Scheda Tecnica")
        
        
        wsMR.Activate
        vFieldsMR = Array("K7", "K8", "G11", "G14", "K13", "K14", "K15", "K16", "G7", "G8", _
                          "G9", "G12", "G13", "K26", "G10", "D4", "D5", "D6", "D9", "D36", _
                          "D7", "D8", "D21", "D22", "D23", "D13", "X7", "D10", "D16", "D14", _
                          "D11", "D16", "D12", "D15", "D16", "D30", "D31", "D32", "D18", "D49", _
                          "D17", "D20", "D19", "D24", "D25", "D26", "F37", "G37", "H37", "H34", _
                          "H35", "N49")
        
        wsST.Activate
        vFieldsST = Array("D2", "H2", "C8", "G8", "C10", "F10", "H10", "C12", "F12", "C14", _
                          "G14", "C20", "G20", "D22", "G22", "F26", "D27", "F27", "C30", "F30", _
                          "F29", "H29", "C31", "E31", "G31", "F34", "H34", "C35", "F35", "F37", _
                          "C38", "F38", "C41", "F40", "F41", "F43", "C44", "F44", "F46", "A47", _
                          "A50", "A53", "F52", "C56", "C57", "C58", "E56", "E57", "E58", "G56", _
                          "G57", "C59")
        
        'Cancella tutti i campi nel foglio Scheda Tecnica
        For i = LBound(vFieldsST) To UBound(vFieldsST)
            wsST.Range(vFieldsST(i)) = ""
        Next i
                          
        'Popola tutti i campi del foglio Scheda Tecnica prelevando i dati dal foglio Maschera Ricerca
        For i = LBound(vFieldsMR) To UBound(vFieldsMR)
            wsST.Range(vFieldsST(i)) = wsMR.Range(vFieldsMR(i))
        Next i
                          
        MsgBox "Dati copiati", vbInformation, " Copia dati"
        
        i = MsgBox("Dati copiati." & String(2, vbCrLf) & "Vuoi creare una copia della ""Scheda Tecnica?", vbQuestion + vbYesNo, " Copia dati")
        If i = vbNo Then Set wsMR = Nothing: Set wsST = Nothing: Exit Sub
        
        Call CreaCopia(Sheets("Scheda Tecnica").Name, Range("D2"))
        
        Set wsMR = Nothing: Set wsST = Nothing
        
        Application.ScreenUpdating = True
        
        End Sub

         

        3) le celle A43 e A46 hanno un colore di fondo diverso delle altre in realtà. Fai così...nel file master, seleziona una cella con colore rosa (magari seleziona la A40), poi premi su Copia Formato (icona del pennello), poi vai sulla A43 e selezionala. Ripeti la stessa operazione per la A46. Poi salva tutto.

         

        #45647 Score: 0 | Risposta

        Ale.1989
        Partecipante

          Il file non viene salvato in nessuna cartella, una volta che chiudo il file primario mi si apre e procedo a salvarlo io, per tutto il resto grazie ai codici che hai scritto e alle tue dritte sono riuscito ad aggiustare tutto e ad aggiungere anche altre righe.

          Al momento funzionaa tutto alla perfezione tranne l'apertura del file creato.

          Utilizzandolo da un paio di giorni ho notato che mi sarebbe molto più comodo se il file venisse solo creato e aperto...

          Ti metto il file così puoi notare cosa ho aggiunto

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

          alexps81
          Moderatore
            58 pts

            Ale.1989 ha scritto:

            Il file non viene salvato in nessuna cartella, una volta che chiudo il file primario mi si apre e procedo a salvarlo io, per tutto il resto grazie ai codici che hai scritto e alle tue dritte sono riuscito ad aggiustare tutto e ad aggiungere anche altre righe.

            Se ti basta solo una copia senza salvarlo automaticamente ti basta anche solo:

            Worksheets("Scheda Tecnica").Copy
            

            da inserire nella Sub PopolaScheda prima di: 

            Set wsMR = Nothing: Set wsST = Nothing

            End Sub

            e cancella:

            Call CreaCopia(Sheets("Scheda Tecnica").Name, Range("D2"))

            A questo punto la Sub CreaCopia non ti serve più. Tiene presente che non puoi avere il nome del file già rinominato con il Codice Prodotto. Per far ciò il file deve risultare salvato.

            Se invece ti serve salvato, non considerare ciò che ho scritto sopra e prova a fare questa modifica alla Sub CreaCopia:

            wbNew.SaveAs NomeFile, FileFormat:=52

            Con FileFormat:=52 andiamo a specificare che è un File per MAC con estensione xlsx

            #45651 Score: 0 | Risposta

            Ale.1989
            Partecipante

              Perfetto, funziona tutto alla grande .... sei veramente fortissimo... mi ha sempre appassionato la programmazione tramite Via e adesso visto tutto quello che sei riuscito a fare tu ho iniziato a seguire un corso per programmazione, spero di arrivare almeno alla metà di quel che riesci a fare tu....

               

              #45652 Score: 0 | Risposta

              alexps81
              Moderatore
                58 pts

                     

                Grazie...ma fidati...io sono solo il fanalino di coda di questo Forum. Qui che gente che mi fuma...

                Cmq come hai risolto? Creando solo una copia al volo o salvando un nuovo Workbook, e quindi inserendo FileFormat:=52?

                #45663 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  alexps81 ha scritto:

                  Qui che gente che mi fuma

                  Occhio che si puo' fraintendere   

                  #45678 Score: 0 | Risposta

                  Ale.1989
                  Partecipante

                    Alla fine ho creato solo una copia del file nuovo che rinomino ma così ho la possibilità di visualizzarlo e di stamparlo, mi risulta molto più comodo nell'utilizzo quotidiano...

                     

                    #45691 Score: 0 | Risposta

                    Ale.1989
                    Partecipante

                      Ciao alex scusa la domanda, ma quindi se provo ad aprire il file con Windows potrei avere dei problemi ?

                      #45693 Score: 0 | Risposta

                      alexps81
                      Moderatore
                        58 pts

                        No non penso...io il tuo lo apro senza problemi.

                        #45698 Score: 0 | Risposta

                        Ale.1989
                        Partecipante

                          Meno male, ti chiedo un altra info è possibile associare 2 macro allo stesso pulsante ? nel mio caso vorrei che quando premo aggiorna ordine oltre a fare quello che già fa,  andasse a compilare ( e qui viene la parte più complicata ) un altro file con alcune celle il file si chiama elenco ordini aperti e dovrei copiare dal foglio maschera ricerca del file algoritmo calcolo rispettivamente le celle D2, E2, G11, K26, K35, K6, M37 nelle colonne rispettivamente A,B,C,D,E,F,G nella prima riga libera 

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

                          alexps81
                          Moderatore
                            58 pts

                            Cercherò di portare a termine anche questa tua richiesta...però per le prossime dovresti aprire nuovi Thread perché gli argomenti sono poi diversi tra loro.

                            Per quanto riguarda la macro che Aggiorna Ordine come si chiama? Dov'è che la trovo? In quale foglio del file Elenco Ordini Aperti bisogna trasferire i dati? Dove risiederà il file Elenco Ordini Aperti?

                            #45722 Score: 0 | Risposta

                            Ale.1989
                            Partecipante

                              Hai ragione, Comunque la macro in questione si chiama "somma" e si trova nel modulo 5 della cartella algoritmo calcolo, in Elenco Ordini Aperti bisogna scrivere nel foglio "Neri" il Elenco Ordini si trova nella cartella "Produzione GD" all'interno della cartella "A.M.G. S.r.l.s." in "Il Mio Drive" su Google Drive.

                              Uso Google Drive per paura di perdere i file in caso di crash del pc ( come mi è già successo )

                              #45723 Score: 0 | Risposta

                              alexps81
                              Moderatore
                                58 pts

                                Ale.1989 ha scritto:

                                le celle D2, E2, G11, K26, K35, K6, M37 nelle colonne rispettivamente A,B,C,D,E,F,G

                                I riferimenti alle celle sono corretti? Potresti ricontrollare perché credo che ci sia qualcosa di sbagliato. Poi un'altra cosa...potrebbe mai succedere che uno di quelli nel foglio Maschera Ricerca sia vuoto o saranno sempre tutti compilati?

                                #45724 Score: 0 | Risposta

                                Ale.1989
                                Partecipante

                                  Le celle sono corrette .. cosa c'è che non torna ? 

                                  Le celle potrebbero anche essere vuote perché alcuni clienti non mi danno tutte le specifiche

                                  #45725 Score: 0 | Risposta

                                  alexps81
                                  Moderatore
                                    58 pts

                                    Ale.1989 ha scritto:

                                    Le celle sono corrette .. cosa c'è che non torna ? 

                                    La cella K6 è vuota e comunque sembra che non faccia riferimento a nulla. Non è che per caso dovrebbe essere la K7?

                                    La cella M37 ha dentro una data e nel Foglio Neri del file Elenco-Ordini-Aperti tu vuoi che faccia riferimento alla cella in colonna G ma in colonna G non ci sono date.  Le date sono in colonna H.

                                    Poi campi in tabella da riempire dovrebbero essere 8 mentre ne hai indicati solo 7 ("A", "B", "C", "D", "E", "F", "G")...è giusto o manca la colonna "H"?

                                    #45727 Score: 0 | Risposta

                                    Ale.1989
                                    Partecipante

                                      La cella K6 la compilo manualmente quando devo creare una produzione,  quindi mi serve solo so devo premere il pulsante aggiorna rame in caso di quotazione di un codice non lo metto.

                                      Ti rimetto i riferimenti corretti

                                      celle D2,E2,G11,K26,K35,K6,K8,M37

                                      colonne A,B,C,D,E,F,G,H

                                      Probabilmente prima mi ero confuso....

                                      #45751 Score: 0 | Risposta

                                      alexps81
                                      Moderatore
                                        58 pts

                                        Una domanda...nel Foglio Neri ho visto che hai inserito una Tabella. Quella tabella ti serve ho posso eliminarla e creare un range classico? Per il lavoro da fare quella Tabella mi crea dei problemi...se la tolgo tutto fila liscio

                                        #45752 Score: 0 | Risposta

                                        Ale.1989
                                        Partecipante

                                          Io la usavo per ordinare i risultati in base alla colonna A e poi all colonna H ( in modo da avere il tipo di statore vicini per dimensione (col.a) e poi ordinati per scadenza (col h) se è un problema va benissimo anche senza tabella poi me li ordino io manualmente..... già è tanto che si possa fare quello che avevo in mente...

                                          #45753 Score: 0 | Risposta

                                          alexps81
                                          Moderatore
                                            58 pts

                                            Ahh..altra cosa...la copia dei dati deve avvenire subito dopo il lancio della Sub SOMMA?

                                            E poi deve inserire solo dati oppure deve fare ricerche per vedere se ci sono codici uguali e aggiornare quelli esistenti? Per ora quello che ho fatto è inserire i dati e basta a prescindere se ci sarebbero doppioni.

                                            #45755 Score: 0 | Risposta

                                            Ale.1989
                                            Partecipante

                                              Va benissimo così possono esserci anche doppioni perché posso dover produrre lo stesso tipo in più date e in più ordini quindi non c'è bisogno che sommi niente deve solo copiare nella prima riga vuota, la copia deve avvenire dopo la Sub somma in modo che premendo il pulsante che fa la somma faccia anche questa cosa.... 

                                              #45764 Score: 1 | Risposta

                                              alexps81
                                              Moderatore
                                                58 pts

                                                Dunque @Ale.1989 penso di aver concluso. Ci ho messo un po' per 2 motivi: il primo perché ho avuto una giornata altalenante, il secondo perché ho voluto sperimentare un metodo che non avevo mai provato (o meglio, provato solo per dei test personali ma mai per un utente) e finalmente è capitata la tua richiesta. Purtroppo non è stato molto semplice, infatti ho dovuto scomodare Vecchio Frac chiedendogli una mano.

                                                Comunque avrei potuto risolvere il tuo problema con il metodo Workbooks.Open ma per far pratica ho voluto provare il metodo ADO con stringa di connessione. Metodo molto più veloce. Ho dovuto cmq evocare il metodo Workbooks.Open per formattare le celle (bordi, allineamento e FormatNumber)

                                                Quindi ora tu devi fare così: entra nel Modulo5 e modifica la variabile

                                                'modifica il percorso
                                                s = ThisWorkbook.Path

                                                che trovi nella Private Sub ADO_Copy. In pratica devi modificare la variabile togliendo ThisWorkbook.Path e indicare il percorso dove risiede il file Elenco-Ordini-Aperti.xlsx

                                                Devi mettere il percorso senza il carattere "\" finale. Quindi qualcosa del genere:

                                                "C:\Users\alebo\Downloads" (ricordati le virgolette prima e dopo).

                                                Passiamo al file Elenco-Ordini-Aperti.xlsx...ho preferito sostituire la Tabella con un range classico. Poi per una questione estetica ho creato una Private Sub formattaCelle (ecco qui è servito il metodo Workbooks.Open) per fare in modo di sistemare ogni volta bordi, allineamenti e FormatNumber nella colonna H (Formato gg-mmm).

                                                Altra cosa...per sbaglio ho fatto un giro nel MODULO1 e ho rivisto le Sub RicercaCodiceInserisciDati

                                                in pratica c'erano vari cicli e poi tutta una serie di Range(x) = Range(y).

                                                Ho creato 2 Array (arr1 e arr2) e gli ho messo dentro tutti i riferimenti delle celle interessate. Poi con un unico ciclo le ho iterate tutte. Fai lo stesso sempre un controllo per vedere se ho sbagliato qualcosa.

                                                 

                                                Fai tutti i test necessari e fammi sapere....mi raccomando per altre richieste apri altri Thread

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

                                                Ale.1989
                                                Partecipante

                                                  Ciao Alex, ho fatto come mi hai detto, ma se provo a spinger il atto a cui è associata la macro mi esce

                                                  "errore di runtime 429

                                                  il componente attive non è in grado di creare l'oggetto.

                                                  Se premo debug mi evidenzia la riga 

                                                  Set CONN = CreateObject("ADODB.Connection")

                                                  in giallo....

                                                  #45774 Score: 0 | Risposta

                                                  Ale.1989
                                                  Partecipante

                                                    p.s. come indirizzo ho indicato 

                                                    "Users/alessio/Library/CloudStorage/GoogleDrive-garuttialessio@gmail.com/Il mio Drive/A.M.G. S.r.l.s./Produzione *GD*"

                                                    in quanto il file era li, ho pensato potesse essere un problema e ho spostato il file non sul cloud ma su hd esterno, ma esce lo stesso errore, evidentemente con Mac c'è qualche problema in più.....

                                                     

                                                    #45777 Score: 0 | Risposta

                                                    vecchio frac
                                                    Senior Moderator
                                                      272 pts

                                                      Ale.1989 ha scritto:

                                                      evidentemente con Mac c'è qualche problema in più

                                                      Mac? Eh gia', ADODB non e' supportato ma ODBC potrebbe funzionare, scaricando il driver apposito.

                                                      Per non complicarvi la vita inutilmente consiglio di abbandonare la bella soluzione con ADO e di affidarsi al vecchio metodo di aprire il file destinazione, riversarvi i dati, formattare le celle e chiudere dopo aver salvato.

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 51 a 75 (di 90 totali)
                                                    Rispondi a: Popolamento Database tramite codice
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: