Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
368to372
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
368to372
368to372
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro in "anderem" Workbook

Makro in "anderem" Workbook
26.01.2004 17:59:19
Holger
Hallo,
Also ich erstelle per Makro ein neues Workbook ("NeuesBook.xls"). In dieses neue Workbook exportieren ich die Prozedur (Makro) "ShowMore()" mit
Application.VBE.ActiveVBProject.VBComponents.Item("Export").Export (ThisWorkbook.Path & Application.PathSeparator & "Export.bas")
bzw.:
Application.VBE.ActiveVBProject.VBComponents.Import (ThisWorkbook.Path & Application.PathSeparator & "Export.bas")
Das klappt wunderbar. Zumindest steht dieses Makro jetzt in dem neu erstellten Workbook unter dem Modul "Export" zur Verfuegung.
Jetzt erstelle ich per Makro in dem neuen Workbook ("NeuesBook.xls") ein Sheet in das ich ein Button erstelle (per code), der dieses exportierte Makro ("ShowMore") ueber die .OnAction Eigenschaft ausfuehren soll.
Das sieht dann so aus:
Set objBut = ActiveSheet.Buttons.Add(BLeft, BTop, BWidth, BHeight)
With objBut
.OnAction = WbkName & "!ShowMore()"
(...)
End With

Das klappt nicht. Jedesmal, wenn ich auf den Button klicke wird das Makro aus dem alten Workbook ausgefuehrt - Bemerke ich dadurch, dass wenn ich nach dem Export das zu exportierende Makro in dem Ursprungs-Workbook umbenenne, ich eine Fehlermeldung bekomme die ungefaehr so lautet:
"Makro ShowMore() in UrWorkbook.xls nicht gefunden"
(eigentlich muesste ja auf das ShowMore Makro im neuen Wkbook zu gegriffen werden)
So... Wie bekomme ich das jetzt hin, dass hinter den Button das exportierte Makro gelegt wird.

Is nen bisserl kompliziert, ich hoffe aber jemand hat nen Tip
Danke schonmal
Holger

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro in "anderem" Workbook
26.01.2004 20:11:43
Nepumuk
Hallo Holger,
speicherst du die Mappe einmal bevor du den Button erstellst? Sonst steht nämlich in WbkName der Name der Mappe ohne .xls - Endung. Wenn du die Mappe anschließend speicherst, kommt die Endung dazu und der Button wird, da der Name nicht mehr stimmt, auf seine Ursprungsmappe verwiesen.
Gruß
Nepumuk
AW: Makro in "anderem" Workbook
26.01.2004 22:16:19
Holger
Hab dich nicht ganz verstanden, aber so sieht mein Code an der Stelle aus, an der ich das neue Wkbook erstelle und die Buttons generiere...

FileName = Application.GetSaveAsFilename("FareseekAnalysis_Output." & FormatSessionDate(GetSession) & ".xls", "Excel Files (*.xls), *.xls")

If FileName <> "False" Then

Call ExportWkb ' hier versuche ich den Code von
' Workbook_Open() zu exportieren.
' Klappt auch nur kann ich ihn nicht
' mehr importieren
Application.VBE.ActiveVBProject.VBComponents.Item("Export").Export_
(ThisWorkbook.Path & Application.PathSeparator & "Export.bas")

' hier kommt das neue wkbook
Workbooks.Add
With ActiveWindow
.WindowState = xlMaximized
End With

' hier wird es zuerst abgespeichert
ActiveWorkbook.SaveAs FileName
' hier werden die Buttons in das neue Wkbook gebaut
' wie das passiert steht in meinem ersten Posting
Call CreateTable(GetSession, ActiveWorkbook.Name)

' nicht benoetigte Sheets -> loeschen
Call KillSheet("Sheet*")
Call KillSheet("Tabelle*")

' hier der Import die Datei Export.cls funktioniert,
' der andere nicht
Application.VBE.ActiveVBProject.VBComponents.Import (ThisWorkbook.Path & Application.PathSeparator & "Export.bas")
' das Importieren von cls dateien klappt nicht, weder manuell noch per vb
Application.VBE.ActiveVBProject.VBComponents.Import (ThisWorkbook.Path & Application.PathSeparator & "Fareseek.cls")

' abschliessendes speichern
ActiveWorkbook.Save
' altes Wkbook aktivieren
Workbooks(WorkbookName).Activate
(...)

Der Inhalt der Importdatei, die ums verrecken nicht will sieht so aus:

----------------------------------
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
# hier hatte ich auch ThisWorkbook versucht klappt auch nicht
# klappt noch nicht mal wenn ich es manuell exportiere und dann importiere
Attribute VB_Name = "Fareseek"
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True


Private Sub Workbook_BeforePrint(Cancel As Boolean)
Application.DisplayAlerts = False
Call CloseFlightInfo
With ActiveSheet.PageSetup
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperLetter
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
Application.DisplayAlerts = True
End Sub


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call CloseFlightInfo
End Sub

------------------------------
So muesste es doch eigentlich mit dem Button-Makro funktionieren. Er ruft mir aber immer das Makro aus der alten Mappe auf. *hrrrrrr*
Und der Export klappt auch nicht *verdammt*
:o)
Danke fuer deine Hilfe
Holger
Anzeige
AW: Makro in "anderem" Workbook
27.01.2004 16:22:24
Nepumuk
Hallo Holgern,
1. Du darfst das Makro der Buttons erst erstellen, wenn das Makro "CloseFlightInfo" importiert ist, sonst sucht sich Excel das passende Makro in der Ursprungsmappe.
2. Was ist das für ein Klassenmodul, welches du importieren willst?
Wenn es dir möglich ist, dann lade die Mappe mal auf den Server.
Gruß
Nepumuk
AW: Makro in "anderem" Workbook
27.01.2004 17:45:38
Holger
Zu 1:
hier der neue Codeschnipsel... ich importiere vorher, dann abspeichern, dann erstellen
' ich eportiere hier ueber den Umweg, das Makro selbst in eine Datei zu schreiben
' war ein versuch - hat aber nicht geklappt.
' Hintergrund:
' Da jetzt das Makro ShowMore und CloseFlightInfo nirgendwo als echtes Makro hinterlegt
' sind, sondern in einer Tabelle stehen und ueber ExportSheet in die Datei Export.bas
' geschrieben, kann es also keinen Link auf die alte Mappe geben.
Call ExportSheet("Export.bas", "Export")

Workbooks.Add

With ActiveWindow
.WindowState = xlMaximized
End With
' hier der Import
Application.VBE.ActiveVBProject.VBComponents.Import (ThisWorkbook.Path & Application.PathSeparator & "Export.bas")
'hier abspeichern
ActiveWorkbook.SaveAs FileName
' hier wird der Button erstellt dem ueber .OnAction das Makro ShowMore
' zugewiesen wird.
Call CreateTable(GetSession, ActiveWorkbook.Name, FareseekDB, DataDB)
Wenn ich alles laufen lasse wird das Modul exportiert, das ShowMore-Makro hinter die Buttons gelegt, aber leider immernoch auf die alte Mappe verwiesen. Bemerkbar daran, dass die Fehlermeldung "The Macro AlteMapppe.xls!ShowMor cannot be found!" hochkommt.
Zu 2:
Ich benoetige:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Das kann doch nicht so schwer sein, verdammte Hacke :o)
Die Mappe ist hier ( https://www.herber.de/bbs/user/3247.xls )
Der Teil um den es geht liegt hinter der Userform "Bar" in
Private Sub UserForm_Activate()
Danke fuer deine Unterstuetzung
Holger
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige