Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Werte aus Excel mit [] auslesen

Werte aus Excel mit [] auslesen
23.10.2024 14:33:17
Andreas
Hallo zusammen,

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

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte aus Excel mit [] auslesen
23.10.2024 14:46:09
Onur
Baue das doch mal vor wb.Save ein:
wb.CalculateUntilAsyncQueriesDone
AW: Werte aus Excel mit [] auslesen
23.10.2024 17:10:34
Ulf
Hi,
aktualisiere doch mal mit den QueryTable(s)
exemplarisch für 1 Tabelle:



Public Function refreshAndClose()
On Error GoTo refreshAndCloseERR
Dim wb As Workbook
Dim ws As Worksheet
Dim dt As QueryTable
Dim bFinished As Boolean
Dim dtEnde As Variant
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
Set dt = ws.ListObjects(1).QueryTable
With dt
'Stop nach 20 sec einbauen
.Refresh
dtEnde = Now + 20 / 86400
Do While .Refreshing
DoEvents
If Now > dtEnde Then
.CancelRefresh
bFinished = False
Exit Do
End If
Loop
End With
bFinished = True
refreshAndCloseOUT:
refreshAndClose = bFinished
Exit Function
refreshAndCloseERR:
bFinished = False
Debug.Print Err.Number & vbCrLf & Err.Description
Resume refreshAndCloseOUT
End Function

kannst ja wenn nötig mehrere ListObjects durchlaufen oder den Fehler byRef abfragen
hth
Ulf
Anzeige
AW: Werte aus Excel mit [] auslesen
23.10.2024 17:47:48
Andreas
Hi Ulf,

Herzlichen Dank für deine Hilfe. Das Problem konnte ich jetzt Dank Microsoft Copilot lösen.
Es mussten die SVERWEIS Formlen neu gesetzt werden, damit klappt es dann.

Wünsche dir einen schönen Feierabend

Gruß Andreas

AW: Werte aus Excel mit [] auslesen
23.10.2024 15:56:23
Andreas
Hi Onur,

Danke für deine schnelle Rückmeldung.
Die Zeile hab ich eingebaut.

Folgendes hat sich verändert: Die "Datenbank" schließt nicht mehr und die "Erfassung" bringt folgende Fehlermeldung:

"Ein Fehler ist aufgetreten: Objekt unterstützt diese Eigenschaft oder Methode nicht."

Hast du vielleicht noch eine Idee?

Gruß Andreas

Anzeige
AW: Werte aus Excel mit [] auslesen
23.10.2024 17:29:43
Onur
Ohne die beiden Dateien oder ihren Beispielsversionen nicht.
AW: Werte aus Excel mit [] auslesen
23.10.2024 17:45:42
Andreas
Hallo Onur,

das ist logisch, Die Datenbank kann ich auf Grund von sensiblen Daten nur leider nicht hochladen.
Hab es mal mit Microsoft Copilot probiert. Der konnte mir zum Glück helfen. Das Problem ist wohl gewesen, dass meine SVerweise nicht neu berechnet haben.

Hier der Code mit dem es dann endlich funktioniert hat, aber Vorweg nochmals vielen Dank an dich für deinen Support. Auf dich ist immer Verlass :)

Sub AktualisiereDatenbank()
Dim xlApp As Object
Dim wb As Object
Dim startTime As Double
Dim ws As Worksheet
Dim cell As Range

On Error GoTo Fehlerbehandlung

' Excel im Hintergrund öffnen
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False ' Unsichtbar machen

' Datenquelle öffnen
Set wb = xlApp.Workbooks.Open("X:\\Datenbank\Datenbank.xlsm")

' Abfragen aktualisieren
wb.RefreshAll

' Warten, bis die Aktualisierung abgeschlossen ist (1:30 Minuten Wartezeit)
startTime = Timer
Do While Timer startTime + 90 ' 1:30 Minuten warten
DoEvents ' Stellt sicher, dass Excel Ereignisse verarbeitet
Loop

' 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

' Berechnungen in der "Erfassung"-Datei durchführen
For Each ws In ThisWorkbook.Worksheets
ws.Calculate
Next ws
Application.CalculateFull
ThisWorkbook.RefreshAll

' Manuelles Neuberechnen der Zellen mit SVERWEIS-Formeln
With ThisWorkbook.Worksheets("DQ Pos.")
For Each cell In .UsedRange
If cell.HasFormula Then
cell.Formula = cell.Formula ' Formel neu setzen
End If
Next cell
End With

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




Ich wünsche dir einen schönen Feierabend.

Gruß Andreas


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige