MS-Office-Forum

MS-Office-Forum (https://www.ms-office-forum.net/forum/index.php)
-   Microsoft Excel (https://www.ms-office-forum.net/forum/forumdisplay.php?f=29)
-   -   Sind Module für Makroposition steuerbar? (https://www.ms-office-forum.net/forum/showthread.php?t=352396)

Jorge33 14.06.2018 00:40

Sind Module für Makroposition steuerbar?
 
Hallo, ich habe eine Datei namens "a.xlsm" in der ich über vba workbooks.open die Datei "b.xlsm" öffne. Die Datei "b.xlsm" wiederrum hat eine Schaltfläche die ein Makro startet. Ist es nun möglich es zu steuern, ob die Module von der Datei "a.xlsm" oder der Datei b.xlsm" nach diesem Makro durchsucht werden?

Gruß Jorge

Hajo_Zi 14.06.2018 05:39

Hallo Jorge;

Was Bitte möchtest Du machen?
Dir ist es klar da Du Deine Datei siehst.


GrußformelHomepage

Jorge33 14.06.2018 07:51

Hallo Hajo,

ich habe ein Excel Grundprogramm in dem ich viele Schaltflächen habe. Jede Schaltfläche öffnet mir eine weitere Exceldatei (ich nenne sie jetzt mal Dienstprogramme) die ich bearbeiten, speichern und wieder schließen will. Das Grundprogramm steuert sozusagen übersichtlich viele Dienstprogramme.
Jetzt ist es so, das jedes Dienstprogramm das ich mit dem Grundprogramm öffne, eigene Module mit Makros enthält die ich ausführen möchte. Und machmal geht das und manchmal geht das nicht und ich wußte anfangs nicht wieso.
Ich habe dann etwas herum experimentiert und festgestellt, das manchmal das Dienstprogramm das ich öffne in seinen eigenen Modulen nach den Makros sucht und ausführt, aber manchmal sucht das Dienstprogramm in den Modulen des Grundprogramms nach den Makros. Und da die Makros nicht im Grundprogramm drin stehen (und ich das eigentlich auch nicht will) kommt es zu Fehlermeldungen, weil das Makro nicht gefunden wird. Daher meine Frage, ob es einen Befehl gibt mit dem ich sagen kann, das jedes Dienstprogramm das ich öffne in seinen eigenen Modulen nach Makros sucht und nicht im Grundprogramm?
So, ich hoffe ich habe es eingermaßen verständlich erklärt. Danke schon mal fürs lesen.

Gruß Jorge

EarlFred 14.06.2018 09:04

Hallo,

probier mal:

Code:

Sub inMappe1()
Call Application.Run("Mappe2.xlsm!Modul1.Test")
''''Call Application.Run("Mappe2.xlsm!Test")
End Sub

Den Code mit kompletter Referenzierung würde ich bevorzugen. Wenn Du den Modulnamen nicht kennst, kannst Du ihn, wie in der 2. Codezeile gezeigt, weglassen. Denn ist die Referenz allerdings nicht mehr eindeutig, d. h. bei mehrfach vorkommenden Prozedurnamen kannst Du nicht mehr sicherstellen, dass die richtige anläuft.

Ein anderes Konzept wäre das Einbinden des VBA-Projekts in die Mappe1 über den Menüpunkt Extras/Verweise im VB-Editor. Ich habe das Projekt der Mappe2 im Beispiel in "Mappe2Project" umbenannt:
Code:

Sub inMappe1()
Call Mappe2Project.Modul1.test
End Sub

In diesem Fall muss die Mappe2 aber dauerhaft offen bleiben und wird beim Start von Mappe1 auch automatisch mit geladen. Aber vielleicht ist das ja genauso gewollt.

Grüße
EarlFred

Jorge33 14.06.2018 14:59

Hallo Fred,

Erstmal danke für deine Antwort. Ich habe das jetzt einfach mal nachprogrammiert, also Mappe1 und Mappe2 erstellt, den

Code:

Call Application.Run("Mappe2.xlsm!Modul1.Test")
in Mappe1 eingefügt und in Mappe2 ein Makro namens "Test" erstellt.

Das läuft alles soweit, ist aber leider nicht genau das, was ich brauche.
Ich habe ja in Mappe2 mehrere Makros und weiß beim Öffnen von Mappe2 noch gar nicht, welches Makro ich starten will. Daher kann ich auch nicht in Mappe1 sagen: Öffne Mappe2 und starte das Makro Test...
es müßte eher so sein das ich in Mappe1 sage: Öffne Mappe2, wechsle Ansicht zu Mappe2 und suche beim nächsten Aufruf eines Makros nur noch in den Modul(en) der Mappe2...falls das überhaupt geht...


Gruß Jorge

EarlFred 14.06.2018 16:50

Hallo Kevin,

mal am Rande: Wenn meine Name Fred wäre oder ich so genannt werden wollte, warum unterzeichne ich dann nicht so?

Zitat:

das, was ich brauche.
...solltest Du im Eröffnungsbeitrag klar und deutlich formulieren.

Zitat:

[...]in der ich über vba workbooks.open die Datei "b.xlsm" öffne.
Der Name des Workbooks ist Dir also bekannt.

Wie Du aus der Codezeile sehen kannst, wird die Prozedur über einen String definiert, den man auch frei zusammensetzen kann:
Call Application.Run("Mappe2.xlsm!Modul1.Test")
-> Call Application.Run(DeineVariableMitDemMappennamenUndEndung & "!Modul1.Test")

Grüße
EarlFred

Jorge33 14.06.2018 20:20

Hallo EarlFred,

ich setzte mich heute abend nochmal hin und versuche es hinzubekommen.
Danke für die Unterstützung.

Gruß Jorge


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.