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
[Risolto]nascondi/mostra riga in funzione del valore dicella
[Risolto]nascondi/mostra riga in funzione del valore dicella
Ultima modifica di regulus il giovedì 18 aprile 2013, 11:03, modificato 1 volta in totale.
Openoffice 3.4.1, windows 7 professional
Re: nascondi/mostra riga in funzione del valore di una cella
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.
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
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: nascondi/mostra riga in funzione del valore di una cella
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.
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
Re: nascondi/mostra riga in funzione del valore di una cella
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
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: nascondi/mostra riga in funzione del valore di una cella
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
Openoffice 4.1.13 su windows 10
[Risolto]nascondi/mostra riga in funzione del valore di 1 ce
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!

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