[Risolto] Copia senza creare il foglio di lavoro "Temp"
[Risolto] Copia senza creare il foglio di lavoro "Temp"
Saluti ,
Ho una macro che copia dal Foglio 1 i valori filtrati che contengono "x" nella colonna "B", quindi incolliamo in sequenza nel Foglio 2, questo processo funziona già molto bene .
ma perché ciò accada è necessario creare un foglio di lavoro temporaneo chiamato "Temp", questo può essere visto nel file allegato .
poi è nata una nuova conoscenza in cui è possibile copiare i valori filtrati e non è più necessario creare un foglio di lavoro temporaneo "Temp", questa nuova conoscenza è stata presentata dal sr. OOotremer971
ma non sono in grado di adattare questa nuova conoscenza nella macro del file allegato, cioè, non è più necessario creare un foglio di lavoro temporaneo "Temp" .
mi può aiutare ad adattare questa nuova conoscenza nel file macro allegato .
abbracci amici .
Ho una macro che copia dal Foglio 1 i valori filtrati che contengono "x" nella colonna "B", quindi incolliamo in sequenza nel Foglio 2, questo processo funziona già molto bene .
ma perché ciò accada è necessario creare un foglio di lavoro temporaneo chiamato "Temp", questo può essere visto nel file allegato .
poi è nata una nuova conoscenza in cui è possibile copiare i valori filtrati e non è più necessario creare un foglio di lavoro temporaneo "Temp", questa nuova conoscenza è stata presentata dal sr. OOotremer971
ma non sono in grado di adattare questa nuova conoscenza nella macro del file allegato, cioè, non è più necessario creare un foglio di lavoro temporaneo "Temp" .
mi può aiutare ad adattare questa nuova conoscenza nel file macro allegato .
abbracci amici .
- Allegati
-
- copia le linee visibili con X.ods
- (23.27 KiB) Scaricato 123 volte
Ultima modifica di chimico il venerdì 1 febbraio 2019, 20:57, modificato 2 volte in totale.
LibreOffice 5.4.4.2 no Windows 7
Re: Copia senza creare il foglio di lavoro "Temp"
La macro di OOotremer971 copia il range dal foglio1 a foglio temp ed elimina da temp le righe che sono invisibili nel foglio 1, quindi non puoi eliminare la creazione del foglio temp. Il metodo che ti avevo indicato nella discussione precedente fa tutto questo in memoria e quindi non ha bisogno di creare un foglio di appoggio, ovviamente la macro è più lunga e complessa di quella di OOotremer971 e meno facile da capire
-------------------
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
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
Re: Copia senza creare il foglio di lavoro "Temp"
saluti sr. patel ,
Ho provato ad usare la tua macro , ma mi sono fermato nell'ERRORE che si è verificato inizialmente, ovvero, si è verificato un ERRORE nel comando qui sotto :
osservazione:
1) deve avere un criterio, cioè deve copiare le righe visibili contenenti "x" nella colonna "B" .
2) è necessario copiare tutte le colonne nel database, qui in questo esempio è dalla colonna "A" alla colonna "C", ma potrebbero esserci più colonne in futuro .
segue il file allegato con la tua macro .
Grazie in anticipo per il vostro aiuto .
Ho provato ad usare la tua macro , ma mi sono fermato nell'ERRORE che si è verificato inizialmente, ovvero, si è verificato un ERRORE nel comando qui sotto :
Codice: Seleziona tutto
oCursor = Sheet1.createcursor
1) deve avere un criterio, cioè deve copiare le righe visibili contenenti "x" nella colonna "B" .
2) è necessario copiare tutte le colonne nel database, qui in questo esempio è dalla colonna "A" alla colonna "C", ma potrebbero esserci più colonne in futuro .
segue il file allegato con la tua macro .
Grazie in anticipo per il vostro aiuto .
- Allegati
-
- copia le linee visibili con X (2).ods
- (25.41 KiB) Scaricato 134 volte
LibreOffice 5.4.4.2 no Windows 7
Re: Copia senza creare il foglio di lavoro "Temp"
l'errore dipende dal fatto che usi come variabile Sheet1, 2 ... , Sheet1 è una Reserved Word, non può essere usata come variabile, meglio usare Sh1 oppure oSheet1
-------------------
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
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
Re: Copia senza creare il foglio di lavoro "Temp"
prova questa macro
Comunque io non scarterei la soluzione con foglio Temp, è più facile da gestire
Codice: Seleziona tutto
sub CopyVisiblex
oDoc = ThisComponent
sh= oDoc.sheets(0)
sh1= oDoc.sheets(1)
rng= getUsedRange(sh)
oRanges = rng.queryVisibleCells()
oCell = sh1.getcellrangebyName("A1") ' destinazione
call copyVisibleRows(oDoc, oRanges, oCell,LastRow)
sh1.Columns.OptimalWidth = True
FOR r = LastRow to 1 STEP -1
IF Sh1.getCellByPosition(1, r).String <> "x" THEN
Sh1.Rows.removeByIndex(r, 1)
end if
NEXT
end sub
Sub copyVisibleRows(oDoc,oRanges,oTopLeft,LastRow)
Dim oTargetSheet, oEnum, aTgt, oTgtRg, oNext, aNext, aPrev, iRow&, bCalc As Boolean
Dim oResult as New com.sun.star.table.CellRangeAddress
bCalc = oDoc.isAutomaticCalculationEnabled()
oDoc.enableAutomaticCalculation(False)
aTgt = oTopLeft.getCellAddress()
iRow = aTgt.Row
oTargetSheet = oDoc.getSheets.getByIndex(aTgt.Sheet)
oResult.Sheet = aTgt.Sheet
oResult.StartColumn = aTgt.Column
oResult.StartRow = aTgt.Row
oEnum = oRanges.createEnumeration()
while oEnum.hasMoreElements()
oNext = oEnum.nextElement()
aNext = oNext.getRangeAddress()
if not isUnoStruct(aPrev) then aPrev = aNext
If aNext.StartColumn > aPrev.StartColumn then
aTgt.Column = aTgt.Column + aPrev.EndColumn - aPrev.StartColumn +1
aTgt.Row = iRow
elseIf aNext.StartRow > aPrev.StartRow then
aTgt.Row = aTgt.Row + aPrev.EndRow - aPrev.StartRow +1
endif
oTgtRg = oTargetSheet.getCellRangeByPosition( _
aTgt.Column, aTgt.Row, _
aTgt.Column + aNext.EndColumn - aNext.StartColumn, _
aTgt.Row + aNext.EndRow - aNext.StartRow)
oTgtRg.setDataArray(oNext.getDataArray())
aPrev = aNext
LastRow=aTgt.Row
wend
oDoc.enableAutomaticCalculation(bCalc)
End sub
Function getUsedRange(oSheet)
Dim oRg
oRg = oSheet.createCursor()
oRg.gotoStartOfUsedArea(False)
oRg.gotoEndOfUsedArea(True)
getUsedRange = oRg
End Function
-------------------
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
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
Re: Copia senza creare il foglio di lavoro "Temp"
sr. patel ,
è quasi perfetto , ha solo bisogno di adattare la macro per incollare i valori futuri, cioè, avrà nuovi valori da incollare in futuro , quindi è necessario incollarne uno al di sotto dell'altro in sequenza .
seguire l'allegato , vedere i commenti che ho inserito nel foglio di lavoro 2 (Plan2) , è un modello del risultato desiderato .
amico abbraccio .
è quasi perfetto , ha solo bisogno di adattare la macro per incollare i valori futuri, cioè, avrà nuovi valori da incollare in futuro , quindi è necessario incollarne uno al di sotto dell'altro in sequenza .

seguire l'allegato , vedere i commenti che ho inserito nel foglio di lavoro 2 (Plan2) , è un modello del risultato desiderato .
amico abbraccio .
- Allegati
-
- copia le linee visibili con x (3).ods
- (25.62 KiB) Scaricato 135 volte
LibreOffice 5.4.4.2 no Windows 7
Re: Copia senza creare il foglio di lavoro "Temp"
Non ho capito quale dovrebbe essere il risultato desiderato, allega un file più complesso
Perché non vuoi copiare i titoli ? cosa sono i valori futuri ?
Perché non vuoi copiare i titoli ? cosa sono i valori futuri ?
-------------------
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
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
Re: Copia senza creare il foglio di lavoro "Temp"
Voglio già ringraziarti per la tua dedizione e il tuo aiuto, le tue risposte mi hanno sempre aiutato molto, grazie, amico mio .
il risultato desiderato è come una scala, cioè, si incolla in sequenza uno dopo l'altro, come nel modello del foglio di lavoro 2 (Plan2) che ho precedentemente allegato .
questo processo servirà per salvare una cronologia dei filtri, se annulli il filtro noterai che ci sono altri valori diversi, quindi ci sono giorni che avranno valori diversi, cioè il criterio "x" potrebbe cambiare posizione nella colonna "B" .
ho dei nuovi valori da copiare, quindi voglio salvare una cronologia, anche se non è chiedere troppo, sarebbe bello apparire automaticamente nella colonna "D" del foglio di lavoro 2 (Plan2) la data attuale del trasferimento, questo aiuterà anche molto nella costruzione della storia, cioè avrò una cronologia completa che indica la data del giorno in cui è stato effettuato il trasferimento per ogni valore copiato .
È possibile quando si incollano i valori, anche inserire la data corrente nella colonna "D" per ogni valore copiato ?
per Titoli, è già nella posizione in Plan2, non è necessario copiare nuovamente .
abbraccio .

il risultato desiderato è come una scala, cioè, si incolla in sequenza uno dopo l'altro, come nel modello del foglio di lavoro 2 (Plan2) che ho precedentemente allegato .
questo processo servirà per salvare una cronologia dei filtri, se annulli il filtro noterai che ci sono altri valori diversi, quindi ci sono giorni che avranno valori diversi, cioè il criterio "x" potrebbe cambiare posizione nella colonna "B" .
ho dei nuovi valori da copiare, quindi voglio salvare una cronologia, anche se non è chiedere troppo, sarebbe bello apparire automaticamente nella colonna "D" del foglio di lavoro 2 (Plan2) la data attuale del trasferimento, questo aiuterà anche molto nella costruzione della storia, cioè avrò una cronologia completa che indica la data del giorno in cui è stato effettuato il trasferimento per ogni valore copiato .
È possibile quando si incollano i valori, anche inserire la data corrente nella colonna "D" per ogni valore copiato ?
per Titoli, è già nella posizione in Plan2, non è necessario copiare nuovamente .
abbraccio .
LibreOffice 5.4.4.2 no Windows 7
Re: Copia senza creare il foglio di lavoro "Temp"
In un post precedente hai detto:chimico ha scritto: ho dei nuovi valori da copiare, quindi voglio salvare una cronologia, anche se non è chiedere troppo, sarebbe bello apparire automaticamente nella colonna "D" del foglio di lavoro 2 (Plan2) la data attuale del trasferimento.
ora vuoi mettere la data in colonna D, non puoi cambiare continuamente le carte in tavolachimico ha scritto: 2) è necessario copiare tutte le colonne nel database, qui in questo esempio è dalla colonna "A" alla colonna "C", ma potrebbero esserci più colonne in futuro .
-------------------
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
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
Re: Copia senza creare il foglio di lavoro "Temp"
sr. patel ,
perdonami, avevo dimenticato questo importante dettaglio,
.... buona cosa mi hai ricordato, grazie
è possibile identificare l'ultima colonna con i valori nel database del foglio di lavoro 1 (Plan1) e quindi inserire la data corrente nella colonna successiva (+1) ? ovvero , se la dimensione del database contiene 5 colonne, la data aggiornata verrà inserita nella colonna "F" del foglio di lavoro 2 (Plan2) , È possibile ?
Grazie e scusa per il mio fallimento ?
abbraccio .
perdonami, avevo dimenticato questo importante dettaglio,

è possibile identificare l'ultima colonna con i valori nel database del foglio di lavoro 1 (Plan1) e quindi inserire la data corrente nella colonna successiva (+1) ? ovvero , se la dimensione del database contiene 5 colonne, la data aggiornata verrà inserita nella colonna "F" del foglio di lavoro 2 (Plan2) , È possibile ?
Grazie e scusa per il mio fallimento ?

abbraccio .
LibreOffice 5.4.4.2 no Windows 7
Re: Copia senza creare il foglio di lavoro "Temp"
ho evidenziato le righe aggiunte o modificate con ' <<<<
Codice: Seleziona tutto
sub CopyVisiblex
oDoc = ThisComponent
sh= oDoc.sheets(0)
sh1= oDoc.sheets(1)
rng= getUsedRange(sh)
rng1= getUsedRange(sh1) ' <<<<
LastRow1 = rng1.RangeAddress.EndRow ' <<<<
Lastcol = rng.RangeAddress.EndColumn ' <<<<
oRanges = rng.queryVisibleCells()
oCell = sh1.getcellByPosition(0,LastRow1+1) ' <<<<
call copyVisibleRows(oDoc, oRanges, oCell,LastRow)
sh1.Columns.OptimalWidth = True
FOR r = LastRow to LastRow1+1 STEP -1 ' <<<<
IF Sh1.getCellByPosition(1, r).String <> "x" THEN
Sh1.Rows.removeByIndex(r, 1)
else ' <<<<
sh1.getcellByPosition(Lastcol+1,r).String = Date ' <<<<
end if
NEXT
end sub
Sub copyVisibleRows(oDoc,oRanges,oTopLeft,LastRow)
Dim oTargetSheet, oEnum, aTgt, oTgtRg, oNext, aNext, aPrev, iRow&, bCalc As Boolean
Dim oResult as New com.sun.star.table.CellRangeAddress
bCalc = oDoc.isAutomaticCalculationEnabled()
oDoc.enableAutomaticCalculation(False)
aTgt = oTopLeft.getCellAddress()
iRow = aTgt.Row
oTargetSheet = oDoc.getSheets.getByIndex(aTgt.Sheet)
oResult.Sheet = aTgt.Sheet
oResult.StartColumn = aTgt.Column
oResult.StartRow = aTgt.Row
oEnum = oRanges.createEnumeration()
while oEnum.hasMoreElements()
oNext = oEnum.nextElement()
aNext = oNext.getRangeAddress()
if not isUnoStruct(aPrev) then aPrev = aNext
If aNext.StartColumn > aPrev.StartColumn then
aTgt.Column = aTgt.Column + aPrev.EndColumn - aPrev.StartColumn +1
aTgt.Row = iRow
elseIf aNext.StartRow > aPrev.StartRow then
aTgt.Row = aTgt.Row + aPrev.EndRow - aPrev.StartRow +1
endif
oTgtRg = oTargetSheet.getCellRangeByPosition( _
aTgt.Column, aTgt.Row, _
aTgt.Column + aNext.EndColumn - aNext.StartColumn, _
aTgt.Row + aNext.EndRow - aNext.StartRow)
oTgtRg.setDataArray(oNext.getDataArray())
aPrev = aNext
LastRow=aTgt.Row
wend
oDoc.enableAutomaticCalculation(bCalc)
End sub
Function getUsedRange(oSheet)
Dim oRg
oRg = oSheet.createCursor()
oRg.gotoStartOfUsedArea(False)
oRg.gotoEndOfUsedArea(True)
getUsedRange = oRg
End Function
-------------------
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
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
Re: Copia senza creare il foglio di lavoro "Temp"
[RISOLTO]
Sta funzionando molto bene , è stato perfetto .
questo è quello che stavo cercando .
Congratulazioni per la tua conoscenza .
Un grande abbraccio amico .
Sta funzionando molto bene , è stato perfetto .

questo è quello che stavo cercando .

Congratulazioni per la tua conoscenza .



Un grande abbraccio amico .

LibreOffice 5.4.4.2 no Windows 7