Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1668to1672
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

Wenn 13 in Zelle dann (vba)

Wenn 13 in Zelle dann (vba)
21.01.2019 19:25:18
Christian
Moin alle zusammen,
ich möchte gerne in meiner Tabelle alle Zeilen in Spalte W nach einem Kriterium Filtern und dann nur die Werte übertragen die mit 13 beginnen.
Alles funktioniert nur die schwarz markierte Zeile nicht. Wo könnte mein Fehler liegen?
Vielen Dank und beste Grüße
Christian

Sub KopiereDaten3()
Dim wsZiel As Worksheet
Dim lngLZeileQuelle As Long
Dim lngLZeileZiel As Long
Dim lngAktZeile As Long
Dim wsQuelleShip As Worksheet
Set wsQuelleShip = tabShipset 'Ziel_Data_Comp
Set wsZiel = TabWO 'WO Monitor
lngLZeileQuelle = wsQuelleShip.Cells.Find("*", wsQuelleShip.Range("A1"), xlFormulas, xlWhole,   _
_
xlByRows, xlPrevious).Row
lngLZeileZiel = wsZiel.Cells.Find("*", wsZiel.Range("A1"), xlFormulas, xlWhole, xlByRows,  _
xlPrevious).Row
wsQuelleShip.Range("A1").AutoFilter Field:=Columns("A").Column, Criteria1:=Range("C2")
wsZiel.Range("B11:H" & lngLZeileQuelle).Clear
If Left(.Range("W" & lngLZeileQuelle).Value, 2) = "13" Then
wsQuelleShip.Range("E2:E" & lngLZeileQuelle).Copy wsZiel.Range("B11")
wsQuelleShip.Range("W2:W" & lngLZeileQuelle).Copy wsZiel.Range("C11")
End If
End Sub

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn 13 in Zelle dann (vba)
21.01.2019 19:32:46
Hajo_Zi
Es fehlt
wsQuelleShip.Range("E2:E" & lngLZeileQuelle).SpecialCells(xlCellTypeVisible).copy ....

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Wenn 13 in Zelle dann (vba)
21.01.2019 19:40:32
JoWE
Hallo Christian,
fehlt da in der 'schwarz markierten Zeile' nicht lediglich vor '.Range...' die Bezeichnung vom Worksheet?
Gruß
Jochen
AW: Wenn 13 in Zelle dann (vba)
21.01.2019 19:45:34
Christian
Stimmt. Oh man, wie konnte ich das übersehen, jetzt läuft der Code zwar reibungslos durch aber dennoch springt er nicht in die IF Anweisung obwohl ich Werte in der Tabelle habe, die denn Kriterium entsprechen.
Anzeige
AW: Wenn 13 in Zelle dann (vba)
21.01.2019 19:59:16
JoWE
...prüfe im Haltemodus den aktuellen Wert der geprüften Zelle.
Gruß
Jochen
AW: Wenn 13 in Zelle dann (vba)
21.01.2019 20:21:40
Christian
Moin Jochen
der Value ist leer. Es liegt aber wahrscheinlich an meinem Autofilter. Denn wenn ich während der Durchführung des Codes in das Tabellenblatt (wsQuelleShip) gehe, in der ich denn Autofilter durchführe, dann sind alle Zeilen gefiltert. Aber ich würde ja gerne nur die Zeilen filtern mit dem Kriterium in der Tabelle (wsZiel), in welcher sich auch das Kriterium befindet.
Daher habe ich jetzt noch wsZiel bei meinen Criteria hinzugefügt. Aber dennoch wird alles gefiltert.
Sub KopiereDaten3()
Dim wsZiel As Worksheet
Dim lngLZeileQuelle As Long
Dim lngLZeileZiel As Long
Dim lngAktZeile As Long
Dim wsQuelleShip As Worksheet
Set wsQuelleShip = tabShipset 'Ziel_Data_Comp
Set wsZiel = TabWO 'WO Monitor
lngLZeileQuelle = wsQuelleShip.Cells.Find("*", wsQuelleShip.Range("A1"), xlFormulas, xlWhole,  _
xlByRows, xlPrevious).Row
lngLZeileZiel = wsZiel.Cells.Find("*", wsZiel.Range("A1"), xlFormulas, xlWhole, xlByRows,  _
xlPrevious).Row
wsQuelleShip.Range("A1").AutoFilter Field:=Columns("A").Column, Criteria1:=wsZiel.Range("C2")
wsZiel.Range("B11:H" & lngLZeileQuelle).Clear
If Left(wsQuelleShip.Range("W2" & lngLZeileQuelle).Value, 2) = "13" Then 'leer
wsQuelleShip.Range("E2:E" & lngLZeileQuelle).SpecialCells(xlCellTypeVisible).Copy wsZiel.Range(" _
B11")
wsQuelleShip.Range("W2:W" & lngLZeileQuelle).SpecialCells(xlCellTypeVisible).Copy wsZiel.Range(" _
C11")
End If
wsQuelleShip.Range("A1").AutoFilter = False
End Sub

Anzeige
Fehler Autofilter entdeckt
21.01.2019 20:32:44
Christian
Hatte die falsche Zelle ausgewählt. Nicht C2 sondern C3
If left ...
21.01.2019 20:35:01
Christian
Dennoch springt der Cursor nicht in die If Abfrage rein. Benötige ich eine For Schleife? Weil ich ja jede einzelne Zeile abfragen möchte. Es sind etwa 170 Zeilen und in einigen wenigen steht eine 7 stellige Zahl die mit 13 beginnt. Diese möchte ich nur übertragen
AW: If left ...
21.01.2019 20:46:52
Werner
Hallo Christian,
wenn du mehrere Zellen überprüfen willst brauchst du natürlich eine Schleife über den entsprechenden Bereich.
Wobei sich mir die Frage stelle, warum filterst du denn die Spalte nicht gleich mit dem Zahlenfilter nach größer als 1299999 und kleiner als 1400000 und kopierst dann das komplette Filterergebnis?
Ansonsten: Bitte mal deine Mappe hochladen mit einer Erklärung, was du eigentlich willst.
Gruß Werner
Anzeige
AW: If left ...
21.01.2019 20:49:12
Christian
Die Mappe ist leider riesig aber ich versuche mal eine kleine Version zu erstellen
AW: Beispielmappe
21.01.2019 21:44:22
Werner
Hallo Christian,
schön, und wo ist eine Erklärung was passieren soll. Offensichtlich soll ja zunächst mal gefiltert werden. Meine Glaskugel ist heute Nacht schon etwas trüb.
Gruß Werner
Beispielmappe Erklärung
21.01.2019 21:55:29
Christian
Moin Werner :)
Sorry, also zum Ablauf.
1. Möchte ich Tabelle1 über Tabelle2 nach denn beiden Kriterien in Zelle C3 und C4 filtern. Bis jetzt filtere ich nur nach C3
2. Dann möchte ich gerne die Werte KIT und WO aus Tabelle1 in Tabelle2 kopiere, die die Kriterien erfüllen.
3. Ich möchte aber nur die Zeilen übertragen, bei dennen in Tabelle2 in Spalte C eine Work Order sich befindet. Diese beginnen immer mit 13.
Also wenn ich das mit dem File hinbekommen würde, wäre ich es super :)
Vielen Dank für eure Unterstützung.
Anzeige
AW: Beispielmappe Erklärung
21.01.2019 23:12:56
Werner
Hallo Christian,
teste mal:
Public Sub Filtern_Kopieren()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
If AutoFilter = True Then
If .AutoFilterMode Then .ShowAllData
Else
.Columns("A:D").AutoFilter
End If
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=1, Criteria1:=Worksheets("Tabelle2") _
.Range("C3")
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=4, Criteria1:=Worksheets("Tabelle2") _
.Range("C4")
.Range("$A$1:$D$508").AutoFilter Field:=3, Criteria1:=">1299999", Operator:=xlAnd, _
Criteria2:=" 1 Then
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Columns(2).Copy
Worksheets("Tabelle2").Range("B11").PasteSpecial Paste:=xlPasteValues
.Offset(1).Resize(.Rows.Count - 1).Columns(3).Copy
Worksheets("Tabelle2").Range("C11").PasteSpecial Paste:=xlPasteValues
End With
Else
MsgBox "Kein Treffer."
End If
.ShowAllData
End With
End Sub
Deine Datei kann ich dir im Moment leider nicht hochladen.
Gruß Werner
Anzeige
AW: Beispielmappe Erklärung
21.01.2019 23:20:41
Christian
Hey Super vielen Dank Werner. Ich habe denn Code eben mal in meine File in Tabelle 2 eingefügt und bekomme leider denn Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt.
Nach der fett markierten Zeile tritt der Fehler auf
Public Sub Filtern_Kopieren()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
   If AutoFilter = True Then
If .AutoFilterMode Then .ShowAllData
Else
.Columns("A:D").AutoFilter
End If
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=1, Criteria1:=Worksheets("Tabelle2") _
.Range("C3")
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=4, Criteria1:=Worksheets("Tabelle2") _
.Range("C4")
.Range("$A$1:$D$508").AutoFilter Field:=3, Criteria1:=">1299999", Operator:=xlAnd, _
Criteria2:=" 1 Then
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Columns(2).Copy
Worksheets("Tabelle2").Range("B11").PasteSpecial Paste:=xlPasteValues
.Offset(1).Resize(.Rows.Count - 1).Columns(3).Copy
Worksheets("Tabelle2").Range("C11").PasteSpecial Paste:=xlPasteValues
End With
Else
MsgBox "Kein Treffer."
End If
.ShowAllData
End With
End Sub

Anzeige
AW: Beispielmappe Erklärung
21.01.2019 23:44:06
Werner
Hallo Christian,
versuch mal so:
Public Sub Filtern_Kopieren()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
If .FilterMode Then .ShowAllData
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=1, Criteria1:=Worksheets("Tabelle2") _
.Range("C3")
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=4, Criteria1:=Worksheets("Tabelle2") _
.Range("C4")
.Range("$A$1:$D$508").AutoFilter Field:=3, Criteria1:=">1299999", Operator:=xlAnd, _
Criteria2:=" 1 Then
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Columns(2).Copy
Worksheets("Tabelle2").Range("B11").PasteSpecial Paste:=xlPasteValues
.Offset(1).Resize(.Rows.Count - 1).Columns(3).Copy
Worksheets("Tabelle2").Range("C11").PasteSpecial Paste:=xlPasteValues
End With
Else
MsgBox "Kein Treffer."
End If
If .FilterMode Then .ShowAllData
End With
End Sub
Gruß Werner
Anzeige
nochmal der unrsprüngliche Code
22.01.2019 00:44:30
Werner
Hallo Christian,
wieso in Tabelle2? Der Code gehört in ein allgemeines Modul und nicht ins Modul eines Tabellenblattes.
Zudem hatte ich noch einen Fehler drin.
If WorksheetFunction.Subtotal(3, ActiveSheet.Range("A:A")) > 1 Then

Habe hier versehentlich ActiveSheet. Das muss raus.
Public Sub Filtern_Kopieren()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
If AutoFilter = True Then
If .AutoFilterMode Then .ShowAllData
Else
.Columns("A:D").AutoFilter
End If
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=1, Criteria1:=Worksheets("Tabelle2") _
.Range("C3")
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=4, Criteria1:=Worksheets("Tabelle2") _
.Range("C4")
.Range("$A$1:$D$508").AutoFilter Field:=3, Criteria1:=">1299999", Operator:=xlAnd, _
Criteria2:=" 1 Then
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Columns(2).Copy
Worksheets("Tabelle2").Range("B11").PasteSpecial Paste:=xlPasteValues
.Offset(1).Resize(.Rows.Count - 1).Columns(3).Copy
Worksheets("Tabelle2").Range("C11").PasteSpecial Paste:=xlPasteValues
End With
Else
MsgBox "Kein Treffer."
End If
.ShowAllData
End With
End Sub
Gruß Werner
Anzeige
Vielen Dank
22.01.2019 09:31:51
Christian
Moin Werner,
erst mal vielen Dank für deine Unterstützung und die Codestruktur. In meiner Testumgebung funktioniert Sie wunderbar und danke für deinen Tipp mit dem Modul. Bis jetzt habe ich nicht immer nur das Modul sondern auch Tabellen verwendet.
Ich passe die Struktur jetzt gerade an meine Datei an und bekomme sogleich die Fehlermeldung, dass die Variable nicht definiert wäre (Schwarz markiert). Das ist komisch, weil die Testdatei funktioniert auf meinem PC mit derselben Excel Version und in der Hauptdatei nicht. Ich probiere mal ein wenig rum.
Public Sub Filtern_Kopieren()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Shipset")
If AutoFilter = True Then
If .AutoFilterMode Then .ShowAllData
Else
.Columns("A:AD").AutoFilter
End If
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("$A$1:$D$" & loLetzte).AutoFilter Field:=1, Criteria1:=Worksheets("WO Monitor") _
.Range("C3")
.Range("$A$1:$AD$" & loLetzte).AutoFilter Field:=28, Criteria1:=Worksheets("WO Monitor") _
.Range("C4")
.Range("$A$1:$AD$28000").AutoFilter Field:=3, Criteria1:=">1299999", Operator:=xlAnd, _
Criteria2:=" 1 Then
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Columns(2).Copy
Worksheets("WO Monitor").Range("B11").PasteSpecial Paste:=xlPasteValues
.Offset(1).Resize(.Rows.Count - 1).Columns(3).Copy
Worksheets("WO Monitor").Range("C11").PasteSpecial Paste:=xlPasteValues
End With
Else
MsgBox "Kein Treffer."
End If
.ShowAllData
End With
End Sub

Anzeige
Angepasster Code Frage
22.01.2019 10:13:42
Christian

If WorksheetFunction.Subtotal(23, .Range("A:A")) > 1 Then
23 meint die Spalte in der sich die Work Order befindet?
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Mit dieser angepassten Struktur lief der Code durch
Public Sub Filtern_Kopieren()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Shipset")
If .AutoFilterMode = True Then
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Else
.Columns("A:AD").AutoFilter
End If
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("$A$1:$AD$" & loLetzte).AutoFilter Field:=1, Criteria1:=Worksheets("WO Monitor") _
.Range("C3") 'Shipset
.Range("$A$1:$AD$" & loLetzte).AutoFilter Field:=28, Criteria1:=Worksheets("WO Monitor") _
.Range("C4")'Material available/ MSPT
.Range("$A$1:$AD$27258").AutoFilter Field:=3, Criteria1:=">1299999", Operator:=xlAnd, _
Criteria2:=" If WorksheetFunction.Subtotal(23, .Range("A:A")) > 1 Then
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Columns(5).Copy
Worksheets("WO Monitor").Range("B11").PasteSpecial Paste:=xlPasteValues
.Offset(1).Resize(.Rows.Count - 1).Columns(23).Copy
Worksheets("WO Monitor").Range("C11").PasteSpecial Paste:=xlPasteValues
End With
Else
MsgBox "Kein Treffer."
End If
.ShowAllData
End With
End Sub

Nein...
22.01.2019 12:49:50
Werner
Hallo Christian,
...das entspricht der Formel =TEILERGEBNIS(...
Schau dir die in einer Tabelle mal an, dann siehst du was die 3 in der Klammer bedeutet. Sprich du mußt da die 3 so lassen wie vorher auch.
Gruß Werner

373 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige