01.05.2020, 13:51
(Dieser Beitrag wurde zuletzt bearbeitet: 01.05.2020, 16:14 von Grzegorz.
Bearbeitungsgrund: Falsche Sub
)
Hallo Zusammen,
ich stehe vor einer großen Aufgabe mit einer Kombination von Excel, VBA und MySQL. Meine Skills sind in Excel irgendwo zwischen Rudimentär und fortgeschritten, VBA und MySql sind bestenfalls Rudimentär. Doch mit viel Ausdauer und guten Googleskills konnte ich das bislang ausgleichen.
Ausgangssituation: Ich habe eine dbase Datenbank die man mit Excel öffnen kann. Das Ziel ist, einen Datensatz aus der dbase-"Tabelle" zu kopieren, zu filtern/bereinigen, die Werte mit einer zweiten Tabelle zu vergleichen, diese zu aktualisieren und das ganze dann in eine MySQL-Datenbank zu schreiben. Das langfristige Ziel ist, dies komplett zu automatisieren, so dass ich eine Aufgabe erstelle, die Nachts irgendwann die Aktualisierung durchlaufen lässt, davon bin ich aber noch sehr weit entfernt.
Leider liegt es mir überhaupt nicht, mir erst mal trockene Theorie anzueignen (das ist keine Faule ausrede), für mich funktioniert learning by doing einfach am besten - meine Lösungen sind vielleicht nicht die saubersten, aber bisher funktioniert ist. Aktuell stehe ich vor einem Stolperstein und ich hoffe ihr könnt mir etwas helfen.
Nachfolgend Zeige ich euch mal, was ich bisher gemacht habe, damit es nachvollziehbar ist:
Ich habe eine Arbeitsmappe erstellt und das erste Macro öffnet die dbase Datenbank, entfernt erst mal alles, was ich nicht benötige und kopiert mir den Inhalt in das Worksheet "com"
Als nächstes sollen die Datensätze Verglichen und Änderungen in das Worksheet "live" übernommen werden. Ein Knackpunkt ist hier: die Datensätze werden künftig rechts angehängt noch 3-4 Spalten mehr haben, weil hier in MySQL noch ein bisschen was passiert.
Bisher mache ich das so (bitte beachten, ich habe noch keine Ahnung und mache mich Step für Step an jede einzelne Aufgabe):
Das ziel ist, diese Zeilen hier (in worksheet "com") nach und nach mit den Zeilen aus dem Worksheet "live" zu vergleichen und bei Änderungen den Inhalt von "B:Q" zu ersetzen:
Nun stehe ich vor zwei Problemen:
1.) Erkennt mein Lösungsansatz nur Änderungen in der Spalte "AUFTRNR", die restlichen Spalten scheint er beim vergleichen zu Ignorieren. Ich habe hier schon einige Dinge ausprobiert, wie "LookAt" und "MatchCase" usw.
2.) möchte ich natürlich nicht die Zeilennummer die geprüft und verglichen werden soll vorgeben, sondern er soll alle Zeilen automatisch durchprüfen. Mit diesem Problem habe ich mich allerdings noch nicht befasst, weil ich ja das erste noch nicht gelöst hatte =)
Ich hoffe ihr schlagt mich nicht, weil meine Lösungsansätze eventuell etwas wild sind - ich lerne noch
Für eure Hilfe wäre ich wahnsinnig Dankbar
Viele Grüße und einen schönen Feiertag
EDIT:
Problem 2 konnte ich mit folgendem Code lösen
ich stehe vor einer großen Aufgabe mit einer Kombination von Excel, VBA und MySQL. Meine Skills sind in Excel irgendwo zwischen Rudimentär und fortgeschritten, VBA und MySql sind bestenfalls Rudimentär. Doch mit viel Ausdauer und guten Googleskills konnte ich das bislang ausgleichen.
Ausgangssituation: Ich habe eine dbase Datenbank die man mit Excel öffnen kann. Das Ziel ist, einen Datensatz aus der dbase-"Tabelle" zu kopieren, zu filtern/bereinigen, die Werte mit einer zweiten Tabelle zu vergleichen, diese zu aktualisieren und das ganze dann in eine MySQL-Datenbank zu schreiben. Das langfristige Ziel ist, dies komplett zu automatisieren, so dass ich eine Aufgabe erstelle, die Nachts irgendwann die Aktualisierung durchlaufen lässt, davon bin ich aber noch sehr weit entfernt.
Leider liegt es mir überhaupt nicht, mir erst mal trockene Theorie anzueignen (das ist keine Faule ausrede), für mich funktioniert learning by doing einfach am besten - meine Lösungen sind vielleicht nicht die saubersten, aber bisher funktioniert ist. Aktuell stehe ich vor einem Stolperstein und ich hoffe ihr könnt mir etwas helfen.
Nachfolgend Zeige ich euch mal, was ich bisher gemacht habe, damit es nachvollziehbar ist:
Code:
Windows("kommunikation.xlsm").Activate
Sheets("com").Select
Cells.Select
Selection.ClearContents
Workbooks.Open Filename:="G:\Winmodis\APOS - Kopie.DBF"
Columns("GQ:GQ").Select
Selection.Delete Shift:=xlToLeft
Columns("BT:GO").Select
Selection.Delete Shift:=xlToLeft
Columns("AT:BR").Select
Selection.Delete Shift:=xlToLeft
Columns("AC:AM").Select
Selection.Delete Shift:=xlToLeft
Columns("Y:AA").Select
Selection.Delete Shift:=xlToLeft
Columns("Q:W").Select
Selection.Delete Shift:=xlToLeft
Columns("M:O").Select
Selection.Delete Shift:=xlToLeft
Columns("J:K").Select
Selection.Delete Shift:=xlToLeft
Columns("F:H").Select
Selection.Delete Shift:=xlToLeft
Columns("B:C").Select
Selection.Delete Shift:=xlToLeft
Columns("A:R").Select
Selection.Copy
Windows("kommunikation.xlsm").Activate
Sheets("com").Select
ActiveSheet.Paste
Ich habe eine Arbeitsmappe erstellt und das erste Macro öffnet die dbase Datenbank, entfernt erst mal alles, was ich nicht benötige und kopiert mir den Inhalt in das Worksheet "com"
Als nächstes sollen die Datensätze Verglichen und Änderungen in das Worksheet "live" übernommen werden. Ein Knackpunkt ist hier: die Datensätze werden künftig rechts angehängt noch 3-4 Spalten mehr haben, weil hier in MySQL noch ein bisschen was passiert.
Bisher mache ich das so (bitte beachten, ich habe noch keine Ahnung und mache mich Step für Step an jede einzelne Aufgabe):
Code:
Sub ZeileFindenkopieren()
Dim Ergebnis As Range
Dim suchzeile As Variant
Dim Zeilennummer As Long
Zeilennummer = 15
suchzeile = Worksheets("com").Columns("A:P").Rows(Zeilennummer)
Set Ergebnis = Worksheets("live").Columns("B:Q").Find(What:=suchzeile)
If Ergebnis Is Nothing Then
Worksheets("com").Columns("A:P").Rows(Zeilennummer).Copy
Worksheets("live").Range("B" & Worksheets("live").Cells(Worksheets("live").Rows.Count, 1).End(xlUp).Row + 1).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Else
MsgBox "Aktuell"
End If
End Sub
Das ziel ist, diese Zeilen hier (in worksheet "com") nach und nach mit den Zeilen aus dem Worksheet "live" zu vergleichen und bei Änderungen den Inhalt von "B:Q" zu ersetzen:
Nun stehe ich vor zwei Problemen:
1.) Erkennt mein Lösungsansatz nur Änderungen in der Spalte "AUFTRNR", die restlichen Spalten scheint er beim vergleichen zu Ignorieren. Ich habe hier schon einige Dinge ausprobiert, wie "LookAt" und "MatchCase" usw.
2.) möchte ich natürlich nicht die Zeilennummer die geprüft und verglichen werden soll vorgeben, sondern er soll alle Zeilen automatisch durchprüfen. Mit diesem Problem habe ich mich allerdings noch nicht befasst, weil ich ja das erste noch nicht gelöst hatte =)
Ich hoffe ihr schlagt mich nicht, weil meine Lösungsansätze eventuell etwas wild sind - ich lerne noch
Für eure Hilfe wäre ich wahnsinnig Dankbar
Viele Grüße und einen schönen Feiertag
EDIT:
Problem 2 konnte ich mit folgendem Code lösen
Code:
Sub pruefung()
Dim Zeilennummer As Long
Dim Ergebnis As Range
Dim suchzeile As Variant
Zeilennummer = 2
Do Until IsEmpty(Worksheets("com").Columns("A").Rows(Zeilennummer).Value) = True
suchzeile = Worksheets("com").Columns("A:P").Rows(Zeilennummer)
Set Ergebnis = Worksheets("live").Columns("B:Q").Find(What:=suchzeile)
If Ergebnis Is Nothing Then
Worksheets("com").Columns("A:P").Rows(Zeilennummer).Copy
Worksheets("live").Range("B" & Worksheets("live").Cells(Worksheets("live").Rows.Count, 2).End(xlUp).Row + 1).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
Application.Wait (Now + TimeValue("00:00:01"))
Zeilennummer = Zeilennummer + 1
Loop
MsgBox "ende erreicht"
End Sub