Pannello di Controllo Moderatore ]

[Risolto] Nascondere/Mostrare colonne con condizione

Creare una macro - Scrivere uno script - Usare le API

[Risolto] Nascondere/Mostrare colonne con condizione

Messaggioda MrMoret » mercoledì 8 novembre 2017, 21:22

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

Re: Nascondere/Mostrare colonne con condizione

Messaggioda patel » giovedì 9 novembre 2017, 8:07

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   Espandi visualeStringi visuale
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
-------------------
OpenOffice 4.1 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2655
Iscritto il: venerdì 30 aprile 2010, 7:04
Località: Livorno

Re: Nascondere/Mostrare colonne con condizione

Messaggioda MrMoret » giovedì 9 novembre 2017, 16:01

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

Re: Nascondere/Mostrare colonne con condizione

Messaggioda charlie » giovedì 9 novembre 2017, 16:16

Ciao @MrMoret e benvenuto sul forum.
Se intanto ti vuoi presentare puoi farlo qui: https://forum.openoffice.org/it/forum/v ... m.php?f=16
Per una panoramica delle regole consulta il Manuale di sopravvivenza.
Buon proseguimento.
charlie
Open Office 4.1.4 - LibreOffice 4.3.7 - NeoOffice 3.4.1
Mac OSX 10.7.5 Lion / macOS 10.13 High Sierra (dual boot)
Windows 7 pro (VirtualBox)
Ubuntu 14.04 (VirtualBox)
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 4541
Iscritto il: mercoledì 19 dicembre 2012, 10:50

Re: Nascondere/Mostrare colonne con condizione

Messaggioda patel » giovedì 9 novembre 2017, 17:40

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
-------------------
OpenOffice 4.1 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2655
Iscritto il: venerdì 30 aprile 2010, 7:04
Località: Livorno

Re: Nascondere/Mostrare colonne con condizione

Messaggioda MrMoret » venerdì 10 novembre 2017, 13:21

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

Re: [RISOLTO] Nascondere/Mostrare colonne con condizione

Messaggioda patel » venerdì 10 novembre 2017, 13:54

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.
-------------------
OpenOffice 4.1 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2655
Iscritto il: venerdì 30 aprile 2010, 7:04
Località: Livorno


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti