Grazie Gaetano hai ragione! ero stato io un tattarillo, non avevo adattato la macro correttamente...
Tra l'altro avevo bisogno che mi copiasse e incollasse i valori, le date e la formattazione delle celle di partenza, ho sostituito il codice precedente con quest'altro, funziona ma sicuramente sarebbe da ripulire perchè ho scopiazzato righe in qua e la fino a che non ho trovato la quadra...
Codice: Seleziona tutto
Sub AccodaDatiInFileEsterno
Dim Args(0) As New com.sun.star.beans.PropertyValue
Args(0).Name = "MacroExecutionMode"
Args(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
Dim DocUlr as string, dummy()
oDispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
Doc = ThisComponent
oFrame1=Doc.CurrentController.Frame
Sheet = Doc.currentcontroller.getActiveSheet()
Range = Sheet.getCellRangeByName("N40:Q130")
Doc.CurrentController.Select(Range)
oDispatcher.executeDispatch(oFrame1,".uno:Copy","",0,Array())
DocUrl = ConvertToURL(Archivio)
oFrame1=Doc.CurrentController.Frame
Archivio = StarDesktop.loadComponentFromURL("file:///home/valerio/Desktop/GIORNALIERI/PRODUZIONI/BIOLOGICO.ods","_dEF", 0,dummy())
FoglioDestinazione = Archivio.Sheets(0)
Riga = 0
Do while Archivio.Sheets(0).GetCellByposition(0,Riga).String <> ""
Riga = Riga + 1
Loop
Riga = Riga + 1
dRange = FoglioDestinazione.getCellRangeByName("A" & Riga & ":D" & Riga+90) ' range destinazione (PrimaRigaLibera)
Archivio.CurrentController.Select(dRange)
oFrame2=Archivio.CurrentController.Frame
Dim args1(5)as new com.sun.star.beans.PropertyValue
args1(0).Name="Flags"
args1(0).Value="SVDNT"
args1(1).Name="FormulaCommand"
args1(1).Value=0
args1(2).Name="SkipEmptyCells"
args1(2).Value=false
args1(3).Name="Transpose"
args1(3).Value=false
args1(4).Name="AsLink"
args1(4).Value=false
args1(5).Name="MoveMode"
args1(5).Value=4
oDispatcher.executeDispatch(oFrame2,".uno:InsertContents","",0,args1())
Archivio.store
Archivio.Close(ture)
End Sub
Ora il probelma è che nel file di destinazione dovrò copiarci i dati più volte e vorrei che me li incollasse sempre nella prima riga disponibile (in realtà preferirei mantenere una cella vuota tra ogni record ma a questo ci pensiamo dopo), solo che nel range che copio ho alcune celle unite in verticale e le celle unite me le considera come vuote, quindi mi incolla il secondo record a metà del primo. Una possibile soluzione che mi era venuta in mente é modificare la macro che scriva uno spazio o un punto nelle celle vuote prima di copiare o una volta incollate. Esiste un altro metodo? Avete consigli?
EDIT:
Non ne vengo a capo ma mi sono accorto che semplificherei molto le cose se potessi incollare invece che nell'ultima riga disponibile, nell'ultima colonna. In quel caso non avrei celle unite in orizzontale e avrei anche un archivio piu leggibile, solo che non riesco ad adattare questo
Codice: Seleziona tutto
Riga = 0
Do while Archivio.Sheets(0).GetCellByposition(0,Riga).String <> ""
Riga = Riga + 1
Loop
Riga = Riga + 1
dRange = FoglioDestinazione.getCellRangeByName("A" & Riga & ":D" & Riga+90) ' range destinazione (PrimaRigaLibera)
Alle colonne. O meglio, farei cosi
Codice: Seleziona tutto
Colonna = 0
Do while Archivio.Sheets(0).GetCellByposition(Colonna,0).String <> ""
Colonna = Colonna + 1
Loop
Colonna = Colonna + 1
dRange = FoglioDestinazione.getCellRangeByposition(Colonna,2,Colonna+3,92)
ma il primo record me lo mette nella colonna C anziché A....ed il secondo non lo incolla proprio...non capisco perchè