› Sviluppare funzionalita su Microsoft Office con VBA › Popolamento Database tramite codice
-
AutoreArticoli
-
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.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 Sub3) 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.
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.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").Copyda 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:=52Con FileFormat:=52 andiamo a specificare che è un File per MAC con estensione xlsx
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....
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?
Qui che gente che mi fuma
Occhio che si puo' fraintendere
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...
Ciao alex scusa la domanda, ma quindi se provo ad aprire il file con Windows potrei avere dei problemi ?
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.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?
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 )
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?
Le celle sono corrette .. cosa c'è che non torna ?
Le celle potrebbero anche essere vuote perché alcuni clienti non mi danno tutte le specifiche
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"?
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....
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
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...
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.
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....
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.Pathche 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 RicercaCodice e InserisciDati
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.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....
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ù.....
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.
-
AutoreArticoli
