Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1416to1420
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
Inhaltsverzeichnis

Variable aus anderem Makro anderer Mappe verwenden

Variable aus anderem Makro anderer Mappe verwenden
24.03.2015 11:20:45
SteffenS
Hallo,
ich habe folgendes Problem:
In Mappe 1 rufe ich ein Makro in Mappe 2 auf.
In diesem Makro in Mappe 2 wird eine variable gefüllt.
Diese möchte ich dann gern in Mappe 1 für weitere Dinge verwenden.
Wie bekomme ich dies hin?
Habe in Mappe 2 die Variable schon als Public deklariert.
Alternativ würde auch eine Funktion gehen, aber hier weiß ich den Aufruf nicht.
Mein Makro in Mappe 1 sieht aktuell wie folgt aus:

Sub GetContent_Menu1(control As IRibbonControl, ByRef XMLString)
'Call Menü zusammenstellen
'Application.
Dim aString  As String
aString = Application.Run(appMenu & "!allgemein.build_dynmenu", xmlComplete)
'Menü befüllen
If aString  "" Then XMLString = aString
End Sub

Egal wie ich es mache die Variable ist imme leer.
Das ganze benötige ich um ein Ribbon-Menü aus einer anderen Mappe heraus zu befüllen, da diese Mappe als Steuerung für alles gelten soll.
Danke Euch schon mal.
VG Steffen Schmerler

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable aus anderem Makro anderer Mappe verwenden
24.03.2015 11:30:04
Daniel
Hi
als Workaround:
schreibe den Übergabewert in eine Zelle, oder einen definierten Namen.
darauf kannst du von der anderen Datei aus zugreifen, auf VBA-Variablen meines wissens nach nicht.
Gruß Daniel

AW: Du könntest ein Add-In erstellen...
24.03.2015 11:42:56
JoWE
siehe: https://msdn.microsoft.com/de-de/library/cc668205.aspx
Gruß
Jochen

Das geht schon, nur muss die Variable dem ...
24.03.2015 13:09:13
Luc:-?
…anderen VBAProjekt auch bekannt sein, Steffen!
Dazu sind folgende Schritte erforderlich:
1. Vergib eindeutige (Code-)Namen an die VBAProjekte der Mappen (statt VBAProjekt), zumindest aber an das, welches die Public-GlobalVariable enthält!
2. Vergib ebenso eindeutige (Code-)Namen an die Mappen selbst (statt DieseArbeitsmappe), zumindest aber an die, welche die Public-GlobalVariable enthält, falls die Variable im Dokument­Klassen­Modul der Mappe stationiert wird, zB Map1!
3. Setze im VBE bei der 2.Mappe einen Verweis auf das VBAProjekt der 1.Mappe! Das geht nur, wenn dieses lt 1. einen eindeutigen Namen hat, zB Test1.
4. Nun kannst du die Variable in der 2.Mappe wie folgt aufrufen:
4.1 Im Falle der Deklaration der Variablen in einem NormalModul mit Test1.pVar1 für pVar1 als Name der Variablen.
4.2 Im Falle der Deklaration der Variablen im KlassenModul der 1.Mappe Map1.gVar1 für gVar1 als Name der Variablen.
Als Test kannst du ja mal beide Varianten gleichzeitig versuchen:
KlassenModul von Mappe1:
Public gVar1$
Private Sub Workbook_Open()
gVar1 = "Hallo"
pVar1 = "Welt!"
End Sub
NormalModul von Mappe1:
Public pVar1$
In einem NormalModul von Mappe2 dann:
Sub Test2()
MsgBox Map1.gVar1 & " " & Test1.pVar1
End Sub
Gruß, Luc :-?

Anzeige
AW: Namen setzen wie
24.03.2015 13:24:18
SteffenS
Hallo,
wie würde das mit dem Namen setzen funktionieren?
Muss ich diesen beim schließen wieder löschen?
Wie würde der Zugriff darauf funktionieren?
Sorry für die vielen Fragen. Mit Namen habe ich bisher noch nicht gearbeitet.
Danke Euch nochmal
VG
Steffen

AW: Namen setzen wie
24.03.2015 13:43:55
Daniel
Hi
du kannst beispielsweise den Strintext in das Kommentarfeld eines Namens schreiben:
hier das Schreiben des Textes in der Mappe2.xlsm
 ThisWorkbook.Names.Add Name:="xxx", RefersTo:="x"
ThisWorkbook.Names("xxx").Comment = "Hallo Welt"
zum auslesen aus der Mappe1 dann:
Msgbox Workbooks("Mappe2.xlsm").Names("xxx").Comment

Gruß Daniel

Anzeige
Warum wählst du dann nicht meine Variante, ...
24.03.2015 14:00:19
Luc:-?
…Steffen?
Aber warum auch einfach, wenn's doch auch umständlich geht… :->
Luc :-?

AW: Alternativ mit den CustomDocumentproperties
24.03.2015 14:04:11
Daniel
Hi
etwas sauberer ist vielleicht die Methode mit CustomDocumentproperties (Benutzerdefinierte Dokumenteigenschaften).
lege zuerst in der einen Mappe, in der du den Überabewert erstllst, so eine Benutzerdefinerte Dokumenteigenschaft an.
hierzu aktivierst du die Mappe und gibst im Direktfenster des VBA-Edtiors folgenden Befehl ein:
activeworkbook.CustomDocumentProperties.Add Name:="Übergabewert", LinkToContent:=False, Type:=msoPropertyTypeString, Value:="xxx"
um jetztn in der Mappe2 die Werte zu befüllen verwendest du den Code:

ThisWorkbook.CustomDocumentProperties("Übergabewert").Value = "Hallo Welt"
um aus der anderen Datei heraus diesen Wert auszulesen verwendst du:
 Msgbox Workbooks("Mappe2.xlsm").CustomDocumentProperties("Übergabewert").Value
Gruß Daniel

Anzeige
Toll! Du steigerst dich... ;-] orT
24.03.2015 14:35:20
Luc:-?
Wohl nur, um nicht zugeben zu müssen, dass „(d)eines wissens“ hier lückenhaft ist… :->
Luc :-?

AW: Toll! Du steigerst dich... ;-] orT
24.03.2015 14:56:48
SteffenS
Hallo,
danke für die Lösungen jetzt funktioniert es.
Habe doch die Variante mit der Zeile genommen, da diese sich etwas besser Debuggen lässt.
VG
Steffen

Ich hatte dir sogar ein Bsp eingestellt, ...
24.03.2015 15:59:33
Luc:-?
…Steffen,
aber du scheinst überhaupt nichts begriffen zu haben. Was du jetzt machst, ist unnötig und kleinkariert. Und du willst VBA-gut sein…?! :-[
Luc :-?

AW: Ich hatte dir sogar ein Bsp eingestellt, ...
24.03.2015 16:18:54
Daniel
Hi Luc
bist du immer gleich enttäuscht und beleidigt, wenn sich jemand nicht für deine Lösung entscheidet?
ausserdem kann ich aus Steffens antwort nicht herauslesen, für was er sich letztendlich entschieden hat. "Zeile" kommt in keiner meiner Lösungsvorschläge vor.
Was jetzt mit dem leicheren Debuggen gemeint ist, weiß ich auch nicht.
zumindest würden bei deiner Lösung die Variablen in der Eingabehilfe angezeigt und ggf auch die Werte beim Debuggen im Controltip, was dann dafür sprechen würde, dass er sich für deine Lösung entschieden hat.
Gruß Daniel

Anzeige
Danke, Danke Euch
24.03.2015 22:27:09
SteffenS
Hallo,
vielen Dank nochmal für Eure Hilfe.
Ich wollte mir meiner Antwort niemanden verärgern und werde die Alternative auf jeden Fall nochmal prüfen :-)
VG Steffen

Bei mir kommt 'Zeile' est recht nicht vor und ...
26.03.2015 00:19:43
Luc:-?
…bei dir aber wenigstens Zelle, …schreibe den Übergabewert in eine Zelle, oder einen definierten Namen, könnte also ein Tipp-/DenkFehler sein, Daniel;
mir ging's auch eher darum, einem vorgeblich VBA-Guten und einem selbst­erklärten „Laien“ zu zeigen, wie man das macht… :->
Eine deiner Methoden (es gibt noch mehr ähnliche!) ist sinnvoll, wenn VariablenWerte von einer Xl-Sitzung zur nächsten gemerkt wdn sollen, was hier aber nicht der Fall zu sein schien. Es ging mir also um Vermittlung von VBA-Wissen auf einem Gebiet, bei dem deine ursprünglich geäußerte Ansicht durchaus mehrheitsfähig, aber trotzdem falsch ist, was doch wohl ein komplettes Ignorieren durch den FrageSteller nicht verdient hat…
Luc :-?
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige