[Risolto] Macro Campi_obbligatori e formattazione

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

[Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Buongiorno a tutti,
vorrei rendere obbligatoria la compilazione di alcune celle in un tabella.
Nel file allegato:
Si tratta delle celle F6, F8, J8, F10, J10, F12.
Partendo dalla prima (F6), se vuota vorrei che sia evidenziata con colore, poi msgbox "Campo obbligatorio", altrimenti blocca macro,
se compilata controllare F8,
se F8 vuota evidenzia con colore, poi msgbox "campo obbligatorio", altrimenti blocca macro, così fino a F12.
Infine la macro si potrà eseguire SOLO SE la cella "C4" è uguale a "INSERIMENTO RECORD"

Codice: Seleziona tutto

sub copia
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("data_entry") 
Sheet1 = Doc.Sheets.getByName("Inserimento_dati")
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
Sheet.getCellRangeByName("T35:AJ35").setDataArray(Sheet.getCellRangeByName("T33:AJ33").getDataArray)
Range = Sheet.getCellRangeByName("T35:AJ35").getRangeAddress()
CellAddress = Sheet1.getCellRangeByName("C" & Lastrow).CellAddress
Sheet.copyRange(CellAddress, Range)
End Sub
Allego file
Allegati
Campi_obbligatori.ods
(21.71 KiB) Scaricato 70 volte
Ultima modifica di Arbellini il martedì 30 agosto 2022, 10:27, modificato 1 volta in totale.
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro Campi_obbligatori e formattazione

Messaggio da patel »

Non ho capito come vuoi fare il controllo, l'utente compila i dati e poi preme il tasto Inserisci per lanciare la macro Copia?
Inoltre vedo comandi abbastanza complessi come getDataArray e poi non sai controllare se una cella è vuota ?
-------------------
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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

patel ha scritto: domenica 28 agosto 2022, 17:42 Non ho capito come vuoi fare il controllo, l'utente compila i dati e poi preme il tasto Inserisci per lanciare la macro Copia?
Inoltre vedo comandi abbastanza complessi come getDataArray e poi non sai controllare se una cella è vuota ?
1) Si, l''utente compila i dati "obbligatori" e poi preme il tasto Inserisci per lanciare la macro, SE la cella "C4" è uguale a "INSERIMENTO RECORD" la macro Copia, altrimenti mi darà msgbox "..." (ma questo "msgbox" credo di poterlo fare io) :D ed uscire dalla macro.
2) Con le macro sono molto indietro, riesco solo a decifrarle, " i comandi abbastanza complessi come getDataArray" sono stati solo adattati alla mia esigenza, la macro non saprei farla da zero, quindi se riesco provo a cercarla prima nel forum.
3) Purtroppo no, non riesco, altrimenti non avrei chiesto aiuto. :?
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Ho inserito la condizione finale

Codice: Seleziona tutto

If mode = "INSERIMENTO RECORD" then
avvia macro

Codice: Seleziona tutto

sub copia
Doc = ThisComponent 'legge il file
Sheet = Doc.Sheets.getByName("data_entry") 
Sheet1 = Doc.Sheets.getByName("Inserimento_dati")
mode = Sheet.getCellRangeByName("C4").string
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
If mode = "INSERIMENTO RECORD" then
Sheet.getCellRangeByName("T35:AJ35").setDataArray(Sheet.getCellRangeByName("T33:AJ33").getDataArray)
Range = Sheet.getCellRangeByName("T35:AJ35").getRangeAddress()
CellAddress = Sheet1.getCellRangeByName("C" & Lastrow).CellAddress
Sheet.copyRange(CellAddress, Range)
Else
msgbox "MODALITÀ ERRATA - INSERIMENTO NON EFFETTUATO"
End if
End Sub
Quello che mi resta da fare sarebbe la compilazione obbligatoria con formattazione.
Credo si debba fare con un ciclo for con step, ma non voglio dare suggerimenti :D
Se qualcuno vorrebbe darmi una mano ...
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro Campi_obbligatori e formattazione

Messaggio da patel »

prova questa (l'ho cambiata dopo la tua risposta)

Codice: Seleziona tutto

sub copia
Doc = ThisComponent 'legge il file
Sheet = Doc.Sheets.getByName("data_entry") 
Sheet1 = Doc.Sheets.getByName("Inserimento_dati")
mode = Sheet.getCellRangeByName("C4").string
Range0 = Sheet.getCellRangeByName("F6")
Range1 = Sheet.getCellRangeByName("F8")
Range2 = Sheet.getCellRangeByName("F12")
Range3 = Sheet.getCellRangeByName("J10")  
ranges = Array(range0,range1, range2, range3)    
for i = 0 to 3
  If ranges(i).string="" then
    Doc.CurrentController.Select(ranges(i))
    'ranges(i).CellBackColor = qbcolor(9)
    msgbox "CAMPO VUOTO"
    exit sub
  'else
   ' ranges(i).CellBackColor = RGB(240,255,240)
  end if
next i

If mode = "INSERIMENTO RECORD" then
Sheet.getCellRangeByName("T35:AJ35").setDataArray(Sheet.getCellRangeByName("T33:AJ33").getDataArray)
Range = Sheet.getCellRangeByName("T35:AJ35").getRangeAddress()
CellAddress = Sheet1.getCellRangeByName("C" & Lastrow).CellAddress
Sheet.copyRange(CellAddress, Range)
Else
msgbox "MODALITÀ ERRATA - INSERIMENTO NON EFFETTUATO"
End if
End Sub
Ultima modifica di patel il lunedì 29 agosto 2022, 11:20, modificato 1 volta in totale.
-------------------
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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Al momento non mi è possibile provarla, potrò farlo nel pomeriggio.

Grazie
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Funziona,

Codice: Seleziona tutto

Range0 = Sheet.getCellRangeByName("F6")
Range1 = Sheet.getCellRangeByName("F8")
Range2 = Sheet.getCellRangeByName("J8")
Range3 = Sheet.getCellRangeByName("F10")
Range4 = Sheet.getCellRangeByName("J10") 
Range5 = Sheet.getCellRangeByName("F12")

 
ranges = Array(range0,range1, range2, range3, range4, range5)    
for i = 0 to 5
  If ranges(i).string="" then
    Doc.CurrentController.Select(ranges(i))
    'ranges(i).CellBackColor = qbcolor(9)
    msgbox "CAMPO VUOTO"
    exit sub
  'else
   ' ranges(i).CellBackColor = RGB(240,255,240)
  end if
next i
facendo delle prove però, mi sono accorto che msgbox "CAMPO VUOTO" è troppo generico come messaggio, nel senso che mi piacerebbe che indicasse invece il nome del campo vuoto corrispondente, quindi il testo della cella a sn del campo. ho provato definendo nuovamente nuovi ranges dei nomi campi e aggiungendo ... ma no, non riesco.
Se possibile, altrimenti apro un nuovo post
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro Campi_obbligatori e formattazione

Messaggio da patel »

Forse non hai notato che in caso di errore viene selezionata la cella vuota, quindi basta scriverci, comunque si può fare anche quello che hai chiesto.

Codice: Seleziona tutto

sub copia
Doc = ThisComponent 'legge il file
Sheet = Doc.Sheets.getByName("data_entry") 
Sheet1 = Doc.Sheets.getByName("Inserimento_dati")
mode = Sheet.getCellRangeByName("C4").string
Range0 = Sheet.getCellRangeByName("F6")
Range1 = Sheet.getCellRangeByName("F8")
Range2 = Sheet.getCellRangeByName("F12")
Range3 = Sheet.getCellRangeByName("J10")  
ranges = Array(range0,range1, range2, range3)    
for i = 0 to 3
  If ranges(i).string="" then
    Doc.CurrentController.Select(ranges(i))
    'ranges(i).CellBackColor = qbcolor(9)
    msgbox "CAMPO VUOTO " &  rangeTextAddress(ranges(i))
    exit sub
  'else
   ' ranges(i).CellBackColor = RGB(240,255,240)
  end if
next i

If mode = "INSERIMENTO RECORD" then
Sheet.getCellRangeByName("T35:AJ35").setDataArray(Sheet.getCellRangeByName("T33:AJ33").getDataArray)
Range = Sheet.getCellRangeByName("T35:AJ35").getRangeAddress()
CellAddress = Sheet1.getCellRangeByName("C" & Lastrow).CellAddress
Sheet.copyRange(CellAddress, Range)
Else
msgbox "MODALITÀ ERRATA - INSERIMENTO NON EFFETTUATO"
End if
End Sub

function rangeTextAddress(rng as object) as string
Dim Doc As Object, Sheet As Object, CellRange As Object
RngAddr=Rng.getRangeAddress
RngColumn=Rng.Columns
RngRow=Rng.Rows
CountColumn=RngColumn.getCount
CountRow=RngRow.getCount
FirstCol=RngColumn.getByIndex(0).getName
LastCol=RngColumn.getByIndex(CountColumn-1).getName
FirstRow=RngAddr.StartRow+1
LastRow=RngAddr.EndRow+1
NumCells=(CountColumn*CountRow) ' se serve
rangeTextAddress =FirstCol + FirstRow 
End Function
Ultima modifica di patel il martedì 30 agosto 2022, 8:22, modificato 2 volte in totale.
-------------------
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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Si l'avevo notato, ma il messaggio generico distrae :|
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Aggiungendo

Codice: Seleziona tutto

msgbox "CAMPO VUOTO " & rangeTextAddress(ranges(i))
Mi da errore di runtime BASIC
Sottoprocedura o funzione non definita.

Quello che intendevo si riferiva alla restituzione del nome del campo vuoto:
Ad es se F6 campo vuoto msgbox "CAMPO VUOTO & testo D6
= CAMPO VUOTO Cognome nome
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro Campi_obbligatori e formattazione

Messaggio da patel »

Arbellini ha scritto: lunedì 29 agosto 2022, 21:54 Aggiungendo

Codice: Seleziona tutto

msgbox "CAMPO VUOTO " & rangeTextAddress(ranges(i))
Non basta aggiungere quello, se guardi bene dopo la sub copia c'è una 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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

patel ha scritto: martedì 30 agosto 2022, 8:19
Arbellini ha scritto: lunedì 29 agosto 2022, 21:54 Aggiungendo

Codice: Seleziona tutto

msgbox "CAMPO VUOTO " & rangeTextAddress(ranges(i))
Non basta aggiungere quello, se guardi bene dopo la sub copia c'è una function.
:shock: :knock:
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Grazie mille patel
:super:
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da patel »

Aggiunto nome del campo

Codice: Seleziona tutto

sub copia
Doc = ThisComponent 'legge il file
Sheet = Doc.Sheets.getByName("data_entry") 
Sheet1 = Doc.Sheets.getByName("Inserimento_dati")
mode = Sheet.getCellRangeByName("C4").string
Range0 = Sheet.getCellRangeByName("F6")
Range1 = Sheet.getCellRangeByName("F8")
Range2 = Sheet.getCellRangeByName("F12")
Range3 = Sheet.getCellRangeByName("J10")  
ranges = Array(range0,range1, range2, range3)    
for i = 0 to 3
  If ranges(i).string="" then
    Doc.CurrentController.Select(ranges(i))
    'ranges(i).CellBackColor = qbcolor(9)
    msgbox "CAMPO VUOTO " &  rangeTextAddress(ranges(i),Sheet)
    exit sub
  'else
   ' ranges(i).CellBackColor = RGB(240,255,240)
  end if
next i

If mode = "INSERIMENTO RECORD" then
Sheet.getCellRangeByName("T35:AJ35").setDataArray(Sheet.getCellRangeByName("T33:AJ33").getDataArray)
Range = Sheet.getCellRangeByName("T35:AJ35").getRangeAddress()
CellAddress = Sheet1.getCellRangeByName("C" & Lastrow).CellAddress
Sheet.copyRange(CellAddress, Range)
Else
msgbox "MODALITÀ ERRATA - INSERIMENTO NON EFFETTUATO"
End if
End Sub

Function rangeTextAddress(rng as object, SH  as object) as string
Dim Doc As Object, Sheet As Object, CellRange As Object
RngAddr=Rng.getRangeAddress
RngColumn=Rng.Columns
FirstCol=RngColumn.getByIndex(0).getName
FirstRow=RngAddr.StartRow+1
FCol=RngAddr.StartColumn-2
FRow=RngAddr.StartRow
rangeTextAddress =FirstCol + FirstRow + " (" + sh.GetCellbyPosition(FCol,FRow).String + + ")"
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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Grazie

:D
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Riflessione

La macro formulata ha soddisfatto la mia richiesta, anzi niente da dire, MA, c'è un ma :D

La tabella data_entry alla fine del lavoro dovrà essere visualizzata senza griglie e riferimenti di righe e colonne,
per questo motivo preferirei che non comparissero nella msgbox i riferimenti di righe e colonne,
anche perché, essendo lo sfondo bianco senza riferimenti non avrebbe alcun senso sapere che il campo vuoto
appartiene ad es: "J8", mentre invece l'informazione corretta (penso io), dovrebbe essere riferita solo al Nome del campo (Cognome, data, etc.), seguita dalla formattazione.
Ora vista la complessità della function, alla quale non oso metterci mano, chiedevo quest'ultimo aiuto. :)
Non visualizzare i riferimenti di righe e colonne, ma solo del nome dei campi e conseguente formattazione (come quella attuale)
Naturalmente se fattibile.
Dopo di che penso di aver completato la prima parte del quadro :D
Per quello che verrà invece, spero di farmi sentire il meno possibile.
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da patel »

modifica la riga
rangeTextAddress =FirstCol + FirstRow + " (" + sh.GetCellbyPosition(FCol,FRow).String + + ")"
così
rangeTextAddress = sh.GetCellbyPosition(FCol,FRow).String
-------------------
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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

patel ha scritto: mercoledì 31 agosto 2022, 7:28 modifica la riga
rangeTextAddress =FirstCol + FirstRow + " (" + sh.GetCellbyPosition(FCol,FRow).String + + ")"
così
rangeTextAddress = sh.GetCellbyPosition(FCol,FRow).String
Mannaggia lo avevo intuito :knock:

Grazie patel, ora è perfetto

Buona giornata
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da patel »

Per imparare bisogna osare e non aver paura di sbagliare, si può sempre tornare indietro.
-------------------
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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Si, lo so
ma avevo deciso di non mettere mano alla fuction,
Il problema principale che riscontro il Libreoffice è che non riesco a fare il debag (come nel VBA), per cui se ho idea di cosa si parla ci provo, diversamente non mi piace fare le cose alla cieca. :|
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Arbellini ha scritto: mercoledì 31 agosto 2022, 9:33 Si, lo so
ma avevo deciso di non mettere mano alla fuction,
Il problema principale che riscontro il Libreoffice è che non riesco a fare il debag (come nel VBA), per cui se ho idea di cosa si parla ci provo, diversamente non mi piace fare le cose alla cieca. :|
Anche se, a dire il vero ci avevo provato sostituendo con " (" + sh.GetCellbyPosition(FCol,FRow).String + + ")", ma naturalmente non funzionava. :ouch: :D
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Arbellini ha scritto: mercoledì 31 agosto 2022, 7:35
patel ha scritto: mercoledì 31 agosto 2022, 7:28 modifica la riga
rangeTextAddress =FirstCol + FirstRow + " (" + sh.GetCellbyPosition(FCol,FRow).String + + ")"
così
rangeTextAddress = sh.GetCellbyPosition(FCol,FRow).String
Mannaggia lo avevo intuito :knock:

Grazie patel, ora è perfetto

Buona giornata
patel ha scritto: mercoledì 31 agosto 2022, 8:32 Per imparare bisogna osare e non aver paura di sbagliare, si può sempre tornare indietro.
Arbellini ha scritto: mercoledì 31 agosto 2022, 10:02
Arbellini ha scritto: mercoledì 31 agosto 2022, 9:33 Si, lo so
ma avevo deciso di non mettere mano alla fuction,
Il problema principale che riscontro il Libreoffice è che non riesco a fare il debag (come nel VBA), per cui se ho idea di cosa si parla ci provo, diversamente non mi piace fare le cose alla cieca. :|
Anche se, a dire il vero ci avevo provato sostituendo con " (" + sh.GetCellbyPosition(FCol,FRow).String + + ")", ma naturalmente non funzionava. :ouch: :D
Se non si conosce la teoria l'intuito a cosa serve? :crazy:
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da patel »

Arbellini ha scritto: mercoledì 31 agosto 2022, 9:33 Il problema principale che riscontro il Libreoffice è che non riesco a fare il debag (come nel VBA)
Come in VBA puoi lanciare la macro passo passo con F8 e visualizzare le variabili col mouse.
-------------------
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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Sono passato da poco a Libreoffice
Ho scaricato tute le guide che avete postato su questo forum, ma ancora devo leggerne una, infatti non conoscevo ancora i comandi dell'editor.
Per il momento do un'occhiata a questo https://wiki.openoffice.org/wiki/Docume ... d_Debugger
Grazie
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Condivisione del risultato finale

Buona giornata

Codice: Seleziona tutto

REM  *****  BASIC  *****
sub copia
Doc = ThisComponent 'legge il file
Sheet = Doc.Sheets.getByName("data_entry") 
Sheet1 = Doc.Sheets.getByName("Inserimento_dati")
mode = Sheet.getCellRangeByName("C4").string

Range0 = Sheet.getCellRangeByName("F6")
Range1 = Sheet.getCellRangeByName("F8")
Range2 = Sheet.getCellRangeByName("J8")
Range3 = Sheet.getCellRangeByName("F10")
Range4 = Sheet.getCellRangeByName("J10") 
Range5 = Sheet.getCellRangeByName("F12")

 
ranges = Array(range0,range1, range2, range3, range4, range5)    
for i = 0 to 5
  If ranges(i).string="" then
    Doc.CurrentController.Select(ranges(i))
    'ranges(i).CellBackColor = qbcolor(9)
       msgbox "CAMPO VUOTO " &  rangeTextAddress(ranges(i),Sheet)
    exit sub
  'else
   ' ranges(i).CellBackColor = RGB(240,255,240)
  end if
next i
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
If mode = "INSERIMENTO RECORD" then
Sheet.getCellRangeByName("T35:AJ35").setDataArray(Sheet.getCellRangeByName("T33:AJ33").getDataArray)
Range = Sheet.getCellRangeByName("T35:AJ35").getRangeAddress()
CellAddress = Sheet1.getCellRangeByName("C" & Lastrow).CellAddress
Sheet.copyRange(CellAddress, Range)
Else
msgbox "MODALITÀ ERRATA - INSERIMENTO NON EFFETTUATO"
End if
End Sub

Function rangeTextAddress(rng as object, SH  as object) as string
Dim Doc As Object, Sheet As Object, CellRange As Object
RngAddr=Rng.getRangeAddress
RngColumn=Rng.Columns
FirstCol=RngColumn.getByIndex(0).getName
FirstRow=RngAddr.StartRow+1
FCol=RngAddr.StartColumn-2
FRow=RngAddr.StartRow
'rangeTextAddress =FirstCol + FirstRow + " (" + sh.GetCellbyPosition(FCol,FRow).String + + ")"
rangeTextAddress = sh.GetCellbyPosition(FCol,FRow).String
'Sheet.getCellRangeByName("F6:F16").ClearContents(7) ' Cancella area celle di origine dei dati
'Sheet.getCellRangeByName("J8:J10").ClearContents(7)
'Sheet.getCellRangeByName("F22:F22").ClearContents(7)
'Sheet.getCellRangeByName("T35:AJ35").ClearContents(7)
End Function
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da patel »

Una function deve essere utilizzabile anche in altri contesti, quindi meglio eliminare le ultime righe che fanno riferimento al foglio specifico.
-------------------
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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

patel ha scritto: giovedì 1 settembre 2022, 8:20 Una function deve essere utilizzabile anche in altri contesti, quindi meglio eliminare le ultime righe che fanno riferimento al foglio specifico.
Scusa patel
quali righe, non l'ho capito :shock:
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da patel »

Arbellini ha scritto: giovedì 1 settembre 2022, 6:01

Codice: Seleziona tutto

REM  *****  BASIC  *****
'Sheet.getCellRangeByName("F6:F16").ClearContents(7) ' Cancella area celle di origine dei dati
'Sheet.getCellRangeByName("J8:J10").ClearContents(7)
'Sheet.getCellRangeByName("F22:F22").ClearContents(7)
'Sheet.getCellRangeByName("T35:AJ35").ClearContents(7)
queste, anche se sono commentate, non ha senso tenerle in una function, devono stare nella 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
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

patel ha scritto: giovedì 1 settembre 2022, 8:51
Arbellini ha scritto: giovedì 1 settembre 2022, 6:01

Codice: Seleziona tutto

REM  *****  BASIC  *****
'Sheet.getCellRangeByName("F6:F16").ClearContents(7) ' Cancella area celle di origine dei dati
'Sheet.getCellRangeByName("J8:J10").ClearContents(7)
'Sheet.getCellRangeByName("F22:F22").ClearContents(7)
'Sheet.getCellRangeByName("T35:AJ35").ClearContents(7)
queste, anche se sono commentate, non ha senso tenerle in una function, devono stare nella sub.
Hai ragione :D

Codice: Seleziona tutto

REM ***** BASIC *****
sub copia
Doc = ThisComponent 'legge il file
Sheet = Doc.Sheets.getByName("data_entry")
Sheet1 = Doc.Sheets.getByName("Inserimento_dati")
mode = Sheet.getCellRangeByName("C4").string

Range0 = Sheet.getCellRangeByName("F6")
Range1 = Sheet.getCellRangeByName("F8")
Range2 = Sheet.getCellRangeByName("J8")
Range3 = Sheet.getCellRangeByName("F10")
Range4 = Sheet.getCellRangeByName("J10")
Range5 = Sheet.getCellRangeByName("F12")


ranges = Array(range0,range1, range2, range3, range4, range5)
for i = 0 to 5
If ranges(i).string="" then
Doc.CurrentController.Select(ranges(i))
'ranges(i).CellBackColor = qbcolor(9)
msgbox "CAMPO VUOTO " & rangeTextAddress(ranges(i),Sheet)
exit sub
'else
' ranges(i).CellBackColor = RGB(240,255,240)
end if
next i
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
If mode = "INSERIMENTO RECORD" then
Sheet.getCellRangeByName("T35:AJ35").setDataArray(Sheet.getCellRangeByName("T33:AJ33").getDataArray)
Range = Sheet.getCellRangeByName("T35:AJ35").getRangeAddress()
CellAddress = Sheet1.getCellRangeByName("C" & Lastrow).CellAddress
Sheet.copyRange(CellAddress, Range)
'Sheet.getCellRangeByName("F6:F16").ClearContents(7) ' Cancella area celle di origine dei dati
'Sheet.getCellRangeByName("J8:J10").ClearContents(7)
'Sheet.getCellRangeByName("F22:F22").ClearContents(7)
'Sheet.getCellRangeByName("T35:AJ35").ClearContents(7)
Else
msgbox "MODALITÀ ERRATA - INSERIMENTO NON EFFETTUATO"
End if
End Sub

Function rangeTextAddress(rng as object, SH as object) as string
Dim Doc As Object, Sheet As Object, CellRange As Object
RngAddr=Rng.getRangeAddress
RngColumn=Rng.Columns
FirstCol=RngColumn.getByIndex(0).getName
FirstRow=RngAddr.StartRow+1
FCol=RngAddr.StartColumn-2
FRow=RngAddr.StartRow
'rangeTextAddress =FirstCol + FirstRow + " (" + sh.GetCellbyPosition(FCol,FRow).String + + ")"
rangeTextAddress = sh.GetCellbyPosition(FCol,FRow).String
End Function
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Macro Campi_obbligatori e formattazione

Messaggio da Arbellini »

Mi sono accorto di un piccolo errore nella tabella, ora corretto.
Credo di essere riuscito ad aprire la prima scatola,
grazie all'aiuto di patel.
Considerate questo file come definitivo.

Buona giornata
Allegati
PRIMA MACRO.ods
(21.58 KiB) Scaricato 56 volte
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Rispondi