Wie kann ich eine Mappe per VBA aktivieren?

VBA Excel:
Hi Leute,

ich hab ein kleines Problem, dass sich eigentlich nicht in einem Satz erklären lässt.

Also ich rufe über ein von mir erstelltes Add-In zunächst eine Beispiel.xls als Vorlage auf --> Name der Vorlage in Excel = Beispiel1.xls!)und rufe dann ein Userform auf. Dieses ist nonmodal, weil ich während es geöffnet ist (es werden darin Daten eingetragen) auf eine andere Mappe zugreifen und in ihr herumscrollen muss!
Wenn ich nun nicht die Beispiel1.xls aktiviere, also reinklicke, wird die Userform versuchen die Daten in die aktive (falsche) Mappe zu schreiben, was sie natürlich nicht soll.

Es gibt ja Möglichkeiten den Namen einer Mappe auszulesen und in einer Zelle anzuzeigen, aber eben erst wenn sie gespeichert wurde. Ich möchte aber erst am Ende speichern und nicht am Anfang.

Also wie sage ich VBA, welche Mappe (also hier die ursprungsmappe Beispiel1.xls) es aktivieren soll,
wenn die Falsche aktiv ist?

Bitte helft mir, ich hab das ganze Internet durchsucht, aber nix gefunden, was genau das Problem löst!
Vielen Dank für Eure Mühe im Voraus.
Ich hoffe es ist verständlich geschrieben, wenn nicht, fragt!

Viele Grüße
Patrick

Hallo, Patrick.

Beispiel.xls als Vorlage auf --> Name der Vorlage in Excel =
Beispiel1.xls!)

Normalerweise haben Vorlagen nicht die Endung .xls
Handelt es sich wirklich um eine Vorlage?

Ich vermute einfach 'mal, dass Du Deine Datei nicht richtig ansprichst. Verwendest Du möglicherweise „ActiveWorkbook“?. Vielleicht hilft es ja schon, wenn Du „Workbooks(„Beispiel1“)“ benutzt, was natürlich zu Problemen führt, wenn Du eine zweite Vorlage mit dem Namen „Beispiel2“ geöffnet hast. Trotzdem einfach mal ausprobieren. Ansonsten wäre es recht hilfreich, wenn Du den Code posten könntest, oder zumindestens die relevanten Teile davon.

VG
Carsten

Moin Carsten,

Die Vorlage ist eine .xlt, aber die Verhält sich mit dem Namen ähnlich!
Ich habe einen Button „Neu…“ gebastelt, der die mit dem Befehl: Workbook.Open (C:…Beispiel.xls(.xlt jenachdem wie ich sie benenne) öffnet. Die wird dann als Beispiel1.xls geöffnet.
Mit ActiveWorkbook arbeite ich nicht.
Ich kann jetzt natürlich in irgendeine Zelle den Namen angeben, zb Beispiel1.xlt, den holen lassen und ein Workbook mit Variabler öffnen lassen. Dass wird aber, wie du schon sagtest, dann problematisch, wenn sie nicht mehr Beispiel1.xls heisst (Beispiel2.xls oder gant anders) Also muss ich es schaffen, den Namen des Kindes rauzukriegen.
Oder ich spreche sie tatsächlich falsch an. Hast du/habt ihr eine Idee?
Danke schonmal
Viele Grüße
Patrick

PS:Codeschnipsel folgen!

So öffnen des Workbooks:

Workbooks.Open Filename:=„D:…\Beispiel.xlt“

Jetzt kann ich natürlich Beispiel1.xlt in A1 schreiben und dann mit
z = Application.Worksheets(„Tabelle1“).Cells(1, 1)
Workbooks(z).Activate
die Zelle auslesen und damit das Workbook aktivieren. Das hab ich in jedes Sub geschrieben, das vom Userform ausgeführt wird und so hat das bisher auch gut funktioniert. Aber das ist mir halt zu statisch und funktioniert eben nur, wenn die Mappe auch genau so heisst!

Eine andere Idee wäre, nur die Indizes (1,2,3,4…) die hinter den Namen gestellt werden, als Globale Variable abzuspeichern und immer um 1 zu erhöhen, wenn eine neue Mappe geöffnet wird. Dann kann man den Namen vorgeben und in Verbindung mit der Variablen immer die letzte Mappe öffnen! Das setzt aber widerum voraus, dass die Mappen nacheinander geöffnet werden, also nicht Beispiel1.xls und Beispiel2.xls gleichzeitig geöffnet sind, sonder 2 erst geöffnet wird, nachdem 1 unter anderem Namen abgespeichert oder geschlossen wurde.

Puh, ich hoffe, ihr blickt noch durch.

Im grunde muss ich es eigentlich nur schaffen, die Userform an die Mappe zu binden, die aktiv war, als das UF geöffent wurde. Muss aber trotzdem in anderen Mappen scrollen können!

Hallo,

also für mich hört sich das alles nach konzeptloser Frickelei an. Daraus noch was vernünftiges zu basteln ist, aus eigener Erfahrung, nicht einfach. :wink:

die Zelle auslesen und damit das Workbook aktivieren. Das hab
ich in jedes Sub geschrieben, das vom Userform ausgeführt wird
und so hat das bisher auch gut funktioniert. Aber das ist mir
halt zu statisch und funktioniert eben nur, wenn die Mappe
auch genau so heisst!

Im grunde muss ich es eigentlich nur schaffen, die Userform an
die Mappe zu binden, die aktiv war, als das UF geöffent wurde.
Muss aber trotzdem in anderen Mappen scrollen können!

Speicher die neue Mappe doch sofort nach dem Öffnen automatisiert ab, dann haste den Dateinamen und solche Umwege a la „schreibe den Wert in eine Zelle und lese diesen später aus“ kannste Dir dann auch sparen.

Ansonsten würde ich mal überlegen, ob es nicht Sinn macht die Vorlage einfach als Worksheet in dem Workbook, in dem du noch hin und her scrollen musst, einzubauen. Der Name des Workssheets bleibt immer gleich und es ist kein Thema, dieses Worksheet dann per Klick im UserForm als Workbook unter anderem Namen wegzuspeichern.

MfG
Stephan

Hi!

Sorry, aber es handelt sich dabei nicht um „konzeptlose Frickelei“ sondern um eine Idee, die stetig gewachsen ist. Wie leider beim Programmieren meistens der Fall ist, zumindest wenn man es nicht jeden Tag macht, entsteht aus einem einfachen 4-Seitigem Bericht schonmal ein umfassendes Tool. Der Gedanke dahinter, den ganzen Makro-Kram aus der Vorlage zu extrahieren und das Ganze als Add-In zu Gestalten hat mich erst in die Schwierigkeiten gebracht. Ist aber leider notwendig, da demnächst Excel 07 auf dem Programm steht und sich dann die Makros nicht mehr per Makro löschen lassen, was bei 2000 noch sehr gut funktionierte.
Die Daten aus dem anderen Workbook in dieses zu Transferieren bzw dieses dort hineinzuladen ist vielleicht eine Möglichkeit, mit der ich mich mal Beschäftigen werde und ich mach mir mal Gedanken, inwiefern das zum jetztigen Zeitpunkt überhaupt noch notwendig ist. Man könnte die Daten inzwischen ohne den Umweg in der 2. Tabelle gleich hier rein schreiben und somit das Userform wieder „Modal“ machen. Das würde einige Probleme lösen.
Ich dachte halt, es gäbe eine Möglichkeit, aber wenn nicht, dann muss es halt anders gehen!

Danke für Eure Hilfe!

Viele Grüße
Patrick

Hallo Patrick.

Es gibt ja Möglichkeiten den Namen einer Mappe auszulesen und
in einer Zelle anzuzeigen, aber eben erst wenn sie gespeichert

Bleiben wir erst einmal beim Auslesen des Dateinamens.
Mit der Anweisung „DieseArbeitsmappe.Name“ erhälst Du den Namen der Datei, auch vor Speicherung.
Wenn Du beim Öffnen (bzw. Aktivieren) Deiner Datei („Workbook_Open“ oder sogar besser „Workbook_Activate“) den Namen in eine öffentliche Variable im UserForm speicherst, kannst Du doch eigentlich zum entsprechenden Zeitpunkt darauf zugreifen. Vielleicht hilft das ja weiter.

VG
Carsten

Hallo Patrick,

Sorry, aber es handelt sich dabei nicht um „konzeptlose
Frickelei“ sondern um eine Idee, die stetig gewachsen ist.

das war nicht böse gemeint. Ich kenn das aus eigener Erfahrung. Irgendwann kann man nur noch „frickeln“, weil vom ursprünglichen Konzept eigentlich nichts erhalten geblieben ist. Wenn es die Zeit zulässt fange ich dann lieber mit einem neuen und passenden Konzept an.

Der Gedanke dahinter, den ganzen Makro-Kram aus der Vorlage zu
extrahieren und das Ganze als Add-In zu Gestalten hat mich
erst in die Schwierigkeiten gebracht. Ist aber leider
notwendig, da demnächst Excel 07 auf dem Programm steht und
sich dann die Makros nicht mehr per Makro löschen lassen, was
bei 2000 noch sehr gut funktionierte.

Ich bin noch nie auf die Idee gekommen, ein Makro per Makro aus einer von mir erstellten Datei zu löschen. Wozu auch? Wenn man die einzelnen Sheets aus der Masterdatei in eine neue Mappe kopiert und diese speichert, werden die VBA-Module nicht mitkopiert.

Ich kann Deinen Wissensstand in Sachen Excel-VBA nicht einschätzen. Falls Dich der oben genannte Ansatz (nix besonderes) interessiert, du aber keine Ahnung hast wie man das macht, dann melde Dich einfach nochmal.

MfG
Stephan

Hi Stephan

sorry, das so viel Zeit verging, aber ich bin nicht dazu gekommen

Also wenn ich die Sheets aus der Mappe in eine Neue kopiere, wird der VBA-Code mitkopiert! Zwar nicht die Module und das Userform, aber der Code, der über die Buttons in den zu kopierenden Mappen aufgerufen wird, schon! Sowohl in 2000 als auch in 07.
Meine Programmierkenntnisse beruhen grössten Teils aus dem was hier im Internet steht :wink:.

Wahrscheinlich habe ich die Probleme, weil ich mir noch nicht ganz darüber im Klaren bin, wozu es zb Module und Klassenmodule gibt. erd mich mal schlau machen.
Dein Vorschlag mit Kopieren und in neue einfügen Interessiert mich also schon.

Andereseits komme ich mit einem Addin darum rum, dass der User immer Makros aktivieren muss, zumal das gerade bei 07 ein bisschen „blöd“ gemacht und nicht unbedingt direkt zu sehen ist. Ich bin, wenn sie mal fertig wird, nicht der einzige, der sie nutzt :wink:
Mir schwebt eine Art Installer vor, der ausgeführt die Vorlagen und das Addin in einen bestimmten Ordner kopiert und ab dann verfügbar ist. Wie ein Programm eben.

Schönes Wochenende und vielen Dank für euer Interesse
Patrick