Microsoft Excel

Herbers Excel/VBA-Archiv

Name der ExcelDatei, welche das Makro startet | Herbers Excel-Forum


Betrifft: Name der ExcelDatei, welche das Makro startet von: Thomas
Geschrieben am: 24.01.2010 23:53:57

Hallo!

Ich suche nen Trick oder nen Befehl für folgende Situation:

Arbeitsmappe1 greift mittels einem Makro auf eins ihrer Arbeitsblätter zu
Während das Arbeitsblatt einen fixen Namen - z.B. "xyz" - hat, kann der Arbeitsmappenname beim Speichern geändert werden.
Da ich oder ein anderer User in der gleichen Excel-Session auch eine weitere Mappe geöffnet haben kann,
funktioniert der Bezug
activeworkbook().worksheets("xyz") nicht

Auch workbooks("Arbeitsmappe1").... klappt nicht, da ich den Namen Arbeitsmappe1 nicht garantieren kann.

Deshalb suche ich eine Funktion oder einen Trick, der mir den Namen der Arbeitsmappe, die das Makro aufruft, liefert. Dann könnte ich mit workbooks() weitermachen.

Da ich das Makro auch per Timer aufrufen kann, kann ich nicht gewährleisten, daß die Arbeitsmappe beim Makrostart die aktive ist, lediglich, daß sie geöffnet ist, ist klar.

Gruß
Thomas

  

Betrifft: Da wir nicht wissen, um welche Art von Makros... von: Luc:-?
Geschrieben am: 25.01.2010 00:53:09

..es sich handelt und wie die „aus der Mappe“ aufgerufen wdn, Thomas,
— bei udFktt in Blattzellen könnte man mit Application.Caller.Parent.Name arbeiten — kann ich nur vorschlagen, die Mappen unterschiedliche kurze Rufprozeduren aufrufen zu lassen, die dann die entsprechende HptProzedur parametriert aufrufen, d.h., sie übergeben den Namen ihrer jeweils einzigen „Partnermappe&ldquo an die HptProz. Allerdings muss dann gewährleistet sein, dass dieser Name auch aktuell ist, was Korrekturläufe erforderlich machen würde.
Deshalb ist es wahrscheinl günstiger, eine Zelle auf dem jeweiligen Blatt zu reservieren, dort die xlFkt ZELLE einzusetzen und so den Dateinamen zu ermitteln. Der ist bei automatischer Berechnung immer aktuell. Allerdings bleibt so das Problem für die Prozz bestehen. Deshalb wirst du wohl mit einer festen Kennung pro Mappe und einer Liste mit dieser Kennung und dem Dateinamen (aus ZELLE) arbeiten müssen. Die Partnerprozz übergeben dann entweder nur die Kennung an die HptProz und die schlägt in der Liste nach oder die Partner erledigen das gleich mit.
Gruß Luc :-?


  

Betrifft: Lösung: ThisWorkbook.worksheets("xyz") von: Martin S.
Geschrieben am: 25.01.2010 07:35:20

Hallo Thomas,

einfach statt ActiveWorkbook ein ThisWorkbook einsetzen.

Viele Grüße

Martin


  

Betrifft: ...und, was soll das bewirken,... von: Luc:-?
Geschrieben am: 25.01.2010 10:33:49

...Martin...?!
In welchem Wb sein Makro steht und wie er das rausbekommt, wird Thomas mit xlGut ja wohl wissen! ...den Namen der Arbeitsmappe, die das Makro aufruft... hat er geschrieben! Was meinst du wohl, warum ich mir einige Gedanken mehr gemacht habe als du...?! Also, erst Gehirn einschalten, dann antworten! :->
Gruß Luc :-?


  

Betrifft: Luc, bitte am Umgangston arbeiten! So nicht! von: Martin S.
Geschrieben am: 25.01.2010 11:06:55

Hallo Luc,

Beleidigungen wie

Also, erst Gehirn einschalten, dann antworten! :->
sind hier fehl am Platz!

Ich hatte Thomas so verstanden, dass er den Namen der Arbeitsmappe wissen möchte, in der das Makro steht. Auch wenn ich ihn falsch verstanden haben sollte (er hat ja leider nicht geantwortet), ist deine Reaktion ja völlig unangebracht.

Martin


  

Betrifft: Hättest du als Erster so wie oben geantwortet,... von: Luc:-?
Geschrieben am: 25.01.2010 12:01:55

...hätte ich dir das ohne den Spruch kommentiert oder nicht beachtet, Martin...
Da aber schon ein Beitrag von mir vorhanden war, den du offensichtlich nicht gelesen bzw verstanden hast, hast du dich selbst als Ignorant geoutet...
Zwar hättest du mit dem Ton im Prinzip recht — war sarkastisch gemeint, Ähnliches kann man an manchem Arbeitsplatz auch in Emaille lesen — aber hast, indem du eine unqualifiziertere Antwort (keinen lapidaren Kommentar bzw Nachfrage!) ohne ernsthaften Grund nachgesetzt hast, als Erster gg allgemeine Forumsregeln verstoßen. Also musst du dich nicht über meine Reaktion wundern... ;-)
Gruß Luc :-?


  

Betrifft: AW: Name der ExcelDatei, welche das Makro startet von: Tino
Geschrieben am: 25.01.2010 11:16:35

Hallo,
übergebe die Mappe an eine Variable mit dieser kannst Du dann arbeiten.

Public oWB As Workbook 'in ein Modul
Sub Makro1()
    Set oWB = Workbooks.Open("C:\Mappe1.xls")
End Sub
Nun kannst Du anstatt mit ActiveWorkbook mit dieser Variablen arbeiten,
auch wenn die Datei mit speichern unter einen anderen Namen oder Pfad bekommt behält oWB den Bezug zu dieser.
Sub schließen()
    oWB.Close False
End Sub

Gruß Tino


  

Betrifft: AW: Name der ExcelDatei, welche das Makro startet von: Thomas
Geschrieben am: 25.01.2010 22:20:55

Danke Euch allen

Der Tip mit dem ThisWorkbook hat mir in der aktuellen Situation am meisten geholfen
allerdings nur mit Umweg über set


dim wbk as workbook
dim strname as string

set wbk = thisworkbook

und dann
strname = wbk.name

damit klappts
strname kann ich dann weiterverwenden


Und hey.... wegen mir ned gegenseitig die Köpfe einschlagen! Daß ich nicht geantwortet hab, liegt einfach daran, daß ich meist erst abends an meinen PC und Internet kann.

Danke Euch!
Thomas


  

Betrifft: Da kann man mal wieder sehen, dass ein... von: Luc:-?
Geschrieben am: 26.01.2010 00:42:15

...Missverständnis auch zu einer richtigen Lösung führen kann, Thomas...
Im Grunde ist das eigentlich das, was Tino vorgeschlagen hat, nur dass du das im Detail wahrscheinlich anders umgesetzt hast. Mein Vorschlag lief auf dasselbe, nur mit anderer Regie, hinaus. Wer kann denn ahnen, dass jemand, der sich mit VBAgut einschätzt ThisWorkbook nicht kennt, dass von Vielen geradezu inflationär und oft unnötig anstelle von ActiveWorkbook eingesetzt wird. Hier macht es aber Sinn, wenn eine Mappenproz einen so ermittelten Namen an eine aufgerufene HptProz als Parameter übergibt. Ich hatte einen etwas anderen Weg vorgeschlagen, weil du nicht mitgeteilt hattest wie der Aufruf erfolgt...
Gruß Luc :-?


  

Betrifft: AW: Da kann man mal wieder sehen, dass ein... von: Thomas
Geschrieben am: 26.01.2010 22:30:59

Muß ich mal versuchen...

kenn "this" aus anderen Programmiersprachen, aber bei Excel VBA hab ich n tatsächlich noch nie benutzt. War noch nie nötig

Aufruf hab ich absichtlich nicht gegeben, da ich verschiedene Baustellen hab.
Einer zB. wär ne Prozedur die per application.ontime per timer aufgerufen wird, einfach als übergegegeben PRodzedur, wobei diese Prozedur dann z.B. nen Zellinhalt per Outlook weitermailt.
Hatt ich n anderes Workbook aktiviert, liefs schief, wenn ich nicht den Workbooknamen speziell genannt hatte.
usw usw usw usw....
auf alle Fälle is mir geholfen und ich schau mir auch mal Deine Lösung an

Dank Euch
Thomas


  

Betrifft: Letzteres ist nicht unbedingt nötig,... von: Luc:-?
Geschrieben am: 27.01.2010 13:01:23

...Thomas,
das habe ich nur deshalb so vorgeschlagen, weil ich nicht wusste, was deine proz'aufrufenden Routinen so tun bzw wo sie stehen. Deshalb wollte ich was Allgemeineres vorschlagen. ThisWorkbook-Anwendung setzt ja voraus, das die aufrufende Routine auch tatsächlich zu dem Wb gehört, dessen Name die HptProz benötigt.
Übrigens liegst du schon richtig, wenn du ThisWorkbook nicht einsetzt, wenn es eigentlich ActiveWorkbook sein soll. Diejenigen die ThisWorkbook stets (ersatzweise) verwenden, wdn sich wundern, wenn sie ihre Prozeduren mal zentral sammeln wollen...
Gruß Luc :-?


Beiträge aus den Excel-Beispielen zum Thema "Name der ExcelDatei, welche das Makro startet"