Werte aus Excel mit [] auslesen
23.10.2024 14:33:17
Andreas
bin schon eine Zeit lang damit Beschäftigt, Daten aus einer Excel an eine andere zu übergeben, aber komme einfach nicht weiter.
Vielleicht kann mir von euch jemand auf den Sprung helfen, woran das liegen könnte.
Mein Vorgelagerter Prozess hat nicht direkt mit Excel zu tun, für die Nachvollziehbarkeit fange ich aber trotzdem mal damit an (das funktioniert auch alles).
1. Es werden Daten mit PowerQuery über eine ODBC-Schnittstelle aus einem anderen Programm ausgelesen.
Die landen dann in einer Excel-Tabelle die heißt "Datenbank".
2. Aus der "Datenbank" werden Werte in meine Exceldatei "Erfassung" ausgelesen. Hier mal eine Beispielformel:
=SVERWEIS($D3;'X:\Datenbank\[Datenbank.xlsm]vtTabelle'!$A$1:$AAN$50000;8;FALSCH)
3. Durch die eckigen Klammern funktioniert das auch schon, dass die Werte ausgelesen werden auch wenn meine "Datenbank" geschlossen ist.
4. Zu meinem Problem: Bisher war es halt so, dass ich wenn neue Daten in dem ERP-System erfasst werden, die "Datenbank" geöffnet werden muss, (die Daten aktualisieren sich von alleine, solange muss man warten) dann speichern und schließen.
Den Schritt wollte ich automatisieren und bastele da jetzt an einer VBA rum.
Das Makro hab ich in meiner Datei "Erfassung" es kann schon folgendes beim auslösen:
5. "Datenbank" wird geöffnet
6. "Datenbank" wird aktualisiert (das sieht man auch dass die neuen Datensätze drin sind)
7. "Datenbank" wird gespeichert und geschlossen
Jetzt kommt das verrückte, was ich einfach nicht kapier.
Meine Formel aus Punkt 2 gibt erst dann Werte wieder, wenn ich die "Datenbank" manuell öffne und wieder schließe (ich muss nicht mal mehr speichern).
Folgendes hab ich schon probiert:
8. Das Excel die "Datenbank" im Hintergrund aktualisiert, speichert und schließt
9. Die "Datenbank" im Vordergrund aktualisieren lassen, nach dem speichern 5 Sek. warten und dann schließen
10. Die "Datenbank" im Hintergrund aktualisiert speichert schließt, sie im Vordergrund nochmal geöffnet gespeichert und geschlossen wird
Leider komme ich immer zu dem selben Ergebnis.
Die "Datenbank" öffnet, aktualisiert, speichert und schließt.
Damit aber meine Formeln (Punkt 2) in der "Erfassung" die Werte aus der "Datenbank" auslesen muss ich die "Datenbank" manuell öffnen und schließen.
Hier noch meine VBA wie sie aktuell ist:
Sub AktualisiereDatenbank()
Dim xlApp As Object
Dim wb As Object
Dim startTime As Double
On Error GoTo Fehlerbehandlung
' Excel im Hintergrund öffnen
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False ' Unsichtbar machen
' Datenbank öffnen
Set wb = xlApp.Workbooks.Open("X:\Datenbank\Datenbank.xlsm")
' Abfragen aktualisieren
wb.RefreshAll
' Warten, bis die Aktualisierung abgeschlossen ist (90 Sekunden Wartezeit)
startTime = Timer
Do While Timer startTime + 90 ' 90 Sekunden warten
DoEvents ' Stellt sicher, dass Excel Ereignisse verarbeitet
Loop
' Excel-Anwendung in den Vordergrund bringen
xlApp.Visible = True ' Sichtbar machen
' 5 Sekunden warten
Application.Wait (Now + TimeValue("0:00:05"))
' Speichern und Schließen der Datenbank
wb.Save
wb.Close SaveChanges:=True
' Excel-Anwendung beenden
xlApp.Quit
' Speicher freigeben
Set wb = Nothing
Set xlApp = Nothing
Exit Sub
Fehlerbehandlung:
MsgBox "Ein Fehler ist aufgetreten: " & Err.Description, vbCritical, "Fehler"
If Not xlApp Is Nothing Then xlApp.Quit
Set wb = Nothing
Set xlApp = Nothing
End Sub
Für jegliche Anregungen oder Ideen, die mir helfen könnten wäre ich euch sehr Dankbar.
Gruß Andreas
Anzeige