Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Datenbankabgleich
#1
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:

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  [Bild: image.png] mit den Zeilen aus dem Worksheet "live" zu vergleichen und bei Änderungen den Inhalt von "B:Q" zu ersetzen: [Bild: image.png]

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  Angel

Für eure Hilfe wäre ich wahnsinnig Dankbar  Blush

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


Angehängte Dateien
.xlsm   kommunikation.xlsm (Größe: 37,94 KB / Downloads: 2)
Zitieren
#2
Hallo GregorZ

also zu deinem Vorhaben 'mal Respekt
ABER: das wird nix....

Wenn gar keine bis ganz wenige VBA Kenntnisse vorhanden sind, dann ist dieses Projekt schlichtweg "zu groß".

Es beginnt schon im ersten Teil deines "mitgelieferten" Codes

Verzichte soweit geht auf Activate und Select
Das geht alles einfacher und komfortabler....

Du solltest deklarieren und "Set" verwenden.
Ich habe in der Schnelle nichts andres gefunden, aber orientiere dich mal hier ab Abschnitt "Set ActiveWorkbook in Excel"...
https://analysistabs.com/vba-code/workbook/m/activate/

lg
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 5 Gast/Gäste




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions