Globales Makro in Mappe mit wechselndem Dateinamen ausführen

chris123030

Cadet 2nd Year
Registriert
Nov. 2015
Beiträge
26
Hallo zusammen,

ich habe ein Makro in der Personal.xlsb gespeichert, da ja bekanntlich beim Speichern von Mappen, die aus *.xlt erstellt werden der Code nicht mehr mit gespeichert wird (*.xls). Der Code bleibt also durch die Personal.xlsb global verfügbar.

Mit dem Makro soll der Zellinhalt von einer Mappe (Quelle.xls) in eine andere Mappe (Ziel.xls) kopiert werden.

Der Code sieht wie folgt aus:



Sub DatenÜbertragen()

Dim erste_freie_Zeile As Integer
Dim Blatt As Worksheet

Workbooks.Open "D:\Eigene Dateien\Ziel.xls"

Set Blatt = Workbooks("Ziel.xls").Worksheets("Tabelle1") 'Platzhalter zum Abkürzen

erste_freie_Zeile = Workbooks("Ziel.xls").Worksheets("Tabelle1").Range("A65536").End(xlUp).Offset(1, 0).Row


Worksheets("Quelle").Cells(15, 3).Copy
Blatt.Cells(erste_freie_Zeile, 1).PasteSpecial xlPasteValues

Das Makro wird mit einem CommandButton in der Quell-Mappe gestartet.

Leider kann ich in der Quell-Mappe nicht vollständig referenzieren (z.B. Workbooks("Name").Worksheets("Quelle").Cells(15, 3).Copy) und den Workbook-Namen angeben, da sich dieser ständig ändert.

So kann das Makro natürlich nicht laufen, da es in der Personal.xlsb gespeichert ist und im Code kein Name für das Quell-Workbook angegeben werden kann.

Wie kann ich das Problem lösen?
Man könnte eine UserForm mit einer ListBox basteln, die alle offenen Workbooks anzeigt und da wählt man dann die Quell-Mappe aus, aber dieses zusätzliche Klicken möchte ich eigentlich nicht, es soll von alleine ablaufen können.
Ich hoffe es ist verständlich was ich meine.

Vielen Dank! :-)
 
ändere den sub zu:

Sub DatenÜbertragen(ByRef Workbook Quelle)
...
End Sub

Wenn du jetzt das Macro in der Quelldatei aufrufst übergibst du einfach ActiveWorkbook.
 
[...]da ja bekanntlich beim Speichern von Mappen, die aus *.xlt erstellt werden der Code nicht mehr mit gespeichert wird (*.xls) [...]
Das ist mir ehrlich gesagt nicht bekannt. Wenn ich hier unter Office 2003 eine Vorlage mit Makros abspeichere und lade, dann haben die daraus generierten .xls die Makros auch noch.
Welche Officeversion verwendest du? .xls statt .xlsx/.xlsm deutet ja auf 2003 hin.
 
Ich nutze Office 2007, aber aus Gründen der Kompatibilität zu anderen Programmen muss ich als .xls speichern, daher der Verlust vom Code.
 
Ach so. Ärgerlich. Hast du die Variante von aroxx schon getestet? Ich weiß grade nicht, ob es möglich ist, über einen Commandbutton Argumente mitzugeben.

Edit: Bzw. wird es mit einem ActiveXCommandButton sicher gehen, nur würde dann da evtl. wieder der Code nicht gespeichert.
 
Zuletzt bearbeitet:
Könntest du mir bei dem ByRef noch helfen? Wie müsste das konkret im Code aussehen?
Wie gesagt das Quell-Workbook hat immer unterschiedliche Namen, da es durch eine Vorlage erzeugt wird.
 
Teste mal folgendes:
Code:
Sub button()
Call test1(ActiveWorkbook)
End Sub

Sub test1(ByRef quelle As Workbook)
MsgBox (quelle.Name)
End Sub

der Button sollte dann die Sub button aufrufen.
 
Ich bin zwar etwas müde, aber…

Es sollte doch immer noch ThisWorkbook [das, wo das Makro drin ist] und ActiveWorkbook geben [wo die Musik dann spielt] - oder liege ich da falsch?

Und warum in einer XLSM (als nicht der PERSONAL!) angelegte Makros nicht bis zur XLS beim Speichen überleben wundert mich auch; dass das bei einer XLSX die die PERSONAL bemüht nicht klappt ist logisch.

Wenn das stimmt sollte sich das alles einfacher schaukeln lassen.

CN8
 
Zurück
Oben