Anzeige

 2 Tabellen bein´m filtern einbeziehen


josef24

Erfahrenes Mitglied
#1
Guten Morgen in die Runde. Komme mal wieder mit einem wie ich glaube kleinem Problem. Ich möchte aus Tabelle "Problem" in Tabelle "Tudulist" nach gewisser Filterung kopieren. Erhalte Laufzeitfehler 1004 und Meldung " Anwendung oder Objekt-definierter Fehler". Könnte mir jemand nach Möglichkeit mit einem Beispielcode unter die Arme greifen? Danke schon jetzt und Gruß Josef

Code:
Private Sub CommandButton8_Click()
   With Worksheets("Problem")
        Range("A2:H413").Select
            Selection.AutoFilter
           
                ActiveSheet.Range("$A$2:$G$413").AutoFilter Field:=5, Criteria1:="=*"
                ActiveSheet.Range("$A$2:$G$413").AutoFilter Field:=6, Criteria1:="=*"
                ActiveSheet.Range("$A$2:$G$413").AutoFilter Field:=7, Criteria1:="<=90"
   
        .Rows(i).Copy Destination:=Worksheets("TuduList").Rows(a)
       
End With
End Sub
 
#2
- Nach dem With musst du mit .Range auf den Range des Worksheets zugreifen

- Was ist i und was ist a?

- Programiere nie mit select, selection, activesheets
Ich weiss, das die MAkroaufnahmen das machen. Aber es gibt später Probleme.

-Ansonsten, auf welcher Zeile kommt der Fehler

Visual Basic:
Private Sub CommandButton8_Click()
	Dim wsProblem As Worksheet
	Dim wsToDoList As Worksheet

	Set wsProblem = Worksheets("Problem")
	Set wsToDoList = Worksheets("TuduList")

	'Um einen Autofilter auf eine Zeile zu setzen und alle darunterleigenden Daten auszuwählen,
	'reicht es dien Autofilter auf die entsprechende Row zu setzen
	With wsProblem.Rows(1:1)
		.AutoFilter
		.AutoFilter Field:=5, Criteria1:="=*"
		.AutoFilter Field:=6, Criteria1:="=*"
		.AutoFilter Field:=7, Criteria1:="<=90"
	End With

	'Keine Ahnung woher i und a kommen.
	wsProblem.Rows(i).Copy wsToDoList.Rows(a)
End Sub
 

josef24

Erfahrenes Mitglied
#7
Wird nicht angezeigt, einfach so.
Wenn ich die Zeile:
wsProblem.Rows(i).Copy wsToDoList.Rows(a)

raus nehme läuft er durch bringt aber kein Ergebnis. Die Filterfunktion ist in den Spalten ersichtlich. Wenn ich nur eine Funktion laufen lasse, bringt er das entsprechende Ergebnis, aber nicht mit allen Auswahlen!
 

josef24

Erfahrenes Mitglied
#12
Eine mehr allgemeine Frage zum Thema. Die Datei die hier bearbeitet werden soll hat ca. 250 Zeilen in 8 Spalten. Ich starte und der Rechner beginnt zu arbeiten. Die "Arbeit" zieht sich nun schon 2 Stunden hin, wobei die zu befüllende Tabelle geöffnet und mit einem Anteil von Daten bereits befüllt ist. Die Datei kann man nicht bewegen (scrollen). Der kreisende Punkt ist immer noch aktiv, man kann nicht eingreifen. Ganz oben steht der Dateiname und (Keine Rückmeldung). Was kann / muss ich bitte unternehmen um dies abzustellen. Danke für Infos und Gruß, Josef
 
#13
Wird wohl ein Problem in der nichtveröffenltichen Anpassung deines Codes sein.
Ich schätze Zeile 13.

Ansonsten. Wenn du eine Schleife abarbeitest zwischendurch mal ein DoEvents absetzen, damit Excel auf Eingaben reagieren kann.
Aber nicht bei jedem durchlauf, sonst geht die Geschwindigkeit noch weiter Bachab.

Anhand des Fehlerbeschrieb klingt es, als ob die eine Endlosschleife hast. Aber wie gesagt Ohne dein Code kann man dir da nicht helfen
 

josef24

Erfahrenes Mitglied
#14
Hier mal mein Code zum anschauen. Danke bisher
Die folgende Zeile mit den or Funktionen scheinen das ganze zu verlangsamen?

If arr(i, 6) Like "*A*" Or arr(i, 7) Like "*a*" Or (arr(i, 8) >= 1 And arr(i, 8) <= 90) Then



Code:
Sub test_neu()
Dim a As Long, i As Long
Dim arr As Variant
Dim Header As Boolean

Application.ScreenUpdating = False
a = 1
a = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1

With Worksheets("Tabelle1")
    arr = .Range("A1").CurrentRegion
  
    For i = LBound(arr) + Abs(Header) To UBound(arr)
        If arr(i, 6) Like "*A*" Or arr(i, 7) Like "*a*" Or (arr(i, 8) >= 1 And arr(i, 8) <= 90) Then
            .Rows(i).Copy _
                Destination:=Worksheets("Tabelle2").Rows(a)
            a = a + 1
        End If
    Next i
End With

Application.ScreenUpdating = True
End Sub
 
Zuletzt bearbeitet:
#15
Hm. Ich sehe gerade keinen Fehler.
Prüfe mal arr, wie gross das wirklich ist. Wenn du leere Zeilen am Ende hast, kann es sein, dass du nicht 250 Zeilen prüfst sondern 65'000.

Visual Basic:
Debug.Print arr.Address
 

josef24

Erfahrenes Mitglied
#16
Vielen Dank für deine Geduld. Wo füge ich bitte die Frage " Debug.Print arr.Address" ein?
Wäre für mich sehr wichtig um vielleicht dem "Fehler" näher zu kommen. Gruß Josef
 
#17
Nicht vergessen, das Direktfenster einzublenden um das Resultat zu sehen
Alternativ zum Debug.Print kannst du auch mit einer MsgBox arbeiten um das Resultat als PopUp zu bekommen
Visual Basic:
With Worksheets("Tabelle1")
    arr = .Range("A1").CurrentRegion
    Debug.Print arr.Address
 

josef24

Erfahrenes Mitglied
#18
Danke, ich geb's auf. Habe zu wenig Kenntnis um hier zu folgen. Versuche mit Spalten kopieren und bedingter Formatierung hin zu kommen, damit ich mich nur in einer Spalte mit der Suche befassen muss. Denke damit die Arbeitszeit entsprechend ein zu grenzen. Gruß Josef
 
#19
Sorry, aber Debug.Print gehört zur ersten Lektion in VBA. das ist sehr hilfreich beim Fehler finden.
Wo du das einfügen musst habe ich geschrieben.
Wo ist das Problem?
 

josef24

Erfahrenes Mitglied
#20
Habe den Codeschnipsel 3. .. in der Zeile nach " arr = .Rage in der nächste Zeile eingefügt. Dann kommt Fehler "Laufzeitfehler 424 Objekt erforderlich".

Außer einer Kurzeinweisung und einem VBA Buch habe ich keine Vorkenntnis. Lediglich Vorstellungen wie es in der Praxis uns unterstützen könnte. Gruß Josef
 
Anzeige