kenne mich leider nicht so sehr aus und brächte wahrscheinlich nur
einen kleinen Tipp.
ich würde gerne bestimmte Zeilen selektieren und später gruppieren.
Durch eine Sortierung muss ich nur noch schauen von welcher Zeile bis
zu welcher Zeile in einer Spalte der Wert "1A" steht. Diese Zeilen
möchte ich dann Gruppieren... und das für das ganze Tabellenblatt.
Mein Code wäre dazu folgender:
Sub Gruppierung_erstellen2()
i = 1
While i < 65000
While Cells(i, 7) = "1A"
If Start = 1 Then
Anfang = Val(i)
Start = 2
End If
i = i + 1
Wend
Ende = Val(i)
Rows("Anfang" & ":" & "Ende").Select
Selection.Rows.Group
i = i + 1
Start = 1
Wend
End Sub
Ich bekomme aber immer die Fehlermeldung, das ich den falschen
Datentyp in der Zeile:
Rows("Anfang" & ":" & "Ende").Select
verwende.
Wo liegt denn der Fehler? Sind doch alles ganze Zahlen, oder?
Danke
Volker
> Rows("Anfang" & ":" & "Ende").Select
ist Unsinn. Was Du m�chtest, ist
Rows(Anfang & ":" & Ende).Select
also ohne Anf�hrungsstriche, die Deine Variablen zu Strings machten.
Rest nicht �berpr�ft. Die Nicht-Verwendung von .Select nicht angeregt.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Danke für den Hinweis. Bekomme aber immernoch den Fehler mit Typen
unverträglich.
Mir war auch schon klar das ich so die Anfang und Ende zu Strings
mache.
Ohne Select komme ich leider auch nicht aus. Irgendwie stehe ich auf
dem Schlauch
"Volker Schmitt" schrieb:
> ich w�rde gerne bestimmte Zeilen selektieren und sp�ter gruppieren.
> Durch eine Sortierung muss ich nur noch schauen von welcher Zeile bis
> zu welcher Zeile in einer Spalte der Wert "1A" steht. Diese Zeilen
> m�chte ich dann Gruppieren... und das f�r das ganze Tabellenblatt.
zum einen ist das Selektieren der Zellen v�llig unn�tig.
Und je nach Umfang der Tabelle braucht eine Schleife viel zu lange :-(
Schau dir stattdessen mal folgenden L�sungsvorschlag an:
Public Sub MyGroup()
Dim strFind As String
Dim rngFind As Range
Dim lngStart As Long
Dim lngEnd As Long
strFind = "1A"
With ActiveSheet
.Columns("G").Sort Key1:=.Range("G2"), Order1:=xlAscending, Header:=xlYes
Set rngFind = .Columns("G").Find(What:=strFind, SearchDirection:=xlNext)
If rngFind Is Nothing Then
MsgBox "Der Suchwert wurde nicht gefunden!"
Exit Sub
End If
lngStart = rngFind.Row
lngEnd = .Columns("G").Find(What:=strFind, SearchDirection:=xlPrevious).Row
.Rows.Ungroup
.Rows(lngStart).Resize(lngEnd - lngStart + 1).Group
End With
End Sub
Mit freundlichen Gr�ssen
Melanie Breden
--
- Microsoft MVP f�r Excel -
www.melanie-breden.de
Ribbon-Programmierung f�r Office 2007 http://tinyurl.com/59awla
Mit dem Code bekomme ich Laufzeitfehler 1004 Die Ungroup Methode des
Range Objekts konnte nicht ausgeführt werden.
Verstehe auch noch nicht hunderprozentig was das Makro macht.
> Mit dem Code bekomme ich Laufzeitfehler 1004 Die Ungroup Methode des
> Range Objekts konnte nicht ausgef�hrt werden.
Diese Codezeile hebt eine bereits vorhandene Gruppierung auf.
Allerdings erh�lt man einen Fehler, wenn in dem Blatt keine Gruppierung ist.
�nder die Codezeile wie folgt:
If IsNull(.Rows.OutlineLevel > 1) Then .Rows.Ungroup
> Verstehe auch noch nicht hunderprozentig was das Makro macht.
Was genau verstehst du nicht?
Mit freundlichen Gr�ssen
Melanie Breden
--
dann probiers mal so:
Sub Gliedern()
Dim LRow As Long
Dim i As Long
Dim myRange As Range
Dim Start As Long
LRow = Cells(Rows.Count, "G").End(xlUp).Row
Start = Cells.Find("1A", After:=Range("G1"), _
SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
For i = Start To LRow + 1
If Cells(i, "G") = "1A" Then
If myRange Is Nothing Then
Set myRange = Rows(i)
Else
Set myRange = Union(myRange, Rows(i))
End If
Else
myRange.Rows.Group
Set myRange = Nothing
i = Cells.Find("1A", After:=Cells(i, "G"), _
SearchOrder:=xlByRows, SearchDirection:=xlNext).Row - 1
If i < Start Then Exit Sub
End If
Next
End Sub
Mit freundlichen Gr�ssen
Claus Busch
--
Win XP PRof SP2 / Vista Ultimate SP2
Office 2003 SP2 /2007 Ultimate SP2
Hallo Melanie,
Soweit funktioniert das Ganze, aber es macht das was ich befürchtet
habe.
Die Spalte G wird sortiert und alle Zeilen mit "1A" in G werden zu
einer Gruppe zusammengefasst.
Ich will aber gerade nicht alle sortieren sondern, die bestehende
Sortierung beibehalten und untereinanderstehende Zeilen in denen in G
"1A" steht zusammenfassen.
Dies kann eine, oder auch hundert Zeilen sein.
Danke! Das funktioniert prima. Kann ich jetzt wenn die "1A" gruppiert
sind nochmal eine weitere Ebene gruppieren?
Sprich alle 1A ind zusammengepackt gruppiert und ich möchte auf der
darüberliegenden Ebene (bei mir heißen die 2W) auch nochmal alle 2W
gruppieren.
Geht das dann auch?
Hatte den Code auch schon geändert, er hat aber scheinbar Probleme mit
sichtbaren und nicht sichtbaren sprich gruppierten Feldern.
Am Wed, 7 Oct 2009 07:26:36 -0700 (PDT) schrieb Volker Schmitt:
>Kann ich jetzt wenn die "1A" gruppiert
> sind nochmal eine weitere Ebene gruppieren?
> Sprich alle 1A ind zusammengepackt gruppiert und ich m�chte auf der
> dar�berliegenden Ebene (bei mir hei�en die 2W) auch nochmal alle 2W
> gruppieren.
> Geht das dann auch?
> Hatte den Code auch schon ge�ndert, er hat aber scheinbar Probleme mit
> sichtbaren und nicht sichtbaren sprich gruppierten Feldern.
es wird hierbei immer in der gleichen Ebene gruppiert. Und wenn dann z.B.
Zellen mit 1A und 2W direkt hintereinander sind, wird die Gruppierung
zusammengef�hrt.
Kannst du nicht nach "Enth�lt nicht 1A" bzw. "Enth�lt nicht 2W" filtern?
Oder die Gliederung nach 1A und 2W umeinander machen, d.h. f�r 1A die
Gruppierung wieder aufheben und danach nach2W gliedern?
Mit freundlichen Gr�ssen