[SOLVED] Włączenie / wyłączenie formantu

Użytkowanie arkusza kalkulacyjnego
Maxbert
Posty: 28
Rejestracja: czw wrz 14, 2017 12:29 pm

[SOLVED] Włączenie / wyłączenie formantu

Post autor: Maxbert »

Proszę o podpowiedz jak włączyć i wyłączyć formant (np. pole wyboru) w zależności od wartości określonej komórki?
Pytanie czy jest taka funkcja gdyż nie chciałbym tego wykonywać makrem?
Pisząc włączyć i wyłączyć formant mam na myśli stany które osiąga się poprzez np.: właściwości: przycisk opcji -> ogólne -> włączony -> tak/nie

PZDR
MG
Ostatnio zmieniony śr kwie 17, 2019 9:27 am przez Maxbert, łącznie zmieniany 1 raz.
AOO 4.1.14, LO 7.5.5.2 (X86_64), Windows 10
Awatar użytkownika
Astur
Posty: 654
Rejestracja: wt lip 13, 2010 9:11 am

Re: Włączenie / wyłączenie formantu

Post autor: Astur »

Na moje głowe to nie da rady bez tyciego makierka, które można potem sobie wstawiać w odpowiednie miejsca.
Ubuntu 20.04 — OpenOffice 4.1.10
Zanim zastosujesz się do jakiejś rady, zrób kopię zapasową dokumentu, którego ona ma dotyczyć.
Wskazówka: w dokumentach używam czasem niestandardowych, bezpłatnych czcionek Gentium i Lato
Maxbert
Posty: 28
Rejestracja: czw wrz 14, 2017 12:29 pm

Re: Włączenie / wyłączenie formantu

Post autor: Maxbert »

OK skoro tak to poproszę o podpowiedź jak dobrać się do tego parametru za pomocą makra?
AOO 4.1.14, LO 7.5.5.2 (X86_64), Windows 10
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Włączenie / wyłączenie formantu

Post autor: Jermor »

Z podręcznika https://wiki.openoffice.org/wiki/Docume ... ts#Buttons
The following example shows some of the properties for the checkboxes:

Kod: Zaznacz cały

Sub Checkbox1()
 Dim oDialog As Object
 Dim oControl As Object
 
DialogLibraries.LoadLibrary( "Standard" )
     oDialog = CreateUnoDialog( DialogLibraries.Standard.getByName("MyDialog") )      'Image control
     oControl = oDialog.getControl("icFoto")     'we hide it
     oControl.Visible = False      'Checkbox
     oControl = oDialogo.getControl("chkImprimir")
      With oControl.getModel
         .TriState = True        'Triple state
     End With
 
oDialog.execute()
oDialog.dispose()
End Sub

Właściwość aktywacji/dezaktywacji nazywa się Enabled czyli

Kod: Zaznacz cały

oControl.Enabled=True/False
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Maxbert
Posty: 28
Rejestracja: czw wrz 14, 2017 12:29 pm

Re: Włączenie / wyłączenie formantu

Post autor: Maxbert »

Przykładowe makro jest dla mnie nie zrozumiałe ale dziękuję bardzo bo naprowadziło mnie chyba na dobry trop. Uprościłem maksymalnie to co chciałem napisać (w załączeniu) i działa.
Jedyny problem jaki się pojawił to w sytuacji gdy zapisałem makro jako funkcja po uruchomieniu pliku wyskakuje mi "Błąd pracy BASIC,a. Nie ustawiono zmiennej obiektu". Taki błąd nie wyskakuje gdy jest to zwykła procedura.
Co ja tam źle zadeklarowałem?

PS. dot. załączonego arkusza: pole E2 zmienia ilość dostępnych opcji pola wyboru max. ....
Załączniki
on_off_formant.ods
(11.87 KiB) Pobrany 172 razy
AOO 4.1.14, LO 7.5.5.2 (X86_64), Windows 10
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Włączenie / wyłączenie formantu

Post autor: Jermor »

Nie czuję się władny odpowiedzieć ci dlaczego tak się dzieje. Na to jestem za słaby. Zauważyłem, jednak że ta sytuacja występuje tylko przy ładowaniu arkusza do pamięci. Potem funkcja działa już prawidłowo. Więc aby doraźnie uniknąć tych komunikatów poprawiłem twój kod na taki:

Kod: Zaznacz cały

function onoff_formant (id as Integer, stan as boolean)
On local Error GoTo End_Of_Function
Dim przycisk
Dim formularz
Dim formant
formant = ThisComponent.CurrentController.ActiveSheet.DrawPage.Forms
formularz = formant.getByName("Formularz")
przycisk = formularz.getByIndex(id)
przycisk.Enabled = stan
End_Of_Function:
End function
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 527
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Włączenie / wyłączenie formantu

Post autor: Rafkus »

w podręczniku https://wiki.openoffice.org/wiki/Docume ... With_Forms opisują inny dostęp do elementów formularza.
W twoim przypadku zastosuj kod:

Kod: Zaznacz cały

function onoff_formant (id as integer, stan as boolean)as string

  Dim przycisk as variant
  Dim formularz as variant
  Dim formantas as variant

   formant=ThisComponent.getSheets().getByIndex(0)
   formularz=formant.getDrawPage().getForms().getByName("Formularz")
   przycisk = formularz.getByIndex(id)

   przycisk.Enabled = stan
   if stan = 0 then onoff_formant = "off" else onoff_formant = "on"
End function
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Maxbert
Posty: 28
Rejestracja: czw wrz 14, 2017 12:29 pm

Re: Włączenie / wyłączenie formantu

Post autor: Maxbert »

Wszystko działa tak jak chciałem. Rozwiązanie Jermor-a mało "eleganckie" ale skuteczne. Do swoich celów zastosuje wersję od Rafkus-a która jest i "elegancka" i skuteczna i do tego bardzo czytelna. Obu Panom dziękuję za pomoc.
AOO 4.1.14, LO 7.5.5.2 (X86_64), Windows 10
ODPOWIEDZ