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

Makro nach Bedingung laufen lassen

Makro nach Bedingung laufen lassen
02.10.2019 11:11:09
Nick
Hallo Leute,
verzeiht mir bitte, dass ich einen neuen Thread für mein Thema eröffne, aber irgendwie werde ich, wenn ich den Link meines ursprünglichen Threads in meiner Mail anklicke, auf einen anderen Thread weitergeleitet. Ich kann nur noch auf den Archivthread zugreifen: https://www.herber.de/forum/archiv/1712to1716/t1714436.htm
Ich versuche mal mein Problem nochmals so gut es geht zu schildern und auf den letzten Beitrag von Daniel zu antworten.
Ich habe ein Makro vor mir, welches Daten aus einer Tabelle kopiert und in eine andere Tabelle im gleichen Arbeitsblatt schreibt. Ich habe eine Beispieldatei unter folgendem Link hochgeladen: https://www.herber.de/bbs/user/132326.xlsx
In diesem Beispiel sollen die Daten aus den Spalten Z – AK mit Ausnahme von der Spalte AE „Obstsorte“ in die Spalten A – K geschrieben werden. Das Kopieren der Daten und das Einfügen in die Spalten A – K ist nicht das Problem, das funktioniert.
Bisher wird die Spalte AE nicht beachtet und ist nicht von Bedeutung für das Makro. Das versuche ich zu ändern. Ich möchte, dass sich das Makro zuerst die Spalte AE ansieht und den Code nur auf die Zeilen anwendet, in denen, wie in diesem Beispiel „Apfel“ steht. Datensätze mit „Orange“, „Traube“, etc. werden zurzeit noch mitkopiert, diese sollen in Zukunft aber ignoriert werden.
Vielleicht kann mir ja mit diesen Informationen jemand damit helfen. Falls nicht versuche ich zur Not noch irgendwie etwas vom Makro zu zeigen.
LG Nick

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro nach Bedingung laufen lassen
02.10.2019 11:51:21
Werner
Hallo Nick,
mit dem Autofilter und kopieren des Filterergebnisse.
Public Sub Test()
Dim wsQ As Worksheet, wsZ As Worksheet
Dim loLetzteQ As Long
Set wsQ = Worksheets("Tabelle1")
Set wsZ = Worksheets("Tabelle2")
Application.ScreenUpdating = False
With wsQ
loLetzteQ = .Cells(.Rows.Count, "AE").End(xlUp).Row
.Range(.Cells(17, "Z"), .Cells(loLetzteQ, "AK")).AutoFilter Field:=6, Criteria1:="Apfel"
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Copy
wsZ.Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End With
If .AutoFilterMode Then .AutoFilterMode = False
wsZ.Columns(6).Delete
End With
Set wsQ = Nothing: Set wsZ = Nothing
End Sub
Gruß Werner
Anzeige
AW: Makro nach Bedingung laufen lassen
02.10.2019 12:21:42
Peter
Hallo Nick
vieleicht kannst Du damit was anfangen.
https://www.herber.de/bbs/user/132332.xlsm
In Zelle M1 reinschreiben, was kopiert werden soll.
Viele Grüße
Peter (hpo)
AW: Makro nach Bedingung laufen lassen
06.10.2019 10:11:53
Nick
Hallo Werner und Peter,
vielen Dank an euch beide, aber leider konnte ich nicht das gewünschte Ergebnis erzielen, aber das liegt sehr wahrscheinlich an meinen gelieferten Informationen.
Die Spalten, die kopiert werden sollen, werden nicht anhand des Spaltenbuchstabens kopiert, weil sich die Plätze der Spalten in der Tabelle ändern können. Ich zeige euch mal einen Ausschnitt des Codes. Ich versuche die Funktion zur Auswahl der Datensätze Apfel zwischen diese beiden Funktionen einzubauen. Die Bezeichnungen zwischen den Anführungszeichen "" habe ich mal verändert. Ich hoffe, es ist so dennoch verständlich. Die Funktion zum Löschen der leeren Zeilen funktioniert auch so, wie es soll. Hoffentlich kann das zum besseren Verständnis beitragen.
LG Nick
Sub test()
'Hier werden die leeren Zeilen gelöscht
Dim Treffer0 As Range
With Tabelle1
Set Treffer0 = Rows(2).Find(what:="SpalteZ", lookat:=xlWhole)
Columns(Treffer0.Column).SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Select
Selection.Delete Shift:=xlUp
Sheets("TabelleX").Select
Rows("1:1").Select
Selection.Copy
Sheets("Dieses Tabellenblatt").Select
Rows("1:1").Select
Selection.Insert Shift:=xlDown
End With
'Ab hier werden die Spalten, die kopiert werden soll, anhand des Spaltennamens gesucht und  _
kopiert
Dim Treffer1 As Range
With Tabelle1
Set Treffer1 = Rows(2).Find(what:="SpalteX", lookat:=xlWhole)
Dim SpalteX As Range
Set SpalteX = .Rows(1).Find(what:="SpalteX", lookat:=xlWhole)
If Treffer1 Is Nothing Then
MsgBox "SpalteX nicht gefunden."
Else
Columns(Treffer1.Column).Select
Selection.Copy
Columns(Betreiber.Column).Select
ActiveSheet.Paste
'MsgBox "SpalteX eingefuegt"
End If
End With

Anzeige
AW: Makro nach Bedingung laufen lassen
06.10.2019 18:04:00
Werner
Hallo Nick,
teste mal:
Option Explicit
Public Sub Versuch()
Dim strSuch1 As String, strSuch2 As String
Dim loLetzte As Long, raFund As Range
strSuch1 = "Obstsorte"
strSuch2 = "Apfel"
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
Set raFund = .Rows(2).Find(what:=strSuch1, LookIn:=xlValues, lookat:=xlWhole)
If Not raFund Is Nothing Then
loLetzte = .Cells(.Rows.Count, raFund.Column).End(xlUp).Row
If WorksheetFunction.CountIf(.Range(.Cells(2, raFund.Column), _
.Cells(loLetzte, raFund.Column)), strSuch2) > 0 Then
.Range(.Cells(2, "Z"), .Cells(loLetzte, "AK")).AutoFilter _
Field:=raFund.Column - 25, Criteria1:=strSuch2
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Copy _
Worksheets("Tabelle2").Range("A1")
End With
Worksheets("Tabelle2").Columns(raFund.Column - 25).Delete
If .AutoFilterMode Then .AutoFilterMode = False
Else
MsgBox strSuch2 & " ist in Spalte " & raFund.Value & " nicht vorhanden."
End If
Else
MsgBox strSuch1 & " wurde in der Überschriftenzeile nicht gefunden."
End If
End With
Set raFund = Nothing
End Sub
Gruß Werner
Anzeige
Für ein Feedback reicht es wohl nicht. o.w.T.
08.10.2019 02:38:05
Werner
AW: Für ein Feedback reicht es wohl nicht. o.w.T.
08.10.2019 09:59:32
Nick
Hallo Werner,
natürlich reicht es für ein Feedback. Ich bin sehr dankbar für jede Hilfe und versuche die Vorschläge konstruktiv zu verarbeiten und nicht gleich zu verwerfen, weil es nicht auf Anhieb funktioniert, da es mir an Fähigkeiten mangelt. Leider habe ich es bisher mit dem Ansatz noch nicht zum Laufen bekommen und investiere Hirnschmalz, um es zu Lösen.
LG Nick
AW: Für ein Feedback reicht es wohl nicht. o.w.T.
08.10.2019 13:10:46
Werner
Hallo Nick,
in deinem ersten Beitrag zu diesem Thema wurdest du von Daniel aufgefordert:
hilfreich wäre eine Beispieldatei, in welcher du zeigst
1. wie die Daten zu beginn vorliegen
2. wie du dir das Ergebnis vorstellst
3. welchen Code du schon hast, welches Ergebnis er liefert und was anders sein soll.

Punkt 1 ist durch die Beispielmappe von dir aufgezeigt.
Punkt 2 und 3 sind nach wie vor unbeantwortet.
Jetzt schreibst du, dass du es nicht zum Laufen bekommst - bringt als Fehlerbeschreibung gar nichts.
Gruß Werner
Anzeige
AW: Für ein Feedback reicht es wohl nicht. o.w.T.
09.10.2019 13:18:32
Nick
Hallo Werner,
nach intensiven Bemühungen meinerseits, habe ich es dennoch nicht geschafft, deinen Code korrekt in meine Datei einzubauen. Es kamen unterschiedliche Fehlermeldungen, wie z.B. der Laufzeitfehler 91 oder dass der Index außerhalb des gültigen Bereichs liegt. Ich möchte betonen, dass es zu 100% an meinen mangelhaften Fähigkeiten liegt. Ich bin wirklich dankbar für jede investierte Mühe und möchte mich entschuldigen, falls mein Schweigen falsch verstanden wurde!
Ich habe das Problem inzwischen anderweitig gelöst bzw. umgegangen. Ich filtere die Datensätze nun nicht von vornherein, sondern habe der Zieltabelle eine Spalte hinzugefügt, in welche die Daten der Spalte "Obstsorte" eingefügt werden. Jetzt müssen die Zeilen mit den falschen Datensätzen nur noch manuell gelöscht. Nun versuche ich mich daran das manuelle Löschen durch eine Funktion im Makro zu automatisieren, aber das schaffe ich hoffentlich alleine. Vielen Dank nochmal!
LG Nick
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige