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

Gliedern von Artikel inkl. Aktualisierung

Gliedern von Artikel inkl. Aktualisierung
15.10.2019 08:04:45
Artikel
Guten Morgen,
anbei meine Übungsdatei mit folgender Frage :)
https://www.herber.de/bbs/user/132535.xlsm
Wie muss ich das Makro umschreiben, sodaß es mir im Blatt "Projektplanung" alle Früchte so gliedert wie in der Beispieldatei vorbereitet? :)
Wichtig dabei ist, dass wenn ich nachträglich einen weiteren Apfel einfüge, er auch bei den Äpfel landet und nicht unter den Zitronen.
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim wsQ As Worksheet, wsZ As Worksheet
Dim Zelle As Range, rng As Range
Set wsQ = ThisWorkbook.Sheets("Obst")
Set wsZ = ThisWorkbook.Sheets("Projektplanung")
Dim letzteQ As Long, letzteZ As Long
If wsQ.FilterMode Then wsQ.ShowAllData
letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
Set rng = wsQ.Range("A5:A" & letzteQ)
For Each Zelle In rng
If Zelle = "x" Then
letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
wsZ.Range("D" & letzteZ + 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
Next Zelle
rng.ClearContents
End Sub
Danke für eure Unterstützung.
Gruß
Birgit

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gliedern von Artikel inkl. Aktualisierung
15.10.2019 08:09:27
Artikel
Oh, ich hab eine wichtige Info vergessen. Entschuldigt.
Es werden verschiedene Gewerke sein die gegliedert sind unter "xy.mllw.123" als Beispiel. Wichtig ist, dass sich die Gliederung darauf bezieht. Also sich einen Teil aus dieser Bezeichnung nimmt und für "mllw" zum Beispiel "Maler" nimmt für die Gliederung.
Geht das überhaupt? :)
LG
Birgit
AW: Gliedern von Artikel inkl. Aktualisierung
15.10.2019 08:36:12
Artikel
Hallo Birgit,
erst mal dein Code zurueck mit entsprechender Aenderung fuers Einfuegen an der richtigen Stelle.
Deinen zweiten Post kann ich nicht so ganz verstehen. Vielleicht solltest du dazu mal eine weitere Beispieldatei erstellen, damit man versteht was du meinst.

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim wsQ As Worksheet, wsZ As Worksheet
Dim Zelle As Range, rng As Range
Set wsQ = ThisWorkbook.Sheets("Obst")
Set wsZ = ThisWorkbook.Sheets("Projektplanung")
Dim letzteQ As Long, letzteZ As Long
If wsQ.FilterMode Then wsQ.ShowAllData
letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
Set rng = wsQ.Range("A5:A" & letzteQ)
For Each Zelle In rng
If Zelle = "x" Then
letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
wsZ.Activate
wsZ.Range("E" & letzteZ).Select
Do Until ActiveCell = Zelle.Offset(0, 2)
ActiveCell.Offset(-1, 0).Select
Loop
wsZ.Rows(ActiveCell.Row + 1).Insert Shift:=xlDown
wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
wsZ.Range("D" & ActiveCell.Row + 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
Next Zelle
rng.ClearContents
End Sub

Gruss Torsten
Anzeige
AW: Gliedern von Artikel inkl. Aktualisierung
15.10.2019 09:10:17
Artikel
Hallo Torsten,
hier gibt es ein Problem :)
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim wsQ As Worksheet, wsZ As Worksheet
Dim Zelle As Range, rng As Range
Set wsQ = ThisWorkbook.Sheets("LWGU 1,5_2554")
Set wsZ = ThisWorkbook.Sheets("Projektplanung")
Dim letzteQ As Long, letzteZ As Long
If wsQ.FilterMode Then wsQ.ShowAllData
letzteQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
Set rng = wsQ.Range("A5:A" & letzteQ)
For Each Zelle In rng
If Zelle = "x" Then
letzteZ = wsZ.Cells(Rows.Count, 4).End(xlUp).Row
wsZ.Activate
wsZ.Range("E" & letzteZ).Select
Do Until ActiveCell = Zelle.Offset(0, 2)
 ActiveCell.Offset(-1, 0).Select
Loop
wsZ.Rows(ActiveCell.Row + 1).Insert Shift:=xlDown
wsQ.Range("B" & Zelle.Row & ":J" & Zelle.Row).Copy
wsZ.Range("D" & ActiveCell.Row + 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
Next Zelle
rng.ClearContents
End Sub
Es spuckt einen Fehler aus.
Und anbei noch einmal eine abgewandelte Beispieldatei.
https://www.herber.de/bbs/user/132538.xlsm
Im Normalfall ist das Blatt "Projektplanung" leer. Die Bezeichnung der Artikel habe ich nun mal bei der Zitrone abgewandelt.
Das Makro soll also z.B. "zima" erkennen und dann wie in der ersten Beispieldatei die einzelnen Positionen unter "Zitrone" gliedern.
Natürlich kann ich die Gliederung schon vorgeben sodaß sich das Makro daran orientieren kann, aber es muss halt selbstständig erkennen können um welchen Artikel es sich handelt und ggf. hinzukommende korrekt zuordnen.
Ich bin echt heilfroh, dass es so fähige Menschen wie euch hier gibt. :)
Danke für Deine Mühe.
VG
Birgit
Anzeige
Falls es unlösbar ist einfach sagen :)
15.10.2019 14:02:30
Birgit
VG
Birgit
AW: Falls es unlösbar ist einfach sagen :)
15.10.2019 18:18:35
Dieter
Hallo Birgit,
es ist vermutlich nicht unlösbar, du musst nur deine Angaben noch etwas ergänzen.
Woran soll das Programm erkennen, dass "zima" dem Begriff "Zitrone" zugeordnet werden soll?
Da müsstest du schon deiner Arbeitsmappe eine Zuordnungsliste beifügen: "apma" -> "Apfel" usw.
Ich habe dir einmal als Diskussionsgrundlage in deine Arbeitsmappe ein Programm eingefügt, welches diese Zuordnung natürlich nicht vornehmen kann, sondern in Spalte C von Blatt "Projektplanung" die Begriffe "apma", usw. vermerkt.
Außerdem habe ich dein Problem so verstanden, dass nur Zeilen übernommen werden, die im Blatt "Obst" in Spalte A ein "x" haben.
Das Blatt "Projektplanung" wird bei jedem Programmstart komplett neu aufgebaut.
Sub LeistungenÜbernehmen()
Dim aktLeistung As String
Dim letzteZeileQ As Long
Dim bisherLeistung
Dim wsQ As Worksheet
Dim wsZ As Worksheet
Dim zeileQ As Long
Dim zeileZ As Long
Application.ScreenUpdating = False
Set wsQ = ThisWorkbook.Worksheets("Obst")
Set wsZ = ThisWorkbook.Worksheets("Projektplanung")
' Bisherigen Inhalt von Blatt "Projektplanung" löschen
If Not Intersect(wsZ.UsedRange, wsZ.Rows(3).Resize(wsZ.Rows.Count - 2)) Is Nothing Then
Intersect(wsZ.UsedRange, wsZ.Rows(3).Resize(wsZ.Rows.Count - 2)).ClearContents
End If
letzteZeileQ = wsQ.Cells(wsQ.Rows.Count, "B").End(xlUp).Row
zeileZ = 3
For zeileQ = 3 To letzteZeileQ
If wsQ.Cells(zeileQ, "A") = "x" Then
If Len(wsQ.Cells(zeileQ, "B")) > 6 Then
aktLeistung = Mid$(wsQ.Cells(zeileQ, "B"), 3, 4)
If aktLeistung  bisherLeistung Then
' Wechsel der Leistungsart
wsZ.Cells(zeileZ, "C") = aktLeistung
zeileZ = zeileZ + 1
bisherLeistung = aktLeistung
End If
wsQ.Cells(zeileQ, "B").Resize(, 2).Copy
wsZ.Cells(zeileZ, "D").PasteSpecial Paste:=xlValues
wsQ.Cells(zeileQ, "H").Resize(, 3).Copy
wsZ.Cells(zeileZ, "J").PasteSpecial Paste:=xlValues
Application.CutCopyMode = xlCut
zeileZ = zeileZ + 1
End If
End If
Next zeileQ
Application.ScreenUpdating = True
wsZ.Activate
wsZ.Range("A1").Activate
End Sub
https://www.herber.de/bbs/user/132544.xlsm
Viele Grüße
Dieter
Anzeige
AW: Falls es unlösbar ist einfach sagen :)
16.10.2019 07:46:35
Birgit
Guten Morgen Dieter,
guten Morgen liebe User,
vielen Dank für Deine Hilfe.
Woran soll das Programm erkennen, dass "zima" dem Begriff "Zitrone" zugeordnet werden soll?
Da müsstest du schon deiner Arbeitsmappe eine Zuordnungsliste beifügen: "apma" -> "Apfel" usw.
Es ist überhaupt kein Problem hierfür eine Legende einzufügen. Ich hab auch schon versucht mit WENN und SUCHEN die Formel zu verschachteln, aber irgendwie bin ich noch meilenweit von der Lösung entfernt.
Ich baue mal die Legende ein.
Das Blatt "Projektplanung" wird bei jedem Programmstart komplett neu aufgebaut.
Nein, es soll alle Daten mit einem "X" kopieren, in das Blatt "Projektplanung" einfügen, das "X" löschen und alle eventuellen Nachträge/Ergänzungen kontinuierlich einfügen. ==> Das war der ursprüngliche Plan.
Nun wäre es hilfreich, wenn zusätzlich die verschiedenen Kategorien gegliedert werden und eventuelle Nachträge/Ergänzungen in den jeweiligen Kategorien ergänzt werden.
Hier die Datei mit Legende (Projektplanung W3:X6).
https://www.herber.de/bbs/user/132549.xlsm
VG
Birgit
Anzeige
AW: Falls es unlösbar ist einfach sagen :)
16.10.2019 18:31:21
Dieter
Hallo Birgit,
das wird natürlich etwas komplizierter.
Ich übernehme die Daten zuerst in ein Hilfsblatt, sortiere sie da und baue dann das Blatt "Projektplanung" neu auf.
Das sieht dann so aus:
Sub LeistungenÜbernehmen()
Dim aktLeistung As String
Dim anzLeistBisher As Long
Dim letzteZeileH As Long
Dim letzteZeileQ As Long
Dim letzteZeileZ As Long
Dim bisherLeistung As String
Dim i As Long
Dim sp As Long
Dim transTab As Variant
Dim wsH As Worksheet
Dim wsQ As Worksheet
Dim wsZ As Worksheet
Dim zeileH As Long
Dim zeileQ As Long
Dim zeileZ As Long
Application.ScreenUpdating = False
Set wsH = ThisWorkbook.Worksheets("Hilfsblatt")
wsH.UsedRange.EntireRow.Delete
Set wsQ = ThisWorkbook.Worksheets("Obst")
Set wsZ = ThisWorkbook.Worksheets("Projektplanung")
letzteZeileZ = wsZ.Cells(wsZ.Rows.Count, "W").End(xlUp).Row
If letzteZeileZ  0 Then
' Daten von Projektplanung nach Hilfsblatt übernehmen
letzteZeileZ = wsZ.Cells(wsZ.Rows.Count, "D").End(xlUp).Row
zeileZ = 3
Do Until zeileZ > letzteZeileZ
If Not IsEmpty(wsZ.Cells(zeileZ, "C")) Then
aktLeistung = wsZ.Cells(zeileZ, "C")
zeileZ = zeileZ + 1
Else
Do Until IsEmpty(wsZ.Cells(zeileZ, "D"))
zeileH = zeileH + 1
wsH.Cells(zeileH, "C") = aktLeistung
wsZ.Cells(zeileZ, "D").Resize(, 9).Copy Destination:=wsH.Cells(zeileH, "D")
zeileZ = zeileZ + 1
Loop
End If
Loop
End If
' Neu einzufügende Leistungen dem Hilfsblatt hinzufügen
letzteZeileQ = wsQ.Cells(wsQ.Rows.Count, "B").End(xlUp).Row
For zeileQ = 5 To letzteZeileQ
If wsQ.Cells(zeileQ, "A") = "x" Then
If Len(wsQ.Cells(zeileQ, "B")) > 6 Then
zeileH = zeileH + 1
aktLeistung = Mid$(wsQ.Cells(zeileQ, "B"), 3, 4)
wsH.Cells(zeileH, "C") = WorksheetFunction.VLookup(aktLeistung, transTab, 2, 0)
wsQ.Cells(zeileQ, "B").Resize(, 9).Copy Destination:=wsH.Cells(zeileH, "D")
End If
End If
Next zeileQ
letzteZeileH = zeileH
' Sortierung des Hilfsblattes
With wsH.Sort
With .SortFields
.Clear
.Add Key:=wsH.Range("C1")
.Add Key:=wsH.Range("D1")
End With
.SetRange Rng:=wsH.Range("C1").Resize(letzteZeileH, 10)
.Header = xlNo
.Apply
End With
' Daten aus dem Hilfsblatt nach Projektplanung übernehmen
' Bisherigen Inhalt von Blatt "Projektplanung" löschen
If Not Intersect(wsZ.UsedRange, wsZ.Range("A3").Resize(wsZ.Rows.Count - 2, 12)) Is Nothing  _
Then
Intersect(wsZ.UsedRange, wsZ.Range("A3").Resize(wsZ.Rows.Count - 2, 12)).ClearContents
End If
zeileZ = 3
For zeileH = 1 To letzteZeileH
aktLeistung = wsH.Cells(zeileH, "C")
If aktLeistung  bisherLeistung Then
' Wechsel der Leistungsart
wsZ.Cells(zeileZ, "C") = aktLeistung
zeileZ = zeileZ + 1
bisherLeistung = aktLeistung
End If
wsH.Cells(zeileH, "D").Resize(, 9).Copy
wsZ.Cells(zeileZ, "D").PasteSpecial Paste:=xlValues
Application.CutCopyMode = xlCut
zeileZ = zeileZ + 1
Next zeileH
Application.ScreenUpdating = True
wsZ.Activate
wsZ.Range("A1").Activate
End Sub
https://www.herber.de/bbs/user/132559.xlsm
Viele Grüße
Dieter
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige