❤️ Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! ❤️
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] Button/Schaltfläche Makro

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Tschubi
Beiträge: 159
Registriert: Fr 13. Nov 2015, 12:09

[gelöst] Button/Schaltfläche Makro

Beitrag von Tschubi » Fr 29. Jul 2022, 13:55

Hallo,

ich habe zwei Buttons eingefügt welche jeweils unterschiedliche Makros ausführen die widerrum verschiedene Spalten aus- und wieder einblenden. Wenn ich nun Button1 klicke möchte ich im zugeordneten Makro den Button2 auch wieder auf Ursprung setzen falls dieser zuvor geklickt wurde und umgekehrt das gleiche mit Button2.

habe es ganz simple mit setzen von

Code: Alles auswählen

CommandButton1.Enabled = False
CommandButton1.Enabled = True
versucht. Aber funktioniert natürlich nicht. :-(
Fehler ObjektVariable nicht belegt
Ist mein Ansatz zu einfach gedacht und es Bedarf mehr Aufwand? Wie kann ich das am Besten umsetzen, idealer Weise gerne mit Beispiel.ods :-)

Wenn ein Button gedrückt wurde wird das ja auch optisch dargestellt, kann man das auch deaktivieren so das der Button optisch immer gleich bleibt?

Danke schon mal!
Zuletzt geändert von Tschubi am Sa 30. Jul 2022, 15:43, insgesamt 1-mal geändert.
Ubuntu 22.04.2 LTS / Windows 11 / LO 7.3.7.2

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Button/Schaltfläche Makro

Beitrag von F3K Total » Fr 29. Jul 2022, 14:39

Moin,
ich habe mal ein Beispiel gebaut, drei Schaltflächen:
  • ungerade Spalten ausblenden
  • gerade Spalten ausblenden
  • alle Spalten einblenden

Code: Alles auswählen

Sub show_hide (event)
    oSheet = ThisComponent.CurrentController.activeSheet
    nMax = 9' Spaltenanzahl
    oButton = event.Source.Model
    bVisible = true
    select case oButton.Tag
    case "U"
        for i = 0 to nMax
            if i mod 2 <> 0 then
                oSheet.Columns(i).IsVisible = bVisible
            else
                 oSheet.Columns(i).IsVisible = not bVisible 
            endif
        next i
    case "G"
        for i = 0 to nMax
            if i mod 2 <> 0 then
                oSheet.Columns(i).IsVisible = not bVisible
            else
                 oSheet.Columns(i).IsVisible = bVisible 
            endif
        next i
    case "A"
        bVisible = true 
        for i = 0 to nMax
            oSheet.Columns(i).IsVisible = bVisible
        next i
   end select
End Sub
Dazu habe ich in der Zusatzinfomation der jeweiligen Schaltfläche "U" für ungerade, "G" für gerade und "A" für alle eingetragen.
Über

Code: Alles auswählen

oButton = event.Source.Model.Tag
ließt man die Zusatzinformation aus.
Beispieldatei anbei.

Gruß R
Dateianhänge
Spalten_ausblenden.ods
(35.44 KiB) 125-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Tschubi
Beiträge: 159
Registriert: Fr 13. Nov 2015, 12:09

Re: Button/Schaltfläche Makro

Beitrag von Tschubi » Fr 29. Jul 2022, 18:01

Danke F3K Total.

Ich weiß nicht so recht wie mir das helfen kann / soll.

Button 1 führt Sub Sorte_umschalten (event) aus
Button 2 führt Sub Eingabe_Datenerfassung (event) aus

Bei beiden Routinen wird zu Beginn S_alle_einblenden ausgeführt so das sichergestellt ist, dass immer von der Ausgangslage die jeweils gewünschten Spalten ausgeblendet werden.

Mit S_zelle_springen möchte ich in die Zelle D3 springen was auch funktioniert nur bringt das nix wenn ich zu weit nach unten oder rechts gescrollt bin. Das würde ich gern noch so erweitern, dass immer mit ganz nach oben und nach links gescrollt wird so das die Zelle D3 auch immer zu sehen ist.

Beide Button sind bei Fokussieren bei Klick auf NEIN und Umschalten auch JA gesetzt.

Und mein Ziel wäre wie gesagt das wenn ich Button 1 klicke das Button 2 immer auf Ausgangszustand gesetzt wird und umgekehrt bei Button 1 wenn ich Button 2 klicke.

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Sorte_umschalten (event)
rem Sub Routine aufrufen
S_alle_einblenden 'erst einmal alles wieder einblenden vor geziehltem ausblenden

    dim arows
    arows() = array(6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23) 'nur relavante Spalten anzeigen
    oSheet = thisComponent.sheets.getbyname("Daten")
    ocolumns = oSheet.Columns
    ocmd = event.source.model
    if ocmd.state = 1 then
        ocmd.label = "Alles anzeigen"
        for i = 0 to ubound(arows)
            ocolumns(arows(i)).isVisible = false
        next i
    else
        ocmd.label = "Details reduzieren"
        for i = 0 to ubound(arows)
            ocolumns(arows(i)).isVisible = true
        next i
    end if

rem Sub Routine aufrufen    
S_zelle_springen 'in Zelle D3 springen
    
End Sub

Sub Eingabe_Datenerfassung (event)
rem Sub Routine aufrufen
S_alle_einblenden 'erst einmal alles wieder einblenden vor geziehltem ausblenden

    dim arows
    arows() = array(1,2,4,8,9,12,13,15,18,19,20,21,22,23,24,25,26,27,31) 'nur Datenspalten zur Eingabe anzeigen
    oSheet = thisComponent.sheets.getbyname("Daten")
    ocolumns = oSheet.Columns
    ocmd = event.source.model
    if ocmd.state = 1 then
        ocmd.label = "Alles anzeigen"
        for i = 0 to ubound(arows)
            ocolumns(arows(i)).isVisible = false
        next i
    else
        ocmd.label = "Datenerfassung"
        for i = 0 to ubound(arows)
            ocolumns(arows(i)).isVisible = true
        next i
    end if
    
rem Sub Routine aufrufen    
S_zelle_springen 'in Zelle D3 springen für Datenerfassung
End Sub


Sub S_alle_einblenden
    oSheet = thisComponent.sheets.getbyname("Daten")
    ocolumns = oSheet.Columns
    ocolumns.IsVisible = true
End Sub


sub S_zelle_springen
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")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$D$3"

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

end sub
Ubuntu 22.04.2 LTS / Windows 11 / LO 7.3.7.2

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2541
Registriert: Fr 10. Dez 2010, 10:01

Re: Button/Schaltfläche Makro

Beitrag von karolus » Fr 29. Jul 2022, 20:45

Hallo

hier ist ein Beispiel das abhängig von der Beschriftung der Schaltfläche durch drei Zustände wechselt und die Beschriftung anpasst. da ich keine Lust habe deine verquere Logig zu durchschauen nur beispielhaft für die ersten 5 Spalten.
Das musst du im Quelltext noch erweitern auf deine ca.30 Spalten (ausblenden→0 , einblenden→1)

Code: Alles auswählen

sub test(event)

columns = thiscomponent.Sheets.getByName("Daten").Columns
reduz = array(1,1,0,1,0)
'↓↑beides erweitern 
erfassen = array(0,0,1,1,1)
with event.source.model
	if .label = "alles" then
		columns.IsVisible = true
	   .label = "erfassen"
	   exit sub
	end if

	if .label = "erfassen" then
	   for i = 0 to ubound(erfassen)
	   	   columns(i).IsVisible = erfassen(i)
	   next i
	   .label = "reduzieren"
	   exit sub
	end if
	
	if .label = "reduzieren" then
	   for i = 0 to ubound(reduz)
	   		columns(i).IsVisible = reduz(i)
	   next i
	   .label = "alles"
	end if
end with
end sub

tri_state_button.ods
(9.71 KiB) 102-mal heruntergeladen
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Tschubi
Beiträge: 159
Registriert: Fr 13. Nov 2015, 12:09

Re: Button/Schaltfläche Makro

Beitrag von Tschubi » Sa 30. Jul 2022, 15:05

Hallo karolus,

ja die Logik habe ich mir zusammen gesucht weil ich selbst keine wirkliche Erfahrung damit habe :-(

Danke dir, habe mir dein Beispiel für alle meine Spalten erweitert und funktioniert. :-)

VG
Ubuntu 22.04.2 LTS / Windows 11 / LO 7.3.7.2

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2541
Registriert: Fr 10. Dez 2010, 10:01

Re: Button/Schaltfläche Makro

Beitrag von karolus » Sa 30. Jul 2022, 15:49

Hallo

Noch ein wenig gut gemeinte Kritik:

Code: Alles auswählen

arows() = array(1,2,4,8,……
arows ist ein verdammt schlechter Name für eine Liste von Spaltenindexen
Wenn man über sowas beim Schreiben (oder per copy&paste) nicht umgehend nachdenkt, versteht man 20 Minuten später den eigenen Code nicht mehr.
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Tschubi
Beiträge: 159
Registriert: Fr 13. Nov 2015, 12:09

Re: [gelöst] Button/Schaltfläche Makro

Beitrag von Tschubi » So 31. Jul 2022, 10:31

Hallo karolus,

das stimmt wohl :-)

Danke
Ubuntu 22.04.2 LTS / Windows 11 / LO 7.3.7.2


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten