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

Programmentwurf: Kopieren von Werten in Bestand

Programmentwurf: Kopieren von Werten in Bestand
22.04.2015 23:53:13
Werten
Hallo Forum,
ich bin ziemlich neu bei VBA und möchte ein Makro für folgendes Problem bauen:
Ich habe eine Bestandsliste mit völlig unterschiedlichen Werten folgender Struktur und neue Tabellen die unsortierte Werte enthalten und jeweils in eine neuen Spalte in den Bestand reinkopiert werden sollen:
--------
Bestand:
Spalte A Spalte B
Attribut Wert
Attribut1 10 m
Attribut2 5 m
Attribut3 Alexander
Attribut4 50
Attribut5 Dora
Attribut6 2000
Attribut7 Hier könnte ein Wert stehen
Attribut8 500
--------
Neu
Spalte A SpalteB
Attribut Wert
Attribut5 Peter
Atrribut1 20m
Attribut6 1000
--------
Für jede Tabelle sollen die Werte der Attribte in einer neuen Spalte im Bestand eingetragen werden (logischerweise so sortiert wie im Bestand). Wenn ein Attribut im Bestand nicht vorhanden ist soll das gemeldet werden.
Das Programm würde von der logischen Struktur her für mich so aussehen:
---------
Start
Definiere Var1 (Attribut)
Definiere Var2 (Wert)
Definiere Var3 (Zeile Tabelle2)
Definiere Var4 (Zeile Tabelle1)
Definiere Var5 (Spalte Tabelle1)
Definiere Var6 (Werte ?Array?)
Var3 = 1
Var4 = 1
Var5 = B
Var1 = leer
Var2 = leer
Start Schleife1
Kontrolliere Tabelle 2 Spalte B Zeile Var3
Wenn leer beende Schleife1 und Var3 + 1
Wenn Inhalt vorhanden Wert = Var2 und Attribut = Var1
Start Schleife2
Kontrolliere Tabelle 1 Spalte A Zeile Var4
Wenn Inahlt ungleich Var1 beende Schleife2 und Var4 + 1
Wenn Inhalt nicht gefunden trage fehlen Wert in Var 6 ein
Wenn Inhalt = Var 1 kopiere Var2 in Spalte Var5 zeile var4
Beende Schleife2
Beende Schleife1
Var1 und Var2 leeren
Var5 + 1
Ende
---------
Wie gesagt, die ganze Materie ist für mich noch recht neu. Die Frage also an jemanden der Erfahrung hat? Macht das Sinn so wie ich es mir denke? Und wenn ja, welche VBA Funktionen kann ich nutzen um das in Code zu gießen?
Wäre es möglich quasi in der Bestandstabelle den Ort einer neuen Excel-Tabelle einzutragen und diese dann per Knopfdruck reinzukopieren.
Vielleicht denke ich auch vielzu kompliziert und es gibt eine viel viel einfachere Lösung für mein Problem. Please help me :)

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Programmentwurf: Kopieren von Werten in Bestand
23.04.2015 17:30:47
Werten
Hallo Christian,
es wird einfacher dir zu helfen, wenn du hier Beispieldateien für deine Bestandsliste und für die Tabellen mit neuen Daten hier hochlädst. Am besten in eine Zip-Zipdatei gepackt. Sensible personenbezogene Daten ggf. vorher anonymisieren.
Macht das Sinn so wie ich es mir denke?
Für optimales Arbeiten solltest du die Anordnung der Daten in der Bestands-Liste um 90° drehen.
Die Attributnamen gehören in einer Zeile in Spalten nebeneinander. Die Werte je Datensatz in jeweils einer Zeile darunter.
Tabelle	Bestand
Attribut1	Attribut2	Attribut3	Attribut4	Attribut5	Attribut6	Attribut7	Attribut8
10 m    	5 m     	Alexander	50        	Dora	2000	evtl. Wert 	500
20 m    	         	          	        	Peter	1000		
So kann man die integrierten Filterfunktionen und Sortierfunktionen optimal nutzen.
Und wenn ja, welche VBA Funktionen kann ich nutzen um das in Code zu gießen?
- For-Next-Schleife,
um die Daten der neuen Tabelle Zeilenweise abzuarbeiten.
Dabei muss es ein eindeutiges Kriterium geben, wann ein Datensatz zu Ende ist bzw. beginnt (Leerzeile, bestimmtes Attribut etc)
-If-Then-Else-EndIf
Zum Vergleichen der Attribut-Name und Einsortieren der Werte in die korrekten Spalten.
- Daten-Array,
um neuen Datensatz einzulesen. Die Werte zu den Attributen liest man in das Daten-Array ein, das eine entsprechend der Anzahl Attribute Anzahl Spalten hat. Wird einer neuer Datensatz erkannt, dann werden im Bestand in der nächsten frein Zeile die Daten eingetragen. Danach wird das Daten-Array geleert und der nächste Datensatz eingelesen.
- Objektvariablen für die Involvierten Arbeitsmappen und Tabellenblätter
Diese erleichtern die Übersicht im Makro und man kommt ohne Activate und Select-Anweisungen im Code aus.
Wäre es möglich quasi in der Bestandstabelle den Ort einer neuen Excel-Tabelle einzutragen und diese dann per Knopfdruck reinzukopieren.
Kann man so machen. Es ist aber einfacher an den Beginn des Makros einen entsprechenden Dateiauswahldialog einzubauen.
Gruß
Franz

Anzeige
AW: Programmentwurf: Kopieren von Werten in Bestand
26.04.2015 01:55:46
Werten
Hallo Franz,
zunächst einmal vielen Dank für deine Antwort. Deine Kommentare habe mir wirklich sehr geholfen! Leider habe ich keinen Einfluss auf den Aufbau der Bestandsliste. Sie muss aus bestimmten Gründen genau so aussehen.
Bestand
Attribut 1 Wert 1
Attribut 2 Wert 2
Attribut 3 Wert 3
Attribut 4 Wert 4
Attribut 5 Wert 5
Attribut 6 Wert 6
Attribut 7 Wert 7
Attribut 8 Wert 8
Attribut 9 Wert 9
Attribut 10 Wert 10
In einer neuen Spalte sollen dann die Werte einer anderen (unsortierten) Tabelle aufgenommen werden:
Neu
Attribut 5 Wert 5
Attribut 2 Wert 2
Attribut 7 Wert 7
Danke für den Hinweis bezüglich der Schleifen. Ich habe jetzt den folgenden Code für mich entwickelt
Wird sicher nicht das eleganteste sein... ich bin Anfänger :(... Aber es funktioniert.
Sub kopieren()
Dim Titel As Variant
Dim SpalteNeu As Variant
Dim Attribut As Variant
Dim Wert As Variant
SpalteNeu = [E1]
For i=1 To 3
Attribut = Workbooks(Titel).Worksheets("Sheet1").Cells(i, 1).Value
Wert = Workbooks(Titel).Worksheets("Sheet1).Cells(i, 2).Value
For j=1 To 10
If Workbooks(Bestand.xlsm").Worksheets("Sheet1").Cells(j, 2).Value = Attribut
Then
Workbooks("Bestand.xlsm").Worksheets(Sheet1").Cells(j, SpalteNeu).Value = Wert
Next j
Next i
End Sub

Für die Dateiauswahl verwende ich einfach eine Zelle in die man den Dateipfad eintragen kann und dieser dann als Variable gespeichert wird. Hier mein erstes Problem. Gibt es in VBA eine Art "Case1, Case2, Case 3" Schleife so das ich MsgBoxes mit Hinweisen generieren kann wenn bspw. kein oder ein falscher Pfad eingetragen wurde bevor ein Runtime Error kommt?
Mein größtes Problem: Wenn die Attribute wirklich gleich sind funktioniert das kopieren. Im Falle eines simplen Rechtschreibfehlers oder eines neu vorkommenden Attributs in der neuen Tabelle werden die Werte nicht übernommen. Das Makro müsste also eine Funktion besitzen die mir am Ende des Kopiervorgangs alle Werte in der neuen Liste ausgibt die nicht in der Bestandsliste gefunden und kopiert werden konnten. Irgendwie müsste mir die zweite FOR-Schleife quasi melden wenn es nach durchlauf keinen Kopiervorgang gegeben hat, das Attribut dann irgendwo speichern und ganz am Ende müssten alle fehlenden Attribute angezeigt werden. So recht fällt mir zu diesem Problem noch keine Lösung ein. Kannst du/ihr helfen?
Vielen Dank im Voraus!
Christian

Anzeige
AW: Programmentwurf: Kopieren von Werten in Bestand
26.04.2015 02:14:29
Werten
Sorry, Häkchen nicht gesetzt. Daher der Doppelpost :(
Hallo Franz,
zunächst einmal vielen Dank für deine Antwort. Deine Kommentare habe mir wirklich sehr geholfen! Leider habe ich keinen Einfluss auf den Aufbau der Bestandsliste. Sie muss aus bestimmten Gründen genau so aussehen.
Bestand
Attribut 1 Wert 1
Attribut 2 Wert 2
Attribut 3 Wert 3
Attribut 4 Wert 4
Attribut 5 Wert 5
Attribut 6 Wert 6
Attribut 7 Wert 7
Attribut 8 Wert 8
Attribut 9 Wert 9
Attribut 10 Wert 10
In einer neuen Spalte sollen dann die Werte einer anderen (unsortierten) Tabelle aufgenommen werden:
Neu
Attribut 5 Wert 5
Attribut 2 Wert 2
Attribut 7 Wert 7
Danke für den Hinweis bezüglich der Schleifen. Ich habe jetzt den folgenden Code für mich entwickelt
Wird sicher nicht das eleganteste sein... ich bin Anfänger :(... Aber es funktioniert.
Sub kopieren()
Dim Titel As Variant
Dim SpalteNeu As Variant
Dim Attribut As Variant
Dim Wert As Variant
SpalteNeu = [E1]
For i=1 To 3
Attribut = Workbooks(Titel).Worksheets("Sheet1").Cells(i, 1).Value
Wert = Workbooks(Titel).Worksheets("Sheet1).Cells(i, 2).Value
For j=1 To 10
If Workbooks(Bestand.xlsm").Worksheets("Sheet1").Cells(j, 2).Value = Attribut
Then
Workbooks("Bestand.xlsm").Worksheets(Sheet1").Cells(j, SpalteNeu).Value = Wert
Next j
Next i
End Sub

Für die Dateiauswahl verwende ich einfach eine Zelle in die man den Dateipfad eintragen kann und dieser dann als Variable gespeichert wird. Hier mein erstes Problem. Gibt es in VBA eine Art "Case1, Case2, Case 3" Schleife so das ich MsgBoxes mit Hinweisen generieren kann wenn bspw. kein oder ein falscher Pfad eingetragen wurde bevor ein Runtime Error kommt?
Mein größtes Problem: Wenn die Attribute wirklich gleich sind funktioniert das kopieren. Im Falle eines simplen Rechtschreibfehlers oder eines neu vorkommenden Attributs in der neuen Tabelle werden die Werte nicht übernommen. Das Makro müsste also eine Funktion besitzen die mir am Ende des Kopiervorgangs alle Werte in der neuen Liste ausgibt die nicht in der Bestandsliste gefunden und kopiert werden konnten. Irgendwie müsste mir die zweite FOR-Schleife quasi melden wenn es nach durchlauf keinen Kopiervorgang gegeben hat, das Attribut dann irgendwo speichern und ganz am Ende müssten alle fehlenden Attribute angezeigt werden. So recht fällt mir zu diesem Problem noch keine Lösung ein. Kannst du/ihr helfen?
Vielen Dank im Voraus!
Christian

Anzeige
AW: Programmentwurf: Kopieren von Werten in Bestand
26.04.2015 10:02:23
Werten
Hallo Christian,
ich hab dein Makro mal etwas erweitert/optimiert und in eine Testdatei eingebaut.
Die hochgeladene ZIP-Datei enthält eine Datei Bestand.xlsm und 2 Dateien mit neuen Daten.
https://www.herber.de/bbs/user/97306.zip
In der Datei "Bestand.xlsm" ist ein 2. Blatt Steuerung, von dem aus die Aktionen gestartet werden können.
Das Makro "kopieren" prüft jetzt ob die Zelle B1 (Zelle mit Dateiname)
- leer ist
- die Datei existiert
- die datei schon geöffnet ist
Sind in der Datei mit den neuen Daten Attribute vorhanden, die im Bestand fehlen, dann werden diese im Blatt "Steuerung" eingetragen.
Zusätzlich hab ich eine Schaltfläche zur Datei-Auswahl eingebaut, die den gewählten Namen in B1 einträgt.
Gruß
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige