[Risolto]nascondi/mostra riga in funzione del valore dicella

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
regulus
Messaggi: 3
Iscritto il: mercoledì 17 aprile 2013, 12:54

[Risolto]nascondi/mostra riga in funzione del valore dicella

Messaggio da regulus »

Ciao,
sto cercando di capire se in calc si riesce a creare una macro automatica che, in funzione del valore di una determinata cella (elenco di valori con menù a tendina), faccia in modo di nascondere una determinata riga sottostante.
con excel me la sono cavata, anche se non elegantemente, ma calc mi è ancora oscuro.

per ora ho fatto così:
REM ***** BASIC *****
sub NASCONDI
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

flt = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2").Value
if flt = 2 then
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:HideRow", "", 0, Array())
else
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ShowRow", "", 0, Array())

End if
end sub


ma non riesco ad automatizzare la cosa per cui selezionando dall'elenco di discesa il valore 2 allora la riga si nasconde, selezionando altro valore la riga si mostra.

grazie mille per l'aiuto
Ultima modifica di regulus il giovedì 18 aprile 2013, 11:03, modificato 1 volta in totale.
Openoffice 3.4.1, windows 7 professional
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: nascondi/mostra riga in funzione del valore di una cella

Messaggio da patel »

Non ho capito bene, ma allega un file xlsm di esempio con la macro di excel e vediamo di convertirla.
Come vedi il linguaggio del registratore non è molto intuitivo.
-------------------
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
regulus
Messaggi: 3
Iscritto il: mercoledì 17 aprile 2013, 12:54

Re: nascondi/mostra riga in funzione del valore di una cella

Messaggio da regulus »

Ciao, grazie.
hai ragione, il linguaggio del registratore non è intuitivo :)
allego un file xls.
l'idea è quella di automatizzare l'operazione senza utilizzare bottoni,
quindi far si che selezionando un valore dal menù a tendina, si nasconda/mostri la riga desiderata.
Allegati
mostranascondi.xls
(45.5 KiB) Scaricato 569 volte
Openoffice 3.4.1, windows 7 professional
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: nascondi/mostra riga in funzione del valore di una cella

Messaggio da patel »

La macro non è banale, per iniziare non è proprio l'ideale, comunque

Codice: Seleziona tutto

global Calc1 as Object
global oListner as Object
Sub AddListners ' da mettere come evento all'apertura del documento
   Calc1 = thisComponent.sheets(0).GetCellRangeByName("C3")
   oListner = CreateUnoListener( "Sheet1_", "com.sun.star.util.XModifyListener" )   
   Calc1.AddModifyListener(oListner)
End Sub

Sub Sheet1_Modified(oEvent) ' questo è il codice che lavora
dim ocell,osheet,sel
on error resume next
oCell = thisComponent.currentSelection.CellAddress
oSheet = thisComponent.currentController.activeSheet
oSheet.rows.isVisible = true
col=ocell.column
row=ocell.row
sel= oSheet.getCellByPosition(col,row).value
osheet.getCellByPosition(0,sel+5).rows.isVisible = false
End Sub

Sub Sheet1_Disposing(oEvent)
End Sub 
Allegati
mostranascondi.ods
(16.11 KiB) Scaricato 368 volte
-------------------
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
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: nascondi/mostra riga in funzione del valore di una cella

Messaggio da Gaetanopr »

regulus ha scritto: l'idea è quella di automatizzare l'operazione senza utilizzare bottoni,
quindi far si che selezionando un valore dal menù a tendina, si nasconda/mostri la riga desiderata.

pure io avevo pensato ad un event listener

Comunque un sistema più semplice per i meno esperti(non che io lo sia, la macro(AddListener) l'ho trovata cercando tempo fà sul forum perchè avevo la stessa necessità) potrebbe essere quella di sostituire il menu a tendina con una casella combinata o di riepilogo ed associare la macro a "testo modificato"

Ciao

Codice: Seleziona tutto

Global oListener, oSheet, oCell

Sub AddListener                                
   oSheet = ThisComponent.getSheets().getByName("Foglio1")
   oCell = oSheet.getCellRangeByName("C3")
   oListener = CreateUnoListener("Nascondi_", "com.sun.star.chart.XChartDataChangeEventListener")
   oCell.addChartDataChangeEventListener(oListener)
End Sub

Sub Nascondi_chartDataChanged
Dim oDoc As Object
Dim oSheet As Object
Dim Row As Object

oDoc = StarDesktop.CurrentComponent
oSheet = oDoc.Sheets(0)
oCell = oSheet.GetCellByPosition(2, 2)
Row = oSheet.Rows
Row.IsVisible = true
Row = oSheet.Rows(oCell.value+5)
Row.IsVisible = False


End Sub

Sub RemoveListner
   oCell.removeChartDataChangeEventListener(oListener)
End Sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
regulus
Messaggi: 3
Iscritto il: mercoledì 17 aprile 2013, 12:54

[Risolto]nascondi/mostra riga in funzione del valore di 1 ce

Messaggio da regulus »

Grazie mille!
funzionano entrambe le opzioni.
alla fine con il mio coinquilino si è trovata la soluzione di usare un listener ma per ora avevo continuato a mantenere la sintassi del registratore (sicuro che funzionasse).
di certo le vostre soluzioni sono più comprensibili! :) :)
Openoffice 3.4.1, windows 7 professional
Rispondi