Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
728to732
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
728to732
728to732
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Filter/Datensätze # Uwe(et999)

Filter/Datensätze # Uwe(et999)
04.02.2006 17:38:34
ingo
Hallo Uwe(et999)!!!
Es geht nocheinmal um die Filterfunktion mit denen ich per VBA-Code den kompletten Datensatz (bezogen auf 5 Zeilen pro Datensatz) anzeigen kann, welches ja ausgezeichnet funktioniert!!!
Wenn ich nun eine Spalte hinzufügen würde um damit sämtlichen Zellen eines Datensatzes eine bestimmte Indentifikation (jeder Datensatz hat eine eigene Nr oder Buchstabenkombination) zu geben, wäre es dann per Änderung des VBA-Codes möglich, mir auch die gefilterten und kompletten Datensätze anzeigen zu lassen, obwohl die Datensätze keine identische Zeilenanzahl haben?
Beispieldatei unter:
https://www.herber.de/bbs/user/30656.xls
ingo

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filter/Datensätze # Uwe(et999)
04.02.2006 21:10:51
et999
Hi Ingo,
ich denke so müsste das klappen:
https://www.herber.de/bbs/user/30669.xls
Teste das mal mit ein paar mehr Daten.
Ich drücke Dir (uns) die Daumen.
Gruß
Uwe
(:o)
AW: Filter/Datensätze # Uwe(et999)
04.02.2006 22:15:53
ingo
Hallo Uwe!!!
Einfach klasse!!!
Ich werde morgen noch einige Tests durchführen und mich anschließend noch einmal melden.
Nun habe ich noch 3 Schönheitsfragen:
1. Wie kann ich den Botton "Filter" in z. B. "Ingo" umbenennen?
2. Ist der komplette VBA-Code noch nötig?
(z.B. MsgBox "Text nicht gefunden"; brauche ich doch garnicht mehr, oder ?)
3. Da ich VBA-Anfänger bin, beschreib mir doch einmal wie ich diesen VBA-Code in eine bereits fertige Tabelle einfüge (bitte schrittweise) !!!
ingo
Anzeige
AW: Filter/Datensätze # Uwe(et999)
04.02.2006 22:38:24
et999
Hi Ingo,
ich werde Dir morgen auf Deine 3 Punkte antworten, wird kein Problem sein.
Gruß
Uwe
(:o)
AW: Filter/Datensätze # Uwe(et999)
05.02.2006 09:28:58
ingo
Hallo Uwe!
Mir sind noch 2 weitere Fragen eingefallen:
4. Kann ich die Positionierung des Buttons "Filter" verändern?
(z.B. in die Zelle E2)
5. Wie kann ich bewirken, dass die Filterleiste in der Zeile B(blau hinterlegt)
verbleibt und nicht nach der ersten Filterung in die Zeile A ruscht?
ingo
AW: Filter/Datensätze # Uwe(et999)
05.02.2006 15:37:55
et999
Hi Ingo,
Deine Punkte 1. und 4. kann ich zusammen beantworten. Wenn Du beim Klicken auf den Knopf die Strg-Taste gedrückt hälst, kannst Du ihn bearbeiten, also Text ändern, verschieben (Rahmen anfassen), Größe ändern etc. Mit der rechten Maustaste kommst Du ins Eigenschaften Menü, wo noch mehr möglich ist.
Zu 2.: Du hast recht, in dem Code waren "Überbleibsel" aus der "Zeit" als es noch die Inputbox gab. Habe in jetzt "entmüllt".
Zu 5.: Das war mit vorher nicht aufgefallen. Habe den Code dementsprechend geändert:
https://www.herber.de/bbs/user/30687.xls
Zu 3.: Öffne die Tabelle in die Du den Filter einfügen willst. Drücke Alt & F11. Ein Fenster mit der VBA-Umgebung geht auf. Klicke auf Einfügen/ Modul. Es öffnet sich ein Fenster in dem entweder gar nichtst, oder, wahrscheinlicher: Option Explicit steht. Kopiere den Code (s.u.) und füge ihn nach Option Explicit ein (wenn's nicht da steht, nur den Code einfügen).
Jetzt kannst Du die VBA-Umgebung schließen, das Makro ist installiert.
Wahrscheinlich fehlt dir jetzt noch der Knopf:
Klicke in Deiner Tabelle auf Ansicht/Symbolleisten/Formular. Klicke auf den Knopf (Schaltfläche) und ziehe mit der Maus einen Rahmen an der Stelle und in der Größe wo und wie Du den Knopf haben willst. Dann erscheint ein Fenster "Makro zuweisen". Da klickst Du auf unser Marko: Filter. OK. Fertig.
Wie man den Knopf weiter bearbeitet habe ich ja oben schon beschrieben.
Ich hoffe ich habe nichts vergessen.
Gruß
Uwe
(:o)


Sub Filter()
Application.ScreenUpdating = False
Dim Zelle As Range
Dim strName As String
Dim Reihe As Integer
Dim I As Long
Dim SatzNummer As String
Range("A2:IV65536").AutoFilter         'mit A2 ist die 2te Zeile festgelegt
Range("A2:IV65536").AutoFilter         'bei Bedarf auf 3 usw. ändern
For I = 3 To ActiveSheet.UsedRange.Rows.Count
   If Cells(I, 1).EntireRow.Hidden = True Then
      Cells.EntireRow.Hidden = False
      Range("A1").Select
      Exit Sub
   End If
Next I
strName = ActiveCell.Value
For I = 3 To ActiveSheet.UsedRange.Rows.Count
   Cells(I, 1).EntireRow.Hidden = True
Next I
If strName = "" Then Exit Sub
For Each Zelle In ActiveSheet.UsedRange
   If Zelle.Value = strName Then
      Reihe = Zelle.Row
         Do Until Left(Cells(Reihe, 2).Value, 5) = "Daten"
            Reihe = Reihe - 1
         Loop
            SatzNummer = Cells(Reihe, 1).Value
         Do While Cells(Reihe, 1).Value = SatzNummer
         Cells(Reihe, 1).EntireRow.Hidden = False
         Reihe = Reihe + 1
         Loop
    End If
Next Zelle
Cells(1, 1).Select
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Filter/Datensätze # Uwe(et999)
05.02.2006 16:36:44
ingo
Hallo Uwe!!!
Ersteinmal Tausend Dank für Deine Bemühungen!!!
Bisher funktioniert alles wie gewünscht!!!
Bevor ich mich nun an das Einfügen des VBA-Codes begebe, möchte nur noch eine Abschlussfrage stellen:
Gem. VBA-Code sucht er ja immer noch die Zellen wo "Daten" drinsteht.
Aber genau das wollte ich mit meiner eigenen Codierung in der Spalte A verhindern, sodaß er ausschließlich nur nach dieser Codiering sucht.
Ich glaube ich habe diesbezüglich selbst die Frage falsch gestellt.
Ist es nun möglich, dass er die Suche nach der Zelle "Daten" wegfallen lässt und
er ausschlieslich nach meinen Codierungen sucht?
ingo
Anzeige
AW: Filter/Datensätze # Uwe(et999)
05.02.2006 18:17:55
et999
Hi Ingo,
kein Problem (hoffe ich (;-)), da ändert sich nur eine Zeile:
https://www.herber.de/bbs/user/30694.xls


Sub Filter()
Application.ScreenUpdating = False
Dim Zelle As Range
Dim strName As String
Dim Reihe As Integer
Dim I As Long
Dim SatzNummer As String
Range("A2:IV65536").AutoFilter         'mit A2 ist die 2te Zeile festgelegt
Range("A2:IV65536").AutoFilter         'bei Bedarf auf 3 usw. ändern
For I = 3 To ActiveSheet.UsedRange.Rows.Count
   If Cells(I, 1).EntireRow.Hidden = True Then
      Cells.EntireRow.Hidden = False
      Range("A1").Select
      Exit Sub
   End If
Next I
strName = ActiveCell.Value
For I = 3 To ActiveSheet.UsedRange.Rows.Count
   Cells(I, 1).EntireRow.Hidden = True
Next I
If strName = "" Then Exit Sub
For Each Zelle In ActiveSheet.UsedRange
   If Zelle.Value = strName Then
      Reihe = Zelle.Row
         Do Until Cells(Reihe, 1) <> Cells(Reihe, 1).Offset(-1, 0)
         Reihe = Reihe - 1
         Loop
            SatzNummer = Cells(Reihe, 1).Value
         Do While Cells(Reihe, 1).Value = SatzNummer
         Cells(Reihe, 1).EntireRow.Hidden = False
         Reihe = Reihe + 1
         Loop
    End If
Next Zelle
Cells(1, 1).Select
Application.ScreenUpdating = True
End Sub


Gruß
Uwe
(:o)
Anzeige
AW: Filter/Datensätze # Uwe(et999)
05.02.2006 21:32:13
ingo
Hallo Uwe!!!
Deine Datei funktioniert!
Aber wenn ich nun meine ausprobiere und selbst wenn ich meine Daten in Deine Datei kopiere, bekomme ich immer die gleiche Fehlermeldung:
Lauffehler'13`
Typen unverträglich
und beim Debuggen zeigt der gelbe Pfeil auf die Zeile des Codes:
If Zelle.Value = strName Then
PS. Ich u.a. auch 1-zeilige Datensätze. Liegt dort vieleicht das Problem?
Was nun, sprach Zeus?
ingo
AW: Filter/Datensätze # Uwe(et999)
05.02.2006 22:38:24
et999
Hi Ingo,
der einzeilige Datensatz kann nicht das Problem sein. Ich habe das nachgestellt und es klappt. Eine Typenunverträglichkeit an der Stelle kann ich nicht verstehen. Hier wird in einer Schleife jede Zelle des Blattes abgefragt, ob deren Inhalt mit dem der aktiven Zellen übereinstimmt, den ich in der Variablen strName gespeichert habe!? Der Fehler würde beduten, dass es in Deiner Tabelle ein Zelle gibt, deren Inhalt kein String, also keine Zeichekette ist?! Ich stehe vor einem Rätsel. Man müsste das Makro schrittweise durchgehen um festzustellen welche Zelle das Problem ist. Notfalls werde ich dir erklären wie das geht. Aber ersteinmal versuchen wir es anders:
Erster Versuch: Ändere die vierte Zeile:
Dim strName As String in:
Dim strName
Lösch also einfach das As String. Ich glaube eigentlich nicht das es klappt, ist aber einen Versuch wert. Wenn's nicht klappt kommt Versuch Zwei:
Füge VOR die Codezeile: If Zelle.Value = strName Then bitte diesen Befehl ein: On Error Resume Next. Also so:
For Each Zelle In ActiveSheet.UsedRange
On Error Resume Next
If Zelle.Value = strName Then
usw.
Das veranlasst Excel bei einer Fehlermeldung einfach weiterzumachen. Das ist so ein bisschen die Brechstange, könnte aber gut helfen. Du müsstest nur genau prüfen ob das Makro noch richtig funktioniert. Müsste aber eigentlich, denn die Zelle an der er sich "aufhängt" kann eigentlich nicht den zu suchenden Wert enthalten.
Wenn das nicht klappt müsstest Du versuchen ein Beispiel hochzuladen wo der Fehler auftritt, oder ich werde Dir erklären wie man Schrit für Schritt durch das Makro geht und so die "böse" Zelle findet.
Ich drück uns mal wieder die Daumen.
Gruß
Uwe
(:o)
Anzeige
AW: Filter/Datensätze # Uwe(et999)
06.02.2006 17:55:17
ingo
Hallo Uwe!!!
Leider bringen Deine Vorschläge keine brauchbare Lösung !!!
Was bedeutet "keine Zeichenkette" genau?
Ingo
AW: Filter/Datensätze # Uwe(et999)
06.02.2006 21:52:05
et999
Hi Ingo,
ich hab' den Fehler dank Deines Beispiels gefunden. So klappt es:
https://www.herber.de/bbs/user/30737.xls
Das Problem waren die Zellen in der Spalte C mit der Fehlermeldung #BEZUG!
Da hat er sich aufgehängt, denn String, also Zeichenkette ist irgendeine Reihe von Zeichen egal ob Zahlen oder Nummern. Ich dachte eigentlich in einer Zelle kann ja nichts anderes stehen. Auch Formeln sind da kein Problem. Aber #BEZUG! ist für Excel ebend kein String, sondern eine Fehlermeldung!!! Hab ich mal wieder was gelernt.
Mit den beiden neuen Zeilen im Code frage ich ab, ob es eine Fehlermeldung ist und springe dann einfach zur nächsten Zelle:


Sub Filter()
Application.ScreenUpdating = False
Dim Zelle As Range
Dim strName As String
Dim Reihe As Integer
Dim I As Long
Dim SatzNummer As String
Range("A3:IV65536").AutoFilter         'mit A2 ist die 2te Zeile festgelegt
Range("A3:IV65536").AutoFilter         'bei Bedarf auf 3 usw. ändern
For I = 3 To ActiveSheet.UsedRange.Rows.Count
   If Cells(I, 1).EntireRow.Hidden = True Then
      Cells.EntireRow.Hidden = False
      Range("A1").Select
      Exit Sub
   End If
Next I
strName = ActiveCell.Value
For I = 3 To ActiveSheet.UsedRange.Rows.Count
   Cells(I, 1).EntireRow.Hidden = True
Next I
If strName = "" Then Exit Sub
For Each Zelle In ActiveSheet.UsedRange
   If IsError(Zelle.Value) Then GoTo EndeIF '   NEU
   If Zelle.Value = strName Then
      Reihe = Zelle.Row
         Do Until Cells(Reihe, 1) <> Cells(Reihe, 1).Offset(-1, 0)
         Reihe = Reihe - 1
         Loop
            SatzNummer = Cells(Reihe, 1).Value
         Do While Cells(Reihe, 1).Value = SatzNummer
         Cells(Reihe, 1).EntireRow.Hidden = False
         Reihe = Reihe + 1
         Loop
    End If
EndeIF:                                                                 'NEU
Next Zelle
Cells(1, 1).Select
Application.ScreenUpdating = True
End Sub


So, das Beispiel klappt jetzt, ich hoffe in Deinem Original haut das auch hin.
Also mal wieder: DAUMEN DRÜCKEN!!!
Gruß
Uwe
(:o)
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige