Makro wird nicht gespeichert

emmi

Mitglied
Hallo Excel-Leute
Habe folgendes Problem:
Mittels task-manger, batch-datei und makro startet excel eine text-datei, formatiert diese und speichert das ganze als *.xls. Nun möchte ich in dieser datei, ebenso automatisch, ein anderes makro mit einbinden, das dann in der neuen datei manuell gestartet werden kann. Ich habe das im startfile integriert, muss jedoch feststellen, dass makros gar nicht mitgespeichert werden. Weiss jemand rat? Für einen gescheiten typ jetzt schon vielen dank!
 

NiCa

Stammgast
Hallo Excel-Leute
Habe folgendes Problem:
Mittels task-manger, batch-datei und makro startet excel eine text-datei, formatiert diese und speichert das ganze als *.xls. Nun möchte ich in dieser datei, ebenso automatisch, ein anderes makro mit einbinden, das dann in der neuen datei manuell gestartet werden kann. Ich habe das im startfile integriert, muss jedoch feststellen, dass makros gar nicht mitgespeichert werden. Weiss jemand rat? Für einen gescheiten typ jetzt schon vielen dank!


Salü Emmi

Wie genau hast Du denn dieses Makro im Startfile integriert? Ich vermute mal, das geöffnete txt-file wird dann in eine neue xls-Mappe gespeichert. Das Makro kommt hier nicht einfach mit. Funktionieren würde es wohl, wenn die aktuelle Mappe unter einem anderen Namen gespeichert würde. Dann ist aber allerdings das txt-öffnen-makro ebenfalls noch enthalten.

Gruss NiCa
 

Thomas Ramel

Stammgast
Grüezi Emmi

DU könntet die vom Taskmanager gestartete Datei als reine Steuerdatei verwenden um den Vorgang anlaufen zu lassen.
Das bisherige Vorgehen und die Steuerung könntest Du dann beigehalten.

Öffne aber aus der Startdatei heraus eine weitere Mappe, in der Du den Code bereits mit drin hast. Importiere dann in diese neue Mappe rein die Daten und speichere sie dann.

So hast Du den Code in Der Mappe die Du speicherst mit drin und kannst die Steuerdatei wieder schliessen.
 
Zuletzt bearbeitet:

emmi

Mitglied
Hallo Thomas
Danke für deinen Typ, das habe schon versucht, aber das importieren mittels Makro klappt nicht. Hast du ein Vorschlag oder Beispiel?
Danke, Emmi
 

emmi

Mitglied
Hallo NiCa

Auch dir danke für den Typ. Es würde nicht stören, wenn das Start-Makro mitgespeichert würde, aber wie schon gesagt, es werden keine Makros mitgespeichert, egal unter welchem Namen ich speichere. Habe hier das Makro, vielleicht gibts dazu eine Korrektur oder Ergänzung. Bin froh um jeden Hinweis.

Danke und Gruss
Emmi


Sub Workbook_Open()
Workbooks.OpenText Filename:="i:\Insyde\TX\neuauftrag.txt", Origin:=xlMSDOS _
, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1))
Cells.Select
Cells.EntireColumn.AutoFit
Range("A2").Select
ActiveWindow.FreezePanes = True
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("J:J,K:K,L:L").Select
Range("L1").Activate
Selection.NumberFormat = "#,##0.00"
Columns("M:M").Select
Selection.NumberFormat = "#,##0.00"
Range("K19").Select
ActiveWindow.ScrollColumn = 1
ActiveWindow.Zoom = 90
Columns("F:F").ColumnWidth = 23.89
Columns("I:I").ColumnWidth = 28.44
Columns("L:L").ColumnWidth = 7.11
Columns("N:N").ColumnWidth = 7
Rows("1:1").Select
Selection.AutoFilter
Selection.RowHeight = 18
'Alle Werte in Zahlenwerte umwandeln
Dim zelle2 As Object
Range("B2:B100").Select
For Each zelle2 In Selection
SendKeys "{F2}", True
SendKeys "{ENTER}", True
Next zelle2
Range("A2").Select
ActiveWorkbook.SaveAs Filename:= _
"i:\neue-auftrag.xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close savechanges:=False
' ActiveWorkbook.SaveAs Filename:= _
' "i:\Neue-Aufträge.xls", _
' FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
' ReadOnlyRecommended:=False, CreateBackup:=False
' Application.DisplayAlerts = False
Application.Quit
' Application.DisplayAlerts = False
End Sub

Hier das Makro, dass eigentlich gespeichert werden sollte:

Sub Zwischensumme()
'
' Zwischensumme Makro
'
' Tastenkombination: Strg+s
'
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(13), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Sub
Sub loeschen()
'
' loeschen Makro
'
' Tastenkombination: Strg+l
'
Selection.RemoveSubtotal
End Sub
 

Thomas Ramel

Stammgast
Grüezi emmi

Nun wo der Code klar ist, ist auch die Ursache deines Problems klar.

.OpenText eröffnet immer eine neue Mappe, das kannst Du nicht umgehen.

Du musst also am Ende das Tabellenblatt in die Mappe mit dem Code kopieren, das kannst Du ebenfalls mit dem Makro-Recorder aufzeichnen und noch in deinen Code einbauen, dann klappt das Ganze.

Der Recorder hat, das sieht man gut an deinen Zeilen, die .Select und .Activate-Krankheit. All diese Anweisungen könnte man noch entfernen und durch andere ersetzen, was aber nicht unbedingt Not tut, wenn der Code deine Erfordernisse erfüllt.
 

NiCa

Stammgast
Sali Emmi

Der Vorschlag von Thomas müsste eigentlich klappen. Meld dich doch wieder, wenn's geklappt hat :D

Liebe Grüsse
 

emmi

Mitglied
Hoi Thomas

Danke für die Info, dein Hinweis mit Activate scheint aber genau
das Problem zu sein, denn genau da bleibt's hängen! Siehe Makro.
Grüsse und Dank
Emmi


Sub Workbook_Open()
ChDir "I:\INSYDE\TX"
Workbooks.OpenText Filename:="I:\INSYDE\TX\neuauftrag.txt", Origin:=xlMSDOS _
, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
' , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
' Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
' Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
' 16, 1), Array(17, 1))
' Cells.Select
' Cells.EntireColumn.AutoFit
' Range("A2").Select
Cells.Select
Application.CutCopyMode = False
Selection.Copy
ChDir "I:\Auftragseingang"
Workbooks.Open Filename:="I:\Auftragseingang\auftrag.xls"

Windows("auftrag.xls").Activate !!!!! genau da hängt's !!!!
ActiveSheet.Paste

' Rows("1:1").Select
' Selection.AutoFilter
' Cells.Select
' Cells.EntireColumn.AutoFit
' Range("A2").Select
End Sub
 

Thomas Ramel

Stammgast
Grüezi emmi

Sorry, aber ohne Daten macht dein Makro für mich wenig Sinn.

Kannst Du eine Datei mit Demo-Daten zur Verfügung stellen damit wir auch 1:1 testen können?


...schön wäre auch wenn Du uns sagen würdest wo genau der Debugger stehen bleibt - ohne die Daten kann das bei uns wieder ganz woanders sein, auch wenn wir das Makro kopieren und rennen lassen.....
 

Thomas Ramel

Stammgast
Grüezi Emmi

Ich habe mir deinen Code nun nochmals näher angesehen.
Mit Ebntfernen der .Acitvate und .Select meinte ich nicht die ganze zeile auskommentieren, sondern diese Methoden nicht zu verwenden und direkt mit den Objekten zu arbeiten.

Ich habe nun auch entdeckt wo Du die Zeile die den Fehler auslöst markiert hast.

Wenn ich den Code richtig verstehe, dann hast Du versucht das anzuwenden was ich gesagt hatte: die Mappe als Steuerdatei verwenden und daraus dann die Textdatei und die andere Mappe aufzurufen.

Ich habe versucht den Code noch etwas zu strukturieren und das Tabellenblatt mit den Daten aus der Textdatei in die neu aufgerufene zu kopieren. Mangels konkreten Daten ist das Testen nicht wirklch machbar, versuche also ob Du damit was anfangen kannst:

Code:
Sub Workbook_Open()
Dim wBSource        As Workbook
Dim wbGoal          As Workbook

   'Textdatei einlesen
   Set WBCource = Workbooks.OpenText(Filename:="I:\INSYDE\TX\neuauftrag.txt", _
                                     Origin:=xlMSDOS, _
                                     StartRow:=1, _
                                     DataType:=xlDelimited, _
                                     TextQualifier:=xlDoubleQuote, _
                                     ConsecutiveDelimiter:=False, _
                                     Tab:=False, _
                                     Semicolon:=True, _
                                     Comma:=False, _
                                     Space:=False, _
                                     Other:=False, _
                                     FieldInfo:=Array(Array(1, 1), Array(2, 1), _
                                                      Array(3, 1), Array(4, 1), _
                                                      Array(5, 1), Array(6, 1), _
                                                      Array(7, 1), Array(8, 1), _
                                                      Array(9, 1), Array(10, 1), _
                                                      Array(11, 1), Array(12, 1), _
                                                      Array(13, 1), Array(14, 1), _
                                                      Array(15, 1), Array(16, 1), _
                                                      Array(17, 1)))

   'Zieldatei öffnen
   Set wbGoal = Workbooks.Open(Filename:="I:\Auftragseingang\auftrag.xls")

   'Tabellenblatt in die neue Mappe kopieren

   wBSource.Sheets(1).Copy After:=wbGoal.Sheets(1)

   'Filter setzen / Breite anpassen
   Rows("1:1").AutoFilter
   Cells.EntireColumn.AutoFit
   Range("A2").Select

   'Dein weiterer Code

End Sub
 

emmi

Mitglied
Hoi Thomas

danke für deinen Vorschlag. Leider scheint in deinem Code noch ein Fehler zu stecken. Bei "Textdatei einlesen" gehts nicht weiter. Meine Kenntnisse genügen da nicht mehr.
Ich würde dir gerne meine Dateien senden. Kannst du mir deine Mailadresse angeben? Meine lautet: hemmi@leuze.ch

Vielen Dank für deine Hilfe
Gruss, Emmi
 
Oben