Office: Schaltflächen sortieren

Helfe beim Thema Schaltflächen sortieren in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo liebes Forum, ich hätte da mal wieder eine kurze Frage: Gibt es eine Möglichkeit die Schaltflächen (die unter dem Punkt Entwicklertools zur... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Ag.man, 7. Februar 2011.

  1. Ag.man Erfahrener User

    Schaltflächen sortieren


    Hallo liebes Forum,

    ich hätte da mal wieder eine kurze Frage:

    Gibt es eine Möglichkeit die Schaltflächen (die unter dem Punkt Entwicklertools zur Verfügung stehen) zu sortieren?

    Ich habe nämlich auf einem Tabellenblatt ca. 30 Schaltflächen (Buttons), die jeweils mit den Makros zu anderen Tabellenblättern verknüpft sind.

    Da jedes Mal neue Schaltflächen dazu kommen ist es umständlich diese immer wieder alphabetisch zu sortieren. Geht es auch nicht einfacher?

    Danke schon mal für die Hilfe und richtige Gedanken!

    Euer
    Ag.man
     
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    die Symbolleisten unter 2007 zu verändern ist sehr aufwendig. Warum sortierst Du Sie nicht gleich bei der Erstellung?
     
    Hajo_Zi, 7. Februar 2011
    #2
  3. miriki Erfahrener User
    Wenn ich Deine Frage richtig interpretiere:

    Mit der Symbolleiste hattest Du nur den Hinweis gegeben, woher die Buttons kommen. Du meintest aber schon, daß die Buttons auf dem Tabellenblatt liegen?

    Und Du baust sozusagen einen Button jedesmal dann ein, wenn ein neues Blatt dazukommt, um dann mit dem neuen Button auf das entsprechende Blatt wechseln zu können. Diese Buttons sind also sowas wie ein Inhaltsverzeichnis?

    Und diese 30+ Buttons möchtest du jeweils sortieren, also z.B. alphabetisch nach deren Beschriftung?

    Dann geht's erstmal so pauschal nicht... Da bleibt Dir tatsächlich nur das manuelle Herumschubsen der Buttons im Entwurfsmodus.

    Es gäbe allerdings schon eine Möglichkeit, die Buttons per VBA anzuordnen. Das ist aber etwas aufwändiger, wenn auch machbar, solange die Buttons regelmäßig, z.B. alle untereinander oder so, liegen sollen.

    a) alle Buttons (deren Name und Beschriftung) in ein Array einlesen
    b) das Array nach Beschriftung sortieren
    c) in einer Schleife die Position der Buttons neu festlegen

    Gruß, Michael
     
  4. Ag.man Erfahrener User

    Schaltflächen sortieren

    Hallo Michael,
    du hast es richtig verstanden. Es geht um eine Art Inhaltsverzeichnis. Ich möchte die Buttons, die auf dem Tabellenblatt angelegt sind, sortieren, damit die Bezeichnungen für Buttons auch alphabetisch angeordnet sind.
    Werde ich mir mal heute Abend vornehmen und euch posten, wenns klappt.

    Danke vielmals!

    Ag.man
     
  5. miriki Erfahrener User
    Dann hilft Dir vielleicht mein Ansatz im Anhang weiter...

    Gruß, Michael
     
  6. Ag.man Erfahrener User
    Hallo Michael,

    ich merke gerade, dass die Buttons / Steuerelemente nicht als ActiveX, sondern als Formularsteuerelemente erstellt wurden.
    Ich arbeite noch an der Lösung. Wie ich sehe, kann ich beide nicht vermischen und wie es in einem anderen Forum steht, sind die Formularelemente nicht die moderne Art...

    Grüße

    Ag.man
     
  7. Beverly
    Beverly Erfahrener User
    Hi,
    Code:
    Sub SchalterSortieren()
       Dim cmdSchalter As Button
       Dim intSchalter As Integer
       Dim lngZeile As Long
       Dim intZaehler As Integer
       ReDim arrSchalter(0)
       For Each cmdSchalter In ActiveSheet.Buttons
          ReDim Preserve arrSchalter(0 To UBound(arrSchalter()) + 1)
          arrSchalter(UBound(arrSchalter())) = cmdSchalter.Caption
       Next cmdSchalter
       QuickSort arrSchalter(), 1, UBound(arrSchalter())
       lngZeile = 2
       For intSchalter = 1 To UBound(arrSchalter())
          For Each cmdSchalter In ActiveSheet.Buttons
             If cmdSchalter.Caption = arrSchalter(intSchalter) Then
                cmdSchalter.Top = Rows(lngZeile).Top
                cmdSchalter.Left = Columns(4).Left
                lngZeile = lngZeile + 3
             End If
          Next cmdSchalter
       Next intSchalter
    End Sub
    
    Sub QuickSort(ByRef VA_Array, Optional V_Low1, Optional V_High1)
    ' [url]http://www.herber.de/forum/archiv/108to112/t109556.htm[/url]
        On Error Resume Next
        Dim V_Low2 As Long, V_High2 As Long
        Dim V_Val1, V_Val2 As Variant
        If IsMissing(V_Low1) Then
            V_Low1 = LBound(VA_Array, 1)
        End If
        If IsMissing(V_High1) Then
            V_High1 = UBound(VA_Array, 1)
        End If
        V_Low2 = V_Low1
        V_High2 = V_High1
        V_Val1 = VA_Array((V_Low1 + V_High1) / 2)
        While (V_Low2 <= V_High2)
            While (VA_Array(V_Low2) < V_Val1 And _
                V_Low2 <V_High1> V_Val1 And _
                V_High2 > V_Low1)
                V_High2 = V_High2 - 1
            Wend
            If (V_Low2 <V_High2> V_Low1) Then Call _
            QuickSort(VA_Array, V_Low1, V_High2)
        If (V_Low2 < V_High1) Then Call _
            QuickSort(VA_Array, V_Low2, V_High1)
    End Sub
    
    Bis später,
    Karin
     
    Beverly, 7. Februar 2011
    #7
  8. miriki Erfahrener User

    Schaltflächen sortieren

    Das wäre auch kein unlösbares Problem. Aber die ActiveX-Dinger sind schon echt schöner...

    Gruß, Michael
     
  9. Beverly
    Beverly Erfahrener User
    Die ActiveX-Steuerelemente haben gegenüber den Steuerelementen aus der Formular-Symbolleiste den Vorteil, dass sie teilweise Codemäßig "leichter" zu handhaben sind und mehr Formatierungsmöglichkeiten bieten. Allerdings gibt es eine ganze Reihe Situationen, in denen die AxtvieX-Steuerelemente ihr "schönes" Aussehen verlieren (DropDown-Pfeile werden kleiner, Größe des Elements ändert sich usw.), was bei den Steuerelementen aus der Formular-Symbolleiste nicht der Fall ist. Man kann also nicht so absolut sagen, dass die ActiveX-Elemente besser sind, sondern man sollte es eher so sehen, dass man sie dann einsetzt, wenn man etwas erreichen will, was mit den Formular-Elementen nicht möglich ist.

    Bis später,
    Karin
     
    Beverly, 7. Februar 2011
    #9
  10. Ag.man Erfahrener User
    Liebe Karin,

    danke für die Hilfe! Bis jetzt konnte ich zeitlich bedingt mir keine eigenen Gedanken über den Code machen. Und wenn ich sehe, was du da aus den Archiven holst, dann weiß ich auch nicht mehr weiter. Das ist wie das russische Alphabet für einen Chinesen.

    Ich habe jedoch vorerst mit der Methode Copy+Paste festgestellt, dass beim Sortieren sich die Buttons immer weiter nach unten verschieben...

    Wie kann ich dann die Buttons nicht nur in einer Linie (vertikal), sondern auch als Matrix darstellen (Zeilen und Spalten), z.B. im Bereich A1:G57 oder so ähnlich?

    Danke für alles!

    Ag.man
     
  11. miriki Erfahrener User
    Wenn Du Dir folgenden Code-Teil in meiner Routine ansiehst:
    Code:
        'Neu-Platzierung der Objekte
        For n = 1 To nn
    
            yz = (n - 1) * 2 + 5
            xz = 2
    
            yp = ActiveSheet.Cells(yz, xz).Top
            xp = ActiveSheet.Cells(yz, xz).Left
    
            Set obj = ActiveSheet.Buttons(btn(n, 1))
            obj.Top = yp
            obj.Left = xp
    
        Next n
    Hier wird mit yz und xz die Zelle bestimmt, in der der Button liegen soll. Danach wird daraus die "echte" Position berechnet, indem die linke obere Ecke der Zelle bestimmt wird.

    yz berechnet sich hierbei als "jede 2. Zeile, wobei in Zeile 5 angefangen wird". Wenn Du in einer Matrix platzieren möchtest, mußt Du nur yz und xz anders berechnen:
    Code:
        Dim ym As Long
        Dim xm As Long
    
        [...]
    
            ym = Int((n - 1) / 4)
            xm = (n - 1) Mod 4
            yz = ym * 2 + 5
            xz = xm * 2 + 2
    So würden die Buttons in einer Matrix mit 4 Spalten abgelegt (dafür sorgt das "/ 4" bzw. "Mod 4"), jeweils eine Zelle Zwischenraum (dafür sorgt das "* 2"), linke obere Zelle B5 (dafür sogt das "+ 5" bzw. "+ 2").

    Gruß, Michael
     
  12. Beverly
    Beverly Erfahrener User
    Hi,

    ich habe gerade gesehen, dass in meinem letzten Beitrag der Code nicht richtig dargestellt wird, deshalb den kompletten und erweiteterten Code noch einmal:
    Code:
    Sub SchalterSortieren()
       Dim cmdSchalter As Button
       Dim intSchalter As Integer
       Dim lngZeile As Long
       Dim intZaehler As Integer
       Dim intSpalte As Integer
       ReDim arrSchalter(0)
       For Each cmdSchalter In ActiveSheet.Buttons
          ReDim Preserve arrSchalter(0 To UBound(arrSchalter()) + 1)
          arrSchalter(UBound(arrSchalter())) = cmdSchalter.Caption
       Next cmdSchalter
       QuickSort arrSchalter(), 1, UBound(arrSchalter())
       lngZeile = 2
       intSpalte = 1
       For intSchalter = 1 To UBound(arrSchalter())
          For Each cmdSchalter In ActiveSheet.Buttons
             If cmdSchalter.Caption = arrSchalter(intSchalter) Then
                cmdSchalter.Top = Rows(lngZeile).Top
                cmdSchalter.Left = Columns(intSpalte).Left
                intSpalte = intSpalte + 1
             End If
          Next cmdSchalter
          ' wenn Spalte 7 erreicht dann wieder mit Spalte 1 beginnen
          If intSpalte Mod 7 = 1 Then
             intSpalte = 1
             lngZeile = lngZeile + 3
          End If
       Next intSchalter
    End Sub
    
    Sub QuickSort(ByRef VA_Array, Optional V_Low1, Optional V_High1)
    ' [url]http://www.herber.de/forum/archiv/108to112/t109556.htm[/url]
        On Error Resume Next
        Dim V_Low2 As Long, V_High2 As Long
        Dim V_Val1, V_Val2 As Variant
        If IsMissing(V_Low1) Then
            V_Low1 = LBound(VA_Array, 1)
        End If
        If IsMissing(V_High1) Then
            V_High1 = UBound(VA_Array, 1)
        End If
        V_Low2 = V_Low1
        V_High2 = V_High1
        V_Val1 = VA_Array((V_Low1 + V_High1) / 2)
        While (V_Low2 <= V_High2)
            While (VA_Array(V_Low2) < V_Val1 And _
                V_Low2 < V_High1)
                V_Low2 = V_Low2 + 1
            Wend
            While (VA_Array(V_High2) > V_Val1 And _
                V_High2 > V_Low1)
                V_High2 = V_High2 - 1
            Wend
            If (V_Low2 <= V_High2) Then
                V_Val2 = VA_Array(V_Low2)
                VA_Array(V_Low2) = VA_Array(V_High2)
                VA_Array(V_High2) = V_Val2
                V_Low2 = V_Low2 + 1
                V_High2 = V_High2 - 1
            End If
        Wend
        If (V_High2 > V_Low1) Then Call _
            QuickSort(VA_Array, V_Low1, V_High2)
        If (V_Low2 < V_High1) Then Call _
            QuickSort(VA_Array, V_Low2, V_High1)
    End Sub
    
    Nur der 2. Codeteil mit dem Link zum Ursprung ist aus meinem Archiv - der erste Teil ist live. :-)

    Bis später,
    Karin
     
    Beverly, 8. Februar 2011
    #12
  13. Ag.man Erfahrener User

    Schaltflächen sortieren

    Danke euch Beiden!

    Langsam, denke ich, kriege ich die Kurve ohne an Geschwindigkeit zu verlieren!

    Ich melde mich kurzfristig, wenn das alles fertig ist!

    Lieben Danke für alles!

    Ag.man (Alex)
     
  14. Ag.man Erfahrener User
    Here I am once again,

    ich habe den Code von Michael ausprobiert und die Zellen, wie beschrieben nach oben und unten geschraubt. Dabei habe ich festgestellt, dass die erste Spalte immer einen Button länger ist, als der Rest und die Sortierung erfolgt auch nicht.

    Ich habe Viertelstunden auf den Code gestarrt, versucht mich mit dem Code auseinander zu setzen und wenige Infos konnte ich behalten, geschweige denn verstehen... Ich glaube ich lass es mit VBA. Bin einfach nicht dafür geboren...nicht das ich aufgeben will, aber beim Adobe Enterprise ist es die gleiche Geschichte. So viele Idee zum Erstellen von Formularen, aber null praktische Ahnung.

    Karin,

    danke dir natürlich auch, aber muss es nicht heißen "private Sub QuickSort"? :)

    Alles Gute allen

    Alex
     
  15. Beverly
    Beverly Erfahrener User
    Hi Alex,

    1. Frage: warum sollte es Private Sub heißen müssen?
    2. Frage: hast du den Code getestet - sortiert er nicht richtig?

    Bis später,
    Karin
     
    Beverly, 8. Februar 2011
    #15
Thema:

Schaltflächen sortieren

Die Seite wird geladen...
  1. Schaltflächen sortieren - Similar Threads - Schaltflächen sortieren

  2. Makro Schaltflaechen vervielfaeltigen sich....

    in Microsoft Excel Hilfe
    Makro Schaltflaechen vervielfaeltigen sich....: Hallo Zusammen, ich habe eine Exceldatei, die seit ein paar Wochen sehr langsam zu öffnen und zu bearbeiten ist. Zuvor war sie ca. 8MB gross, was sich verdoppelt hat. Ich habe alle Zellen die...
  3. Schaltfläche keine Funktion

    in Microsoft Access Hilfe
    Schaltfläche keine Funktion: Hallo, ich habe Freitag eine Datendank erstellt, mit einem Formular und einer Schaltfläche. Hat auch alles funktioniert. Heute nach dem Start der Datenbank hat die Schaltfläche keine Funktion...
  4. Zufällige Zahl wiedergeben mit Schaltfläche/ Button

    in Microsoft Excel Hilfe
    Zufällige Zahl wiedergeben mit Schaltfläche/ Button: Hallo zusammen Ich habe in einer Tabelle in den Zellen A1 - A2000 unterschiedliche Zahlen stehen. Nun möchte ich in einem anderen Tabellenblatt einen Button generieren. Wenn man auf diesen...
  5. Klick Schaltfläche Zelle markieren in der die Schaltfläche liegt

    in Microsoft Excel Hilfe
    Klick Schaltfläche Zelle markieren in der die Schaltfläche liegt: Hallo Zusammen Ich bin seit mehreren Tagen am suchen: Ich möchte mit vba (bin Neuling) die Zelle markieren/aktiv setzen die hinter der Schaltfläche liegt. Es gibt mehrere gleiche Schaltflächen...
  6. Änderung Schaltflächenfarbe beim Anklicken

    in Microsoft Excel Hilfe
    Änderung Schaltflächenfarbe beim Anklicken: Hallo zusammen. Ich habe folgende Frage: Auf meinem Arbeitsblatt werden Zellen durch Anklicken von Schaltflächen, auf denen Makros hinterlegt sind, mit Nachnamen befüllt. Die Schaltflächen sind...
  7. mehrere Tabellenblätter über eine Schaltfläche mit nur einem Makro sortieren.

    in Microsoft Excel Hilfe
    mehrere Tabellenblätter über eine Schaltfläche mit nur einem Makro sortieren.: Hallo Liebes Forum! Würde wieder eure Hilfe benötigen. Ich habe eine Excel mit mehreren Tabellenblättern, die Inhaltlich im Bereich A9:M33 (können auch noch mehr Zeilen werden) alle gleich sind....
  8. Excel Spalten Sortieren mit Schaltfläche

    in Microsoft Excel Hilfe
    Excel Spalten Sortieren mit Schaltfläche: Hallo ich habe folgendes Problem: In einer Tabelle möchte ich sortieren über eine Schaltfläche/Button. Beispiel: in Spalte A stehen Zunamen in Spalte B Zeiten in Spalte C Tätigkeiten...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden