Anzeige
Archiv - Navigation
1964to1968
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

Die Reihenfolge der Ausführung stimmt nicht.

Die Reihenfolge der Ausführung stimmt nicht.
04.03.2024 09:06:34
Uli
Hallo,

ich habe folgendes Problem:

Ich hole mir mittels Access über 2 Makros Daten in eine Excel-Datei (Dateipfad ist rausgelöscht - Funktioniert aber):

Function AutoExec()

If Time > TimeValue("08:06:30") And Time = TimeValue("08:07:30") Then

Application.RunCommand acCmdAppMinimize
Call Export_Data_FH
DoCmd.Quit acSave

End If

End Function


und

Function Export_Data_FH()

On Error GoTo Export_Data_FH_Err

DoCmd.SetWarnings False
DoCmd.OpenQuery "FH_FK", acViewNormal, acEdit
DoCmd.OpenQuery "FH_F1", acViewNormal, acEdit
DoCmd.OpenQuery "F15-F1", acViewNormal, acEdit
DoCmd.TransferSpreadsheet acExport, 10, "EXTBL_FH_FK", True, "IM_FK"
DoCmd.TransferSpreadsheet acExport, 10, "EXTBL_FH_F1", True, "IM_F1"
DoCmd.TransferSpreadsheet acExport, 10, "EXTBL_FH_F15_F1", True, "IM_F15_F1"

' Erstellen Sie ein Excel-Objekt und führen Sie es im Hintergrund aus
Dim appExcel As Object
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = False


' Öffnen Sie die Arbeitsmappe und führen Sie das Makro aus
Dim wb As Object
Set wb = appExcel.Workbooks.Open("Excel-Datei")

' Schließen Sie die Arbeitsmappe und Excel
wb.Close SaveChanges:=True
appExcel.Quit

' Freigeben der Ressourcen
Set wb = Nothing
Set appExcel = Nothing

If Time > TimeValue("08:06:30") And Time = TimeValue("08:07:30") Then
DoCmd.Quit acSave
End If

Export_Data_FH_Exit:
Exit Function

Export_Data_FH_Err:
MsgBox Error$
Resume Export_Data_FH_Exit

End Function


Bis hierher funktioniert alles:

Das öffnet dann Excel und triggert weitere Makros:



Sub Workbook_open()

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual


ActiveWorkbook.Worksheets("IM_FK").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("IM_FK").AutoFilter.Sort.SortFields.Add Key:=Range( _
"E1:E10"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("IM_FK").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Sheets("IM_FK").Select
Range("A2:E11").Select
Selection.Copy
Sheets("Access-Verknüpfung").Select
Range("B1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("IM_F1").Select
Range("A2:A11").Select
Selection.Copy
Sheets("Access-Verknüpfung").Select
Range("M1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("IM_F15_F1").Select
Range("A2:C16").Select
Selection.Copy
Sheets("Access-Verknüpfung").Select
Range("H1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("AWEingabe BA").Select
Range("J1:N13").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Eingabe BA").Select
Range("J1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("AWEingabe BA").Select
Range("J15:N27").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Eingabe BA").Select
Range("J15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("AWEingabe BA").Select
Range("J30:N42").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Eingabe BA").Select
Range("J30").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("AWEingabe BA").Select
Range("A1:G51").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Eingabe BA").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

If Time > TimeValue("08:05:45") And Time = TimeValue("08:09:00") Then

Call Aufbereitung_PDF

End If

End Sub


und

Sub Aufbereitung_PDF()


Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

Dim saveLocation As String
Dim sheetArray As Variant
Dim j As Long, z As Long
Dim lz1 As Long

' Drucken Bereitstellliste

saveLocation = ""
sheetArray = Array("Bereitstellliste")
dateiname = "Bereitstellzeitpunkte FH_" & Range("R3") & ".pdf"

Sheets(sheetArray).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=saveLocation & dateiname

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

' Erstellen Backup
Sheets("AWEingabe BA").Select
Range("A1:N51").Select
Selection.Copy
Sheets("Backup").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("AWEingabe BA").Select
Range("O1:AD14").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Backup").Select
Range("O1").Select
ActiveSheet.Paste
Sheets("AWEingabe BA").Select
Application.CutCopyMode = False

Sheets("AWEingabe BA").Select

' Aufbereitung Puffer


lz1 = Cells(Rows.Count, 1).End(xlUp).Row
For j = lz1 To 2 Step -1
If Cells(j, 25) = True Then
Cells(j, 24).Resize(1, 1).Delete shift:=xlUp
End If
Next j

z = Cells(Rows.Count, 24).End(xlUp).Row + 1
lz1 = Cells(Rows.Count, 19).End(xlUp).Row
For j = 2 To lz1
If Cells(j, 19) = False Then
Cells(j, 18).Resize(1, 3).Copy Cells(z, 24)
z = z + 1
End If
Next j

Range("X2:X13").Copy
Range("X2").PasteSpecial Paste:=xlPasteValues

'Formatierung Puffer

Range("Z1").Select
Selection.Copy
Range("Y2:Y13").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Range("W2").Select
Selection.Copy
Range("X2:X13").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

Range("W2").Select
Selection.Copy
Range("Y2:Y13").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

'Aufbereiten BA

Range("A12:E51").Select
Application.CutCopyMode = False
Selection.Copy
Range("A2").Select
ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
IconFileName:=False

' Löschen leere Zellen

Dim ws As Worksheet
Dim rng As Range
Dim cell As Range

Set ws = ThisWorkbook.Worksheets("AWEingabe BA")
Set rng = ws.Range("C32:C41")

For Each cell In rng
If cell.Value = "" Then
cell.ClearContents
End If
Next cell


Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic


' Speichern und Schließen

ActiveWorkbook.Close SaveChanges:=True



End Sub



Das Makro soll die Daten aus Access aufbereiten, als PDF abspeichern und die Excel-Datei für den nächsten Tag so aufbereiten, dass die Daten dann einfach nur wieder eingefügt werden müssen (eben mittels Makro). Das hat bisher eigentlich auch alles ganz gut funktioniert, bis ich die Idee hatte, dass es viel angenehmer wäre, wenn das ganze im Hintergrund funktionieren würde und ich

' Erstellen Sie ein Excel-Objekt und führen Sie es im Hintergrund aus

Dim appExcel As Object
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = False


' Öffnen Sie die Arbeitsmappe und führen Sie das Makro aus
Dim wb As Object
Set wb = appExcel.Workbooks.Open("Excel-Datei")

' Schließen Sie die Arbeitsmappe und Excel
wb.Close SaveChanges:=True
appExcel.Quit

' Freigeben der Ressourcen
Set wb = Nothing
Set appExcel = Nothing


hinzugefügt habe. Nun wird die PDF-Datei erstellt, aber der Inhalt ist leer und abschließend bekomme ich von Access eine Fehlermeldung "Get Object", die ich einfach nur Bestätigen muss und sich Access dann automatisch schließt.

Wenn ich die Excel-Datei nun manuell öffne, dann ist die Excel-Datei schon aufbereitet für das nächste mal. Daher müsste ja eigentlich alles richtig funktionieren.

Ich bin aktuell ein bisschen ratlos und würde hoffen, dass mir jemand helfen kann.

Danke und Lg Uli

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Die Reihenfolge der Ausführung stimmt nicht.
04.03.2024 11:45:42
schauan
Hallöchen,

führst Du das als Script aus? Lagere den Code von Workbook_Open in ein Modul aus. Den Code kannst Du für den "normalen" Exceluser vom Workbook_open aus aufrufen und in Deinem Script rufst Du den dann ebenfalls auf. Workbook_Open wird beim Öffnen einer Datei durch ein Script nicht ausgeführt.
AW: Die Reihenfolge der Ausführung stimmt nicht.
05.03.2024 08:26:06
Uli
Hallo,

danke für den Hinweis und deine Antwort. Werde ich auf jeden fall mal ausprobieren.

Ich öffne mittels Aufgabenplanung von Windows die Access-Datei. In Access hab ich ein Autoexec-Makro, dass dann eben das Export_Data-Makro öffnet, welches dann widerum Excel öffnet.

Kann dein Zugang da helfen? Ist ja jetzt nicht unbedingt ein Script.

Hast du Ideen bzgl. der Fehlermeldung "Objekt erforderlich"?

Lg Uli

Anzeige
AW: Die Reihenfolge der Ausführung stimmt nicht.
05.03.2024 08:51:48
Uli
Hab jetzt nochmal darüber nachgedacht. Wenn es das Workbook_open nicht ausführen würde, dann sollte es ja auch nicht das Makro ausführen, welches im Workbook_open ausgeführt werden soll, ausführen. Oder habe ich einen Denkfehler?

LG Uli
AW: Die Reihenfolge der Ausführung stimmt nicht.
05.03.2024 10:08:05
schauan
Hallöchen,

also, wenn das Makro im Workbook_Open ausgeführt wird, dann passt es. Ich kenne das Verhalten aus einem anderen Projekt, dass ich betreut habe. Die Exceldatei wurde von einem Script gestartet und diese wiederum von der Aufgabenplanung in Windows.
Ich bin gerade auf dem Sprung in den Urlaub, hab nochmal kurz über die vielen Codezeilen geschaut, aber wohl irgendwie übersehen, wo Du im Code die pdf speicherst. :-(

Ich habe die Frage auf offen gesetzt. Bin jetzt ein paar Tage nur mit dem Smartphone am schauen, da bekommt man zuweilen nicht alles mit und vor allem kann man zumindest Makros nicht testen :-(
Anzeige
AW: Die Reihenfolge der Ausführung stimmt nicht.
08.03.2024 10:55:18
Uli
Hallo,

ich denke ich konnte das Problem lösen. Einerseits habe ich deinen Tipp befolgt und andereseits mal zwischendurch ein Application.Calculation = xlCalculationAutomatic eingefügt, damit die Daten sich aktualisieren und jetzt dürfte es fürs erste mal funktionieren.

Vielen lieben Dank und schönen Urlaub

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige