Macro riempire righe vuote sotto a celle con valori

Creare una macro - Scrivere uno script - Usare le API
Rispondi
andrea_co
Messaggi: 7
Iscritto il: martedì 25 maggio 2021, 16:35

Macro riempire righe vuote sotto a celle con valori

Messaggio da andrea_co »

Ho trovato una macro "CopiaABC" qui sul forum che è quasi perfetta per la mia necessità. Purtroppo, non capendo il codice della Macro, non riesco a modificare il valore delle celle di partenza e il range della larghezza delle colonne che devono essere coinvolte nell'esecuzione della Macro.

Nel mio foglio "FoglioOriginale" ho la necessità, partendo dalla Colonna AW e fino alla Colonna BD, di riempire le righe "vuote" con gli stessi valori presenti nella riga superiore (vedi file allegato righe evidenziate in giallo).

Come posso modificare la Macro qui sotto da CopiaABC (le prime 3 colonne) che parti ed inizi con l'esecuzione della macro dalla colonna AW-AX-AY-AZ-...-BD anzichè dalla Colonna A come nel codice originale che ho postato qui sotto.

Codice: Seleziona tutto

REM  *****  BASIC  *****
Sub Main
End Sub

Sub CopiaABC
Doc=ThisComponent
Foglio = Doc.Sheets.getByName("FileOriginale")
Cursore = Foglio.createCursor
Cursore.gotoEndOfUsedArea(false)
UltimaRiga = Cursore.RangeAddress.EndRow

For Riga = 1 to UltimaRiga
VerificaA = Foglio.GetCellByPosition(0,Riga).String
If VerificaA = "" then
  Foglio.getCellByPosition(0,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
  Foglio.GetCellByPosition(0,Riga).String = Foglio.GetCellByPosition(0,Riga-1).String

  Foglio.getCellByPosition(1,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
  Foglio.GetCellByPosition(1,Riga).String = Foglio.GetCellByPosition(1,Riga-1).String

  Foglio.getCellByPosition(2,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
  Foglio.getCellByPosition(2,Riga).HoriJustify = 0 ' 1=Sinistra 2=Centro 3=Destra 0=STANDARD(Numeri a Desrtra Stringhe a Sinistra)
  Foglio.GetCellByPosition(2,Riga).Value = Foglio.GetCellByPosition(2,Riga-1).Value
End if
Next Riga
End sub

Grazie per l'aiuto
Allegati
colonne_coinvolte.png
Ultima modifica di charlie il giovedì 9 dicembre 2021, 21:05, modificato 1 volta in totale.
Motivazione: Formattato codice
Openoffice 4.1.8 con Windows 7 64 Bit
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro riempire righe vuote sotto a celle con valori

Messaggio da patel »

A me sembra che il codice parli da solo, ti basta sapere che per indicare una cella si usa
GetCellByPosition(Colonna,Riga) e che i numeri di riga e colonna partono da ZERO, quindi la cella A1 viene indicata con GetCellByPosition(0,0)
Un buon testo da studiare lo trovi qui http://www.pitonyak.org/oo.php
-------------------
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
andrea_co
Messaggi: 7
Iscritto il: martedì 25 maggio 2021, 16:35

[Risolto]Re: Macro riempire righe vuote sotto a celle con va

Messaggio da andrea_co »

Se può interessare a qualcun altro utente allego il codice adattato alle colonne come nell'immagine di inizio post.

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

Sub Main

End Sub

Sub CopiaABC
Doc=ThisComponent
Foglio = Doc.Sheets.getByName("FileOriginale")
Cursore = Foglio.createCursor
Cursore.gotoEndOfUsedArea(false)
UltimaRiga = Cursore.RangeAddress.EndRow

For Riga = 1 to UltimaRiga
VerificaA = Foglio.GetCellByPosition(48,Riga).String
If VerificaA = "" then
Foglio.getCellByPosition(48,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
Foglio.GetCellByPosition(48,Riga).String = Foglio.GetCellByPosition(48,Riga-1).String

Foglio.getCellByPosition(49,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
Foglio.GetCellByPosition(49,Riga).String = Foglio.GetCellByPosition(49,Riga-1).String

Foglio.getCellByPosition(50,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
' Foglio.getCellByPosition(50,Riga).HoriJustify = 0 ' 1=Sinistra 2=Centro 3=Destra 0=STANDARD(Numeri a Desrtra Stringhe a Sinistra)
Foglio.GetCellByPosition(50,Riga).String = Foglio.GetCellByPosition(50,Riga-1).String

Foglio.getCellByPosition(51,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
Foglio.GetCellByPosition(51,Riga).String = Foglio.GetCellByPosition(51,Riga-1).String

Foglio.getCellByPosition(52,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
Foglio.GetCellByPosition(52,Riga).String = Foglio.GetCellByPosition(52,Riga-1).String

Foglio.getCellByPosition(53,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
Foglio.GetCellByPosition(53,Riga).String = Foglio.GetCellByPosition(53,Riga-1).String


Foglio.getCellByPosition(54,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
Foglio.GetCellByPosition(54,Riga).String = Foglio.GetCellByPosition(54,Riga-1).String


Foglio.getCellByPosition(55,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
Foglio.GetCellByPosition(55,Riga).String = Foglio.GetCellByPosition(55,Riga-1).String

End if
Next Riga
End sub
Openoffice 4.1.8 con Windows 7 64 Bit
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro riempire righe vuote sotto a celle con valori

Messaggio da charlie »

Ciao, per formattare il codice c'è il tasto "Code". Adoperalo, grazie.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto]Re: Macro riempire righe vuote sotto a celle co

Messaggio da patel »

andrea_co ha scritto:Se può interessare a qualcun altro utente allego il codice adattato alle colonne come nell'immagine di inizio post.
io utilizzerei 2 cicli for

Codice: Seleziona tutto

Sub CopiaABC
Doc=ThisComponent
Foglio = Doc.Sheets.getByName("FileOriginale")
Cursore = Foglio.createCursor
Cursore.gotoEndOfUsedArea(false)
UltimaRiga = Cursore.RangeAddress.EndRow

For Riga = 1 to UltimaRiga
  VerificaA = Foglio.GetCellByPosition(48,Riga).String
  If VerificaA = "" then
    For Col = 48 to 55
       Foglio.getCellByPosition(Col,Riga).CellBackColor = rgb (0,255,0) 'Sfondo VERDE
       Foglio.GetCellByPosition(Col,Riga).String = Foglio.GetCellByPosition(Col,Riga-1).String
    Next
  End if
Next 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
Rispondi