[Risolto] Nascondere/Mostrare colonne con condizione

Creare una macro - Scrivere uno script - Usare le API
Rispondi
MrMoret
Messaggi: 3
Iscritto il: mercoledì 8 novembre 2017, 20:48

[Risolto] Nascondere/Mostrare colonne con condizione

Messaggio da MrMoret »

Ciao ragazzi, mi sono appena iscritto.
Vi seguo da un po', mi avete risolto qualche dubbio "base" su open office e le macro ma sto sbattendo la testa sulla creazione di una funzione in vba...
In pratica ho bisogno che alla verifica di una condizione (un determinato valore in E43) venga nascosta la colonna B e mostrata la colonna C, e viceversa.

Esempio:
Se in E43 ho il valore "MANUAL" allora avrò la colonna B nascosta e la colonna C visibile.
Viceversa, se in E43 ho qualsiasi altro valore diverso da "MANUAL" avrò la colonna C nascosta e la colonna B visibile.
Questo è quello che sono riuscito a scopiazzare qua e là:

Codice: Seleziona tutto

REM  *****  BASIC  *****
Option VBASupport 1

Public Function HIDECOLUMN(MM as String)
REM---- VARIABILI
	dim col1(0) as new com.sun.star.beans.PropertyValue
	col1(0).Name = "ToPoint"
	col1(0).Value = "$B$5"
	dim col2(0) as new com.sun.star.beans.PropertyValue
	col2(0).Name = "ToPoint"
	col2(0).Value = "$C$5"
	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")
REM ---- CONDIZIONE
	If MM="MANUAL" then
		REM --- Seleziono e nascondo COL1
		dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, col1())
		dispatcher.executeDispatch(document, ".uno:HideColumn", "", 0, col1())
		REM --- Seleziono e mostro COL2
		dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, col2())
		dispatcher.executeDispatch(document, ".uno:ShowColumn", "", 0, col2())
	else
	REM --- Seleziono e nascondo COL2
		dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, col2())
		dispatcher.executeDispatch(document, ".uno:HideColumn", "", 0, col2())
	REM --- Seleziono e mostro COL1
		dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, col1())
		dispatcher.executeDispatch(document, ".uno:ShowColumn", "", 0, col1())
	end if
End Function
Il problema è che, nonostante le celle siano tutte senza protezione, quando cambio valore a E43 mi dà questo errore: "Impossibile modificare le celle protette".

Avete soluzioni/consigli? Purtroppo il mio bagaglio limitato di VB non mi consente di arrivare alla soluzione! :crazy:
Grazie! :D
Ultima modifica di MrMoret il venerdì 10 novembre 2017, 13:22, modificato 1 volta in totale.
OpenOffice 4.1.3 su OSX 10.9.5
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Nascondere/Mostrare colonne con condizione

Messaggio da patel »

Il linguaggio macro per OO non è il VBA, un buon testo per studiare è qui http://www.pitonyak.org/oo.php, lascia perdere il registratore di macro.

Codice: Seleziona tutto

sub nascondi_colonnaSe
Doc = ThisComponent
Sheet = Doc.Sheets(0)
if Sheet.getcellrangebyname("E43").string = "MANUAL" then 
  sheet.Columns(1).IsVisible = False
  sheet.Columns(2).IsVisible = True
else
  sheet.Columns(1).IsVisible = True
  sheet.Columns(2).IsVisible = Valse
end if  

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
MrMoret
Messaggi: 3
Iscritto il: mercoledì 8 novembre 2017, 20:48

Re: Nascondere/Mostrare colonne con condizione

Messaggio da MrMoret »

Grande! Grazie mille! :D
Ti ringrazio, avevo visto la possibilità di usare il VB e quindi mi ero buttato su quello.
Comunque funziona tutto ma avrei una domanda: è possibile fare in modo che sia automatico il processo? Cioè, messa così funziona solo se richiamo la macro, invece il top sarebbe renderlo automatico al cambio valore di E43. È possibile?
OpenOffice 4.1.3 su OSX 10.9.5
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8785
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Nascondere/Mostrare colonne con condizione

Messaggio da charlie »

Ciao @MrMoret e benvenuto sul forum.
Se intanto ti vuoi presentare puoi farlo qui: viewforum.php?f=16
Per una panoramica delle regole consulta il Manuale di sopravvivenza.
Buon proseguimento.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Nascondere/Mostrare colonne con condizione

Messaggio da patel »

MrMoret ha scritto:Ti ringrazio, avevo visto la possibilità di usare il VB e quindi mi ero buttato su quello.
ti sbagli, quello che hai usato tu non è il VB e nemmeno il VBA, è il linguaggio incomprensibile del registratore.
Si può fare quello che chiedi, si tratta di gestire l'evento Contenuto modificato del foglio, lascio a te il compito di studiartelo e fare una proposta
-------------------
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
MrMoret
Messaggi: 3
Iscritto il: mercoledì 8 novembre 2017, 20:48

Re: Nascondere/Mostrare colonne con condizione

Messaggio da MrMoret »

Ce l'ho fatta! :super:
Grazie delle dritte patel, sono state utilissime.
Scrivo come ho risolto che magari può essere utile a qualcuno:
ho inserito la macro in Contenuto Modificato nella sezione Eventi Foglio (tasto DX sulla linguetta del foglio in questione).
Ho anche fatto una modifica al codice per selezionare il foglio in base al nome e non al numero di riferimento, così nel caso debba spostarlo di posizione non devo andare a modificare la macro:

Codice: Seleziona tutto

sub nascondi_colonnaSe

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Foglio1")
if Sheet.getcellrangebyname("E43").string = "MANUAL" then 
  sheet.Columns(1).IsVisible = False
  sheet.Columns(2).IsVisible = True
else
  sheet.Columns(1).IsVisible = True
  sheet.Columns(2).IsVisible = Valse
end if  

End Sub
OpenOffice 4.1.3 su OSX 10.9.5
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [RISOLTO] Nascondere/Mostrare colonne con condizione

Messaggio da patel »

E' un piacere aiutare utenti svegli e volonterosi come te, non sono molti quelli che hanno voglia di imparare, la maggioranza vuole la soluzione e basta.
-------------------
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