Excel Makro funktioniert nicht mehr wenn er automatisch gestartet wird?
Hallo,
Ich habe einen Excel Makro erstellt der in einer ansonsten leeren Excel Datei Sitzt. Wenn man diese Datei öffnet und den Makro startet passiert folgendes:
- Datei 1 (Tolle Daten.xlsx) wird geöffnet
- Datei 2 (Template.xlsx) wird geöffnet
- Daten aus Datei 1 werden in Datei 2 kopiert und teilweise formatiert
- Datei 1 wird geschlossen und gelöscht
- Datei 2 wird als UTF-8 .csv Datei in einem anderen Ordner gespeichert
- Datei 2 wird geschlossen ohne zu speichern
Dieser Makro funktioniert einwandfrei.
Wenn ich allerdings den Makro automatisch starten lasse, wenn ich die Excel Datei öffne rennt er in einen Fehler.
Jetzt Fragt ihr euch wahrscheinlich: "Wo ist die Fehlermeldung?"
Die würde ich euch ja schicken aber wirklich bei jedem Versuch bleibt der Code an einer anderen Stelle hängen.
Fehler:
- unbekannte Variable
- ActiveSheet.Copy -> unbekannt
- Datei 2 konnte nicht gespeichert werden
- objektvariable oder with-blockvariable nicht festgelegt
usw...
Wenn jemand eine Idee hat warum der Makro aufhört zu funktionieren wenn man ihn automatisch starten lässt wäre ich sehr Froh von euch zu hören :-)
2 Antworten
Je nach dem wie es implementiert ist kommt es darauf an "welche" Datei im Vordergrund ist:
Das "ActiveSheet.Copy" ist welche Datei ?
Wenn man mit Dateien jongliert dann besser immer das komplette Objekt verwenden.
Workbook("").Worksheets("").Range().Copy...
ODER
Mit Workbook("").Activate rechtzeitig dafür sorgen dass das richtige im Vordergrund ist.
mmhh.
Poste mal deinen Code.
Beschreibe auch welche Datei im Vordergrund ist wenn das Makro startet.
Solche multi - Dateizugriffe mit zig Dateien ist mein täglich Brot und es funktioniert bestens, wenn man die "Reihenfolge" und die Objekte unter Kontrolle hält.
Hallo, Danke für die Antwort. Ich probier es heute abend gleich mal aus und gebe eine Rückmeldung.
Anbei der Quelltext (einzelne Werte musste ich aus Datenschutzgründen anpassen, funktionieren sollte es trotzdem noch.
Option Explicit
Dim i As Integer
Dim a As Integer
Dim c As Integer
Dim mail As String
Dim techniker As String
Dim art As String
Dim MyDate As Date
Dim filename As String
Sub CopyTest()
'Fehlermeldungen Deaktivieren
Application.ScreenUpdating = True
Application.DisplayAlerts = False
'Start
OpenWorkbooks
'Anzahl der der Loop Zeilen
a = 100
c = 0
'Loop start
For i = 1 To a 'run the loop until field is empty
'--------------------------------------------------------------------------------------------
If Workbooks("Export.xlsx").Sheets("Tickets").Range("J" & 1 + i) <> " " Then
If Workbooks("Export.xlsx").Sheets("Tickets").Range("E" & 1 + i) <> "??" Then
If Workbooks("Export.xlsx").Sheets("Tickets").Range("X" & 1 + i) = " Störung" Then
c = c + 1
CopyData
End If
End If
End If
'--------------------------------------------------------------------------------------------
'Loop end
Next i
' Export schließen
Workbooks("Export.xlsx").Close SaveChanges:=False
'Datei als csv exportieren
FileExport
'Template schließen
Workbooks("Template.xlsx").Close SaveChanges:=False
'Fehlermeldungen aktivieren
Application.DisplayAlerts = True
Application.ScreenUpdating = False
End Sub
Function OpenWorkbooks()
'Öffnet das Template
Workbooks.Open "Template.xlsx"
'Öffnet den MKS-Export
Workbooks.Open "Export.xlsx"
End Function
Function CopyData()
'Feste Werte
Workbooks("Template.xlsx").Sheets("Template").Range("W" & 1 + c) = "Ort" 'Region
Workbooks("Template.xlsx").Sheets("Template").Range("R" & 1 + c) = land
Workbooks("Template.xlsx").Sheets("Template").Range("Q" & 1 + c) = "land 2" 'Country
Workbooks("Template.xlsx").Sheets("Template").Range("J" & 1 + c) = 1 'SR_Source
Workbooks("Template.xlsx").Sheets("Template").Range("E" & 1 + c) = 10 'Sprache
Workbooks("Template.xlsx").Sheets("Template").Range("C" & 1 + c) = 3 'Gender
Workbooks("Template.xlsx").Sheets("Template").Range("AN" & 1 + c) = "" 'Team
Workbooks("Template.xlsx").Sheets("Template").Range("AS" & 1 + c) = "Mail1" 'Escalation Mail 1
Workbooks("Template.xlsx").Sheets("Template").Range("AT" & 1 + c) = "Mail2" 'Escalation Mail 2
Workbooks("Template.xlsx").Sheets("Template").Range("AU" & 1 + c) = "Mail3" 'Escalation Mail 3
'Dynamische Werte
Workbooks("Template.xlsx").Sheets("Template").Range("A" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("G" & 1 + i)
Workbooks("Template.xlsx").Sheets("Template").Range("B" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("F" & 1 + i)
Workbooks("Template.xlsx").Sheets("Template").Range("D" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("J" & 1 + i)
Workbooks("Template.xlsx").Sheets("Template").Range("F" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("I" & 1 + i)
Workbooks("Template.xlsx").Sheets("Template").Range("H" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("C" & 1 + i)
Workbooks("Template.xlsx").Sheets("Template").Range("O" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("E" & 1 + i) '
Workbooks("Template.xlsx").Sheets("Template").Range("G" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("A" & 1 + i) '
Workbooks("Template.xlsx").Sheets("Template").Range("AO" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("AH" & 1 + i)
Workbooks("Template.xlsx").Sheets("Template").Range("AP" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("U" & 1 + i)
Workbooks("Template.xlsx").Sheets("Template").Range("AM" & 1 + c) = Workbooks("Export.xlsx").Sheets("Tickets").Range("Z" & 1 + i)
End Function
Function FileExport()
'Variablen Für Dateipfad
Dim myCSVFileName As String
Dim tempWB As Workbook
'Datum Formatieren
MyDate = Date
'Dateinamen erstellen
FileFormat
'Dateispeicherort festlegen
myCSVFileName = "Pfad" & filename
'Tabellenblatt auswählen
ActiveSheet.Copy
Set tempWB = ActiveWorkbook
'Speichervorgang
With tempWB
tempWB.SaveAs filename:=myCSVFileName, FileFormat:=xlCSVUTF8
tempWB.Close
End With
'Workbooks("Template.xlsx").Close SaveChanges:=False
End Function
Function FileFormat()
'Variablen für Dateinamen
Dim part1 As String
Dim part2 As String
Dim part3 As String
'Wertzuweisung
part1 = "_"
part3 = "_"
MyDate = Date
part2 = Format(Date, "yyyymmdd")
filename = part1 & part2 & part3 & ".csv"
End Function
Hallo Nochmal, mich hat es Gesundheitlich entschärft daher die verspätete Rückmeldung. Das <ActiveSheets> soll in diesem Fall Datei 1 sein. Es könnte fast sein das der Makro an der stelle ein bisschen zu schnell ist.
Ich habe auch die beiden Versionen von dir probiert und beide haben leider keinen Erfolg erzielen können