[Risolto] Copia tra due file di calc con macro

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Ant52
Messaggi: 180
Iscritto il: sabato 18 agosto 2018, 15:38

[Risolto] Copia tra due file di calc con macro

Messaggio da Ant52 »

Buongiorno,
qualche tempo fa ero riuscito, grazie alla vostra preziosa collaborazione, a far funzionare questa macro che copia i dati da un determinato range di un file di calc e li trasferisce in un altro chiamato "Archivio" accodando i dati nella prima riga vuota.. Questa è la macro che mi funziona perfettamente:

Codice: Seleziona tutto

REM  *****  BASIC  *****

Rem Attribute VBA_ModuleType=VBADocumentModu

Sub AccodaDatiInFileEsterno

Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Sheet = Doc.Sheets(10) ' 11° foglio del file contenete la macro
Range = Sheet.getCellRangeByName("A7:J7").getDataArray ' range da copiare
sFileName ="C:\Users\NomeUtente\Desktop\Archivio.ods"  ' file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Dummy() )
Archivio = DocName.Sheets(0) 

Archivio.unprotect("PIPPO") 

Cursore = Archivio.createCursor
Cursore.gotoEndOfUsedArea(false)
UltimaRiga = Cursore.RangeAddress.EndRow
Riga = UltimaRiga + 2

dRange  = Archivio.getCellRangeByName("A" & Riga & ":J" & Riga) ' range destinazione (PrimaRigaLibera)
dRange.setDataArray(Range)
Archivio.protect("PIPPO") ' Inserisce password PIPPO di protezione foglio
DocName.store
DocName.Close(true)

End Sub
Avendo l'esigenza di fare lo stesso lavoro con altri due file di calc ho pensato bene, ingenuamente, che bastasse copiare la macro di cui sopra, modificare i riferimenti e tutto sarebbe andato bene. Viceversa la stessa macro, con i riferimenti modificati mi da "errore di runtime BASIC - Variabile dell'oggetto non impostata" alla riga:Scadenzario = DocName.Sheets(0) . Questa è la macro che ho modificato e mi piacerebbe capire perchè mi dà la segnalazione di errore pur essendo uguale alla prima:

Codice: Seleziona tutto

REM  *****  BASIC  *****

Rem Attribute VBA_ModuleType=VBADocumentModu

Sub AccodaDatiInFileEsterno

Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Sheet = Doc.Sheets(5) ' 6° foglio del file contenete la macro
Range = Sheet.getCellRangeByName("A17:I17").getDataArray ' range da copiare
sFileName ="C:\Users\NomeUtente\Desktop\Scadenzario.ods"  ' file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Dummy() )
Scadenzario = DocName.Sheets(0) 

Scadenzario.unprotect("PIPPO") 

Cursore = Scadenzario.createCursor
Cursore.gotoEndOfUsedArea(false)
UltimaRiga = Cursore.RangeAddress.EndRow
Riga = UltimaRiga + 2

dRange  = Scadenzario.getCellRangeByName("A" & Riga & ":I" & Riga) ' range destinazione (PrimaRigaLibera)
dRange.setDataArray(Range)
Scadenzario.protect("PIPPO") ' Inserisce password PIPPO di protezione foglio
DocName.store
DocName.Close(true)

End Sub
Spero di essere stato chiaro anche se non ho allegato i files in questione. Se fosse indispensabile per capire da dove proviene l'errore, fatemelo sapere. Attendo fiducioso nella vostra estrema cortesia e preparazione in materia. Grazie.Buona giornata.
Ultima modifica di Ant52 il mercoledì 22 luglio 2020, 9:32, modificato 1 volta in totale.
OpenOffice 4.1.5 Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 9073
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Copia tra due file di calc con macro

Messaggio da charlie »

Ciao, per favore usa la formattazione del codice nei tui post. Per stavolta ci ho pensato io.
charlie
macOS 15.5 Sequoia: Open Office 4.1.16 - LibreOffice 25.8
http://www.charlieopenoffice.altervista.org
Ant52
Messaggi: 180
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Copia tra due file di calc con macro

Messaggio da Ant52 »

Messaggio per Charlie: Grazie per la interessantissima guida però non sono riuscito a capire come (e dove) devo impostare la variabile dell'oggetto dal momento che la prima macro funziona perfettamente e la variabile dell'oggetto "Archivio" non è definita da nessuna parte. Se puoi spiegarmi in termini più semplici te ne sarei molto grato. Grazie mille.
OpenOffice 4.1.5 Windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 9073
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Copia tra due file di calc con macro

Messaggio da charlie »

Non colgo il senso, non ti ho dato nessun suggerimento. Ti ho solo invitato ad usare una funzione del forum per visualizzare meglio il codice postato.
charlie
macOS 15.5 Sequoia: Open Office 4.1.16 - LibreOffice 25.8
http://www.charlieopenoffice.altervista.org
Ant52
Messaggi: 180
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Copia tra due file di calc con macro

Messaggio da Ant52 »

C'è stata sicuramente una incomprensione da parte mia però nel messaggio c'era scritto che per questa volta ci avevi pensato tu, quindi non ho capito che la risposta si riferiva alla formattazione del codice. Per quanto riguarda il mio quesito invece cosa mi puoi suggerire? Grazie.
OpenOffice 4.1.5 Windows 10
Avatar utente
lucky63
Volontario molto attivo
Volontario molto attivo
Messaggi: 3105
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Copia tra due file di calc con macro

Messaggio da lucky63 »

Su computer con sistema operativo linux.
Utilizzato “_Default” invece di “_blank”.
Nelle macro ho modificato il percorso (in formato linux).
Funzionano regolarmente. Test con:
LibreOffice 6.3.6 Ok
OpenOffice 4.1.7 Ok
Se hai ancora problemi prova a resettare il profilo utente.

Ti allego i file utilizzati.
.
Allegati
Test - AccodaDatiInFileEsterni.ods
(13.89 KiB) Scaricato 169 volte
Archivio.ods
(11.8 KiB) Scaricato 169 volte
Scadenziario.ods
(11.18 KiB) Scaricato 170 volte
Ant52
Messaggi: 180
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Copia tra due file di calc con macro

Messaggio da Ant52 »

Ho fatto le modifiche suggerite e adesso, non ho ancora capito perchè, funziona ma con un difetto. Nel senso che apre il file "Scadenzario" , copia tutta la riga A17:I17 ma non la incolonna nella prima riga vuota. La trovo incolonnata sotto l'ultima riga della griglia. Se invece cancello tutta la griglia che separa le colonne e le righe la mette al posto giusto cioè nella prima riga vuota. Mi piacerebbe capirci qualcosa in quanto la stessa identica macro, in un altro file, mi funziona perfettamente ed accoda i dati correttamente nella prima riga vuota. Stavolta allego i file di esempio per facilitare la comprensione del problema.Grazie mille per l'aiuto.
Allegati
Scadenzario.ods
File in cui si archiviano i dati per scadenza
(9.96 KiB) Scaricato 148 volte
File da copiare.ods
File in cui si raccolgono i dati
(16.21 KiB) Scaricato 164 volte
OpenOffice 4.1.5 Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Copia tra due file di calc con macro

Messaggio da patel »

il metodo che hai usato per trovare l'ultima riga funziona soltanto in assenza di bordi, prova questa

Codice: Seleziona tutto

Sub Ultima__riga 
  Sh = ThisComponent.Sheets(0)
  RangeVuoto = Sh.Columns(2).queryEmptyCells ' colonna C
  RangeVuoto = RangeVuoto(RangeVuoto.Count - 1)
  Riga = RangeVuoto(0).RangeAddress.StartRow 
  print Riga
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
lucky63
Volontario molto attivo
Volontario molto attivo
Messaggi: 3105
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Copia tra due file di calc con macro

Messaggio da lucky63 »

Ant52 ha scritto:La trovo incolonnata sotto l'ultima riga della griglia. Se invece cancello tutta la griglia che separa le colonne e le righe la mette al posto giusto cioè nella prima riga vuota.
Sostituisci:

Codice: Seleziona tutto

Cursore = Scadenzario.createCursor
Cursore.gotoEndOfUsedArea(false)
UltimaRiga = Cursore.RangeAddress.EndRow
Riga = UltimaRiga + 2
Con:

Codice: Seleziona tutto

Rem Trova prima riga vuota in colonna A
Riga = 0
Do while  DocName.Sheets(0).GetCellByposition(0,Riga).String <> ""
Riga = Riga + 1
Loop
Riga = Riga + 1
... e accoda regolarmente anche con la griglia nella prima riga libera (riferita a colonna A) ...
.
Ant52
Messaggi: 180
Iscritto il: sabato 18 agosto 2018, 15:38

[Risolto] Copia tra due file di calc con macro

Messaggio da Ant52 »

Mi sembra che con questa modifica funzioni correttamente. Ho solo sostituito a Riga = 0 con Riga = 7 in quanto la mia griglia inizia dalla riga 8 ed incolonna perfettamente i dati. Mi resta solo una curiosità: perchè la macro che avevo per fare lo stesso lavoro con altri due file mi funziona bene senza ricorrere a tutto questo? Dove sta la diversità? Sarei proprio curioso di saperlo. Grazie mille per l'aiuto determinante.
OpenOffice 4.1.5 Windows 10
Avatar utente
lucky63
Volontario molto attivo
Volontario molto attivo
Messaggi: 3105
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Copia tra due file di calc con macro

Messaggio da lucky63 »

Il file che avevo allegato precedentemente lo avevo testato con "Scadenziario" senza tabella bordata e come dicevo era ok.
Ho riprovato adesso con tabella bordata (in scadenziario) e:
Con OpenOffice 4.1.7 è Ok. Accoda regolarmente nella prima riga libera nella tabella bordata.
Con LibreOffice 6.3.6 mi ha dato lo stesso problema che segnalavi (accodamento in prima riga libera dopo tabella bordata).
Cancellata tale riga.
Resettato il profilo utente di LibreOffice 6.3.6 e con nuovo test ora accoda regolarmente nella prima riga libera nella tabella bordata anche con LibreOffice.
Ant52 ha scritto:Mi resta solo una curiosità: perchè la macro che avevo per fare lo stesso lavoro con altri due file mi funziona bene senza ricorrere a tutto questo? Dove sta la diversità? Sarei proprio curioso di saperlo.
Per il mio esempio di prima, per come adattate nel percorso, ..., le macro sono entrambe corrette e funzionanti.
Non saprei cosa altro dirti.
Ant52
Messaggi: 180
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Copia tra due file di calc con macro

Messaggio da Ant52 »

Grazie per l'ulteriore spiegazione. Forse è proprio il reset del profilo utente che avrebbe risolto il problema senza modificare la macro vecchia. Ancora grazie per il prezioso aiuto. Buona giornata.
OpenOffice 4.1.5 Windows 10
Avatar utente
lucky63
Volontario molto attivo
Volontario molto attivo
Messaggi: 3105
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Copia tra due file di calc con macro

Messaggio da lucky63 »

.
Correggi l'inserimento del [Risolto].
Va inserito davanti al quesito di apertura (iniziale) altrimenti poi non si vede nel riepilogo degli argomenti.

Vedi questo link.
.
Rispondi