[Risolto] Cancellare records con campo di valore diverso da

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

[Risolto] Cancellare records con campo di valore diverso da

Messaggio da cater58 »

Ringrazio ancora TUTTI VOI.
(QUASI) ULTIMA FASE...
qui non ho idea di cosa fare ... dopo applicata la macro di lucky63 , Devo selezionare tutti i record il cui campo price sia diverso da un valore (ora ad esempio facciamo 9.9 - poi cambiero' io il valore a seconda delle necessità) , e cancellarli dal file.
Quindi di fatto mi devono rimanere solo i records con il campo price = 9.9
Importante è che da tale selezione sia esclusa la prima riga, quella che contiene release id - media condition - price ecc ecc
allegata ancora la macro di lucky63, che va perfettamente.
Ringrazio ancora chi mi aiuta, con le vostre macro sto capendo pian piano diverse istruzioni ... ma ancora sono un newbie pieno.
Grazie in anticipo
Gianni
Allegati
corto_ConNuovaMacro.ods
(16.57 KiB) Scaricato 99 volte
Ultima modifica di cater58 il mercoledì 20 settembre 2017, 22:44, modificato 1 volta in totale.
Libreoffice 2.2.3 con MacOS 10.4
Avatar utente
lucky63
Volontario molto attivo
Volontario molto attivo
Messaggi: 3094
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Cancellare records con campo di valore diverso da

Messaggio da lucky63 »

Fai test
corto_ConMacroRiduzioneTabellaDati_e_CancellazioneRecordPrice.png
Come da immagine soprastante.
Cliccando su pulsante arancione si avvia la macro che completa tutta la procedura.
Attenzione che quando viene richiesto l'inserimento "Price" deve essere effettuato utilizzando come separatore decimale il TASTO "PUNTO" della tastiera (NON quello del tastierino numerico).

[EDIT:]
A seguito riscontro errore ho ricaricato il file .ods
Allegati
corto_ConMacroRiduzioneTabellaDati_e_CancellazioneRecordPrice.ods
(17.1 KiB) Scaricato 98 volte
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: Cancellare records con campo di valore diverso da

Messaggio da cater58 »

SICCOME NON SONO AVVEZZO A FAR FARE TUTTO E VOGLIO IMPARARE,
dopo la macro di lucky63 , che funziona egregiamente, vorrei cambiare in tutti i records (escluso il primo di intestazione) in valore del campo price (che ormai è tutto a 4.9) in "1.0"
ho aggiunto il ciclo for next che vedete in fondo al codice (SUB INSERISCI1)
perche non funziona ????
btw... non serve credo aprire un nuovo thread
grazie
gianni


Codice: Seleziona tutto

Sub LaMacroCheMiServe
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

REM ----- Rimozione delle colonne che inizialmente non servono -----
Sh1.Columns.removeByIndex(0, 6)
Sh1.Columns.removeByIndex(1, 1)
Sh1.Columns.removeByIndex(2, 1)
Sh1.Columns.removeByIndex(6, 4)

REM ----- Inserisci una colonna dopo la colonna "Media" (Quella che diventerà la nuova colonna "Comment") -----
Sh1.Columns.InsertByIndex(4, 1)
REM ----- Copia Intestazione da vecchia a nuova colona "Comment" ----
Sh1.getCellByPosition(4, 0).string = Sh1.getCellByPosition(2, 0).string

REM ----- Inizio Loop -----------
For Riga = 1 to UltimaRiga
REM ----- Il dato della Colonna C "Comments" Iniziale viene scritto nella Colonna "Location" (Ora colonna H) -----
Sh1.getCellByPosition(7, Riga).string = Sh1.getCellByPosition(2, Riga).string
REM ----- Nella nuova colonna "Comments" viene inserita la parola "PROVA" -----
Sh1.getCellByPosition(4, Riga).string = "PLEASE, TRY TO ORDER 4 RECORDS OR MORE, OR SHIPPING COSTS WILL BE TOO EXPENSIVE FOR YOU - REMEMBER THAT WE SHIP ONLY REGISTERED!"
Next Riga

REM ----- A trasferimento dati avvenuto Rimuovi la colonna "Comment" iniziale -----
Sh1.Columns.removeByIndex(2, 1)

REM ----- Richiama e manda in esecuzione altra macro esterna ----
CALL CancellazioneRecordPrice
CALL INSERISCI1
End Sub

Sub CancellazioneRecordPrice
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

Rem ----- Richiesta inserimento del 'PRICE' di cui vuoi conservare i record.
RecordConPriceDaConservare = InputBox ("- Inserire il 'PRICE' di cui si vogliono conservare i record;" & CHR$(10) & "- Come separatore decimale utilizzare il PUNTO della tastiera (NON quello del Tastierino)." , "ATTENZIONE:  GESTIONE RECORD PRICE")
Rem ----- In caso annullamento dell'inserimento esci dalla procedura ------
If RecordConPriceDaConservare ="" Then Exit Sub
Rem ----- Richiesta conferma di procedere ----- In caso contrario esci dalla procedura -----
If Msgbox ("- Tutti i record con 'PRICE' diverso da  " & RecordConPriceDaConservare & "  saranno cancellati" & CHR$(10) & "- Confermare con il tasto INVIO o il pulsante OK", 33, "ATTENZIONE:  CANCELLAZIONE DATI") = 2 Then Exit Sub
Rem ----- Avvio loop per la cancellazione dei record previsti -----
For Riga = UltimaRiga To 1 Step -1
	If Sh1.getCellByPosition(1, Riga).string <> RecordConPriceDaConservare then
	Sh1.Rows.removeByIndex(Riga, 1)
	End If	
Next
End sub

Sub INSERISCI1

For Riga = 1 to UltimaRiga
Sh1.getCellByPosition(2, Riga).string = "1.0"
Next

End sub
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: Cancellare records con campo di valore diverso da

Messaggio da cater58 »

Ho capito di aver messo male la sub INSERISCI1...
ora funziona, pero' mi mette il valore 1.0 anche nei records precedentemente cancellati, come se ancora esistessero...
allegato il file con la modifica...
sapete dirmi qualcosa?

Codice: Seleziona tutto

Sub LaMacroCheMiServe

doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

REM ----- Rimozione delle colonne che inizialmente non servono -----
Sh1.Columns.removeByIndex(0, 6)
Sh1.Columns.removeByIndex(1, 1)
Sh1.Columns.removeByIndex(2, 1)
Sh1.Columns.removeByIndex(6, 4)

REM ----- Inserisci una colonna dopo la colonna "Media" (Quella che diventerà la nuova colonna "Comment") -----
Sh1.Columns.InsertByIndex(4, 1)
REM ----- Copia Intestazione da vecchia a nuova colona "Comment" ----
Sh1.getCellByPosition(4, 0).string = Sh1.getCellByPosition(2, 0).string

REM ----- Inizio Loop -----------
For Riga = 1 to UltimaRiga
REM ----- Il dato della Colonna C "Comments" Iniziale viene scritto nella Colonna "Location" (Ora colonna H) -----
Sh1.getCellByPosition(7, Riga).string = Sh1.getCellByPosition(2, Riga).string
REM ----- Nella nuova colonna "Comments" viene inserita la parola "PROVA" -----
Sh1.getCellByPosition(4, Riga).string = "PLEASE, TRY TO ORDER 4 RECORDS OR MORE, OR SHIPPING COSTS WILL BE TOO EXPENSIVE FOR YOU - REMEMBER THAT WE SHIP ONLY REGISTERED!"
Next Riga

REM ----- A trasferimento dati avvenuto Rimuovi la colonna "Comment" iniziale -----
Sh1.Columns.removeByIndex(2, 1)

REM ----- Richiama e manda in esecuzione altra macro esterna ----
CALL CancellazioneRecordPrice

REM ----- INSERISCE1.0
For Riga = 1 to UltimaRiga
Sh1.getCellByPosition(1, Riga).string = "1.0"
Next Riga

End Sub

Sub CancellazioneRecordPrice
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

Rem ----- Richiesta inserimento del 'PRICE' di cui vuoi conservare i record.
RecordConPriceDaConservare = InputBox ("- Inserire il 'PRICE' di cui si vogliono conservare i record;" & CHR$(10) & "- Come separatore decimale utilizzare il PUNTO della tastiera (NON quello del Tastierino)." , "ATTENZIONE:  GESTIONE RECORD PRICE")
Rem ----- In caso annullamento dell'inserimento esci dalla procedura ------
If RecordConPriceDaConservare ="" Then Exit Sub
Rem ----- Richiesta conferma di procedere ----- In caso contrario esci dalla procedura -----
If Msgbox ("- Tutti i record con 'PRICE' diverso da  " & RecordConPriceDaConservare & "  saranno cancellati" & CHR$(10) & "- Confermare con il tasto INVIO o il pulsante OK", 33, "ATTENZIONE:  CANCELLAZIONE DATI") = 2 Then Exit Sub
Rem ----- Avvio loop per la cancellazione dei record previsti -----
For Riga = UltimaRiga To 1 Step -1
	If Sh1.getCellByPosition(1, Riga).string <> RecordConPriceDaConservare then
	Sh1.Rows.removeByIndex(Riga, 1)
	End If	
Next
End sub
Allegati
corto_ConMacroRiduzioneTabellaDati_e_CancellazioneRecordPrice (1).ods
(17.1 KiB) Scaricato 90 volte
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: Cancellare records con campo di valore diverso da

Messaggio da cater58 »

autorisolto
la macro ancora pensava alla ultima riga settata a inizio procedura, quindi metteva 1.0 in piu fino alla vecchia ultima riga
sufficiente fargli ricalcolare la fine riga prima di sostituire price con 1.0
ok!
Gianni
Libreoffice 2.2.3 con MacOS 10.4
Rispondi