Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel A-Z-Liste mit VBA makro

Excel A-Z-Liste mit VBA makro
18.07.2016 15:28:29
Patrick
Hallo liebes Forum,
im Anhang befindet sich eine Excel-Datei die eine A-Z-Liste enthält.
https://www.herber.de/bbs/user/107088.xlsm
In der ersten Zeile befinden sich Buchstaben A-Z.
Klickt man nur auf eine der Buchstaben so springt das Arbeitsblatt(per Makro Application.ActiveWindow.ScrollRow = Zeile) direkt auf eine bestimmte Zeile (Beim Buchstaben "K" z.B. direkt in die Zeile mit dem Buchstaben "K")
So kann man per Klick direkt auf die gewünschte Zeile springen.
(Die Liste soll später mit den Buchstaben entsprechenden Daten gefüllt werden.
Jeder Buchstabe hat leere Zeilen darunter)
Zusätzlich soll die Liste noch für jeden Buchstaben um Zeilen erweiterbar sein und trotzdem sollte man mit den Buchstaben aus der ersten Zeile die jeweiligen Zeilen darunter noch erreichen können.(was mit Application.ActiveWindow.ScrollRow = Zeile nicht mehr möglich ist da die Zeilen sich beim Hinzufügen ja verschieben.)
Mit der Datei wird die Problemstellung hoffentlich klar.
Hab mal versucht ne Art Lösung zu finden doch die is wohl mehr als Amateurhaft.
Wäre schön wenn jemand von euch eine Idee hätte wie mans besser lösen könnte.
aller beste Grüße
Patrick

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel A-Z-Liste mit VBA makro
18.07.2016 16:00:41
UweD
Hallo
das ginge so...
- Rechtsclick auf den Tabellenblattreiter
- Code anzeigen
- Diesen Code dort reinkopieren
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo Fehler
    Dim C, RR As Long
    If Not Intersect(Range("A1:Z1"), Target) Is Nothing Then
        Application.EnableEvents = False
        RR = Cells.SpecialCells(xlCellTypeLastCell).Row 'Letzte Zeile des gesamten Blattes 
        Set C = Range("A2:Z" & RR).Find(Target, LookIn:=xlValues, LookAt:=xlWhole)
        If Not C Is Nothing Then
            C.Select
        End If
    End If
    Err.Clear
Fehler:
    Application.EnableEvents = True
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

== Den Rest kannst du löschen
Gruß UweD
Über Rückmeldungen würde ich mich freuen
Anzeige
AW: Excel A-Z-Liste mit VBA makro
18.07.2016 16:18:00
Mullit
Hallo,
probiers mal hiermit:
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Cells(1, 1).Resize(1, 26)) Is Nothing Then _
  If Target.Count = 1 Then _
    Call deinMakro(pvstrChar:=Target.Value)
End Sub

Private Sub deinMakro(ByVal pvstrChar As String)
   Dim vntReturn As Variant
   vntReturn = Application.Match(pvstrChar, Cells(2, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1), 0)
   If Not IsError(vntReturn) Then
     Application.ActiveWindow.ScrollRow = Cells(vntReturn + 1, 1).Row
   Else
     Call MsgBox("Es konnte kein entsprechender Buchstabe gefunden werden...", vbExclamation)
   End If
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
AW: Excel A-Z-Liste mit VBA makro
18.07.2016 16:37:01
Mullit
Hallo,
..ah, noch besser so:
'...
Application.ActiveWindow.ScrollRow = vntReturn + 1
'...

Gruß, Mullit
AW: Excel A-Z-Liste mit VBA makro
18.07.2016 19:34:56
Patrick
Wow vielen Dank Leute,
bin immer wieder erstaunt wie schnell und wie gut die Hilfen hier in diesem Forum sind.
Danke UweD, danke Mullit war genau das was ich gebraucht habe!
AW: Excel A-Z-Liste mit VBA makro
18.07.2016 19:38:46
Patrick
Achso,
vielleicht wenn wir gerade schon dabei sind.
Könntet ihr auch ein Makro erstellen was mir automatisch eine Zeile hinzufügt?
Also praktisch neben jeder der kleinen "Tabellen"(A-Z) eine Schaltfläche die mir dann automatisch in der richtigen Formatierung eine weitere leere Zeile in die jeweilge "Tabelle" hinzufügt.
Aller Besten Dank,
Patrick
Anzeige
AW: Excel A-Z-Liste mit VBA makro
18.07.2016 20:25:16
Mullit
Hallo,
könnte man zwar machen, aber bevor man das erneut nachprogrammiert wäre es vielleicht besser, Du würdest Dir die dynamischen/intelligenten Tabellen (Tabellen in Tabellen) anschauen, da ist genau das Feature eingebaut...
Gruß, Mullit
AW: Excel A-Z-Liste mit VBA makro
19.07.2016 07:33:48
Patrick
Danke für den Tipp!
Doch wenn ich die dynamischen Tabellen in meinem Fall anwende verhaut es mir die komplette Formatierung da meine "Buchstabenblöcke" ja über mehrere Spalten gehen.
Kann man das irgendwie umgehen?
Gruß Patrick
AW: Excel A-Z-Liste mit VBA makro
19.07.2016 09:15:48
Mullit
Hallo,
ja stimmt schon, fiel mir auch noch gestern auf, da könnts mit den dyn. Tabs schwierig werden, also machen wir uns doch nochmal ans proggen, an Stelle vieler Buttons wäre da ein Doppelclick auf Deine Buchstaben-Verbundzellen-Header vielleicht noch besser:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim objCell As Range, objRange As Range
Set objRange = Cells(2, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1)
For Each objCell In objRange
    With objCell
        If .MergeCells Then
          If Target.Cells(1, 1).Value = .Value Then
            If .Interior.Color = RGB(189, 215, 238) Then
              Cancel = True
              Call prcAddNewRow(probjRange:=objRange, _
                 pvstrChar:=Chr$(Asc(.Value) + 1))
              Set objCell = Nothing
              Exit For
            End If
          End If
        End If
    End With
Next
Set objRange = Nothing
End Sub

Private Sub prcAddNewRow(ByRef probjRange As Range, ByVal pvstrChar As String)
   Dim objCell As Range
   Dim vntReturn As Variant
   vntReturn = Application.Match(pvstrChar, probjRange, 0)
   If Not IsError(vntReturn) Then
     Application.ScreenUpdating = False
     If Rows(vntReturn).Insert(Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove) Then
       With Cells(vntReturn, 1)
           .Resize(1, 26).MergeCells = True
           With .MergeArea
               Call prcSetBorderStyle(.Borders(xlEdgeLeft), .Borders(xlEdgeTop), _
                .Borders(xlEdgeBottom), .Borders(xlEdgeRight))
           End With
           Call prcSetBorderStyle(Cells(vntReturn + 1, 1).MergeArea.Borders(xlEdgeTop))
       End With
     Else
       Call MsgBox("Die Zeile konnte nicht eingefügt werden...", vbExclamation)
     End If
     Application.ScreenUpdating = True
   ElseIf pvstrChar = "[" Then
     vntReturn = Application.Match("Z", probjRange, 0)
     If Not IsError(vntReturn) Then
         Application.ScreenUpdating = False
         For Each objCell In Cells(vntReturn + 2, 1).Resize(Rows.Count - (vntReturn + 2), 1)
            With objCell
                If .MergeArea.Cells.Count > 26 Then
                  If Rows(.Row).Insert(Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove) Then
                     With Cells(.Row - 1, 1)
                         .Resize(1, 26).MergeCells = True
                         With .MergeArea
                             Call prcSetBorderStyle(.Borders(xlEdgeLeft), .Borders(xlEdgeTop), _
                              .Borders(xlEdgeBottom), .Borders(xlEdgeRight))
                         End With
                     End With
                     Call prcSetBorderStyle(Cells(.Row, 1).MergeArea.Borders(xlEdgeTop))
                  Else
                     Call MsgBox("Die Zeile konnte nicht eingefügt werden...", vbExclamation)
                  End If
                  Exit For
                End If
            End With
         Next
         Application.ScreenUpdating = True
         If objCell Is Nothing Then
           Call MsgBox("Abschließender Verbund-Bereich nach 'Z' muß mehrere Zeilen umfassen...", vbExclamation)
         Else
           Set objCell = Nothing
         End If
     Else
         Call MsgBox("Es konnte kein entsprechender Buchstabe gefunden werden...", vbExclamation)
     End If
   Else
     Call MsgBox("Es konnte kein entsprechender Buchstabe gefunden werden...", vbExclamation)
   End If
End Sub

Private Sub prcSetBorderStyle(ParamArray ppavntBorders() As Variant)
Dim ialngIndex As Long
For ialngIndex = 0 To Ubound(ppavntBorders)
    With ppavntBorders(ialngIndex)
        .LineStyle = xlContinuous
        .Color = RGB(189, 215, 238)
        .Weight = xlThin
    End With
Next
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Als kleine Anmerkung noch: man sollte es mit Verbundzellen möglichst nicht übertreiben...
Gruß, Mullit
Anzeige
AW: Excel A-Z-Liste mit VBA makro
19.07.2016 09:22:37
Patrick
Perfekt!
Sieht nach viel Arbeit aus und die ist nicht Selbstverständlich.
Einfach nur Klasse, allerbesten Dank dafür du hast mir wirklich sehr geholfen.
Beste Grüße
Patrick
...alles klar, prima...owT
19.07.2016 09:47:50
Mullit
AW: Excel A-Z-Liste mit VBA makro
19.07.2016 10:06:08
UweD
Hallo
ich hab auch auf zusätzliche Knöpfe verzichtet und das bestehende Makro ergänzt
Bei Auswahl der Buchstaben Köpfe wird der Code ausgeführt
Option Explicit 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    On Error GoTo Fehler 
    Dim C, RR As Long, ASCII As Integer, JaNein, Inhalt As String 
    Inhalt = Cells(Target.Row, 1) 'wegen verbundenen Zellen: Wert steht in A 
    Application.EnableEvents = False 
    RR = Cells.SpecialCells(xlCellTypeLastCell).Row 'Letzte Zeile des gesamten Blattes 
    If Not Intersect(Range("A1:Z1"), Target) Is Nothing Then 
        Set C = Range("A2:Z" & RR).Find(Target, LookIn:=xlValues, LookAt:=xlWhole) 
        If Not C Is Nothing Then 
            C.Select 
        End If 
         
    'Neue Zeile einfügen, unter Buchstabe 
    ElseIf Not Intersect(Range("A2:A" & RR), Target) Is Nothing And _
        Len(Inhalt) = 1 Then 
        ASCII = Asc(Inhalt) 
        If ASCII >= 65 And ASCII <= 90 Then 
            JaNein = MsgBox("Neue Zeile ergänzen", vbQuestion + vbYesNo) 
            If JaNein = vbYes Then 
                Rows(Target.Row + 21).Insert xlDown 
                Rows(Target.Row + 22).Copy 
                Rows(Target.Row + 21).PasteSpecial Paste:=xlPasteFormats 
                Application.CutCopyMode = False 
            End If 
        End If 
    End If 
    Err.Clear 
Fehler: 
    Application.EnableEvents = True 
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear 
End Sub 
 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media


Gruß UweD
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige