6.4k Aufrufe
Gefragt in Tabellenkalkulation von andreas_3 Mitglied (109 Punkte)
Guten Tag zusammen,

ich hab mal ein wahrscheinlich ganz einfaches Problem, aber hab zu wenig Hintergrundwissen als Autodidakt.

Ich schreibe ein VBA-Makro, welches eine Userform aufruft, in die der Anwender bestimmte Daten einträgt und die das Makro dann in Ecxel weiterverarbeitet.
Hab das weitgehend von einem alten Makro eines Kollegen kopiert, und es funktioniert auch.
Es sind zwei Schaltflächen da, "OK" und "Abbrechen" aber egal was man anklickt, oder auch die Userform mit dem "x" schliesst, das Makro macht dann mit den eingebenen Daten weiter. Wie kann ich in Abhängigkeit von der angeklickten Schaltfläche dem Makro sagen, wie's weitergeht?
(evtl auch noch mit weiteren Schaltflächen unterschiedliche Aktionen auslösen?)

Vielen Dank schon mal
Gruß aus Stuttgart
Andreas

[*][sup]
*Threadedit* 06.11.2009, 12:43:50
Admininfo: Führ bitte Threads nicht fort indem du Weitere eröffnest, und vermeide Mehrfachanfragen. Die Datenbank und User werden es dir danken. Siehe FAQ 2, #3.
[/sup]

15 Antworten

0 Punkte
Beantwortet von
hi,
du must die schaltflächen in dem makro abfragen und auswerten.

gruss
0 Punkte
Beantwortet von andreas_3 Mitglied (109 Punkte)
.... DASS ich das machen muß, ist ja klar, aber ich sehe doch nicht WIE ...

wie sag ich dem Makro, welche Schaltfläche angeklickt wurde?

in der Vorlage, die ich kopiert habe, sehe ich nichts, was darauf hindeutet, bin auch nicht sicher, ob das dort überhaupt so funktioniert hat.

sorry, wie gesagt, ich hab relativ wenig Hintergrundwissen, nur das, was ich hier nach und nach lerne...

Danke nochmals
und Gruß
Andreas
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Andreas,

öffne deine Userform in der VBA-Umgebung und doppelklicke einfach mal auf die entsprechenden Buttons.

Dann müsste im Codefenster der Cursor in einer Routine mit einer Überschrift wie
Private Sub CommandButton1_Click()

stehen.

Bei deinem Okay-Button schreibst du hier den Code hinein, der die Daten ins Tabellenblatt schreibt.
Bei dem Abbrechen-Button schließt du einfach die Userform.

Schau dir mal am besten diesen Link an.

Gruß

M.O.
0 Punkte
Beantwortet von andreas_3 Mitglied (109 Punkte)
Hallo M.O.

vielen Dank für die Antwort, etwas weitergeholfen hat es mir schon, aber noch nicht so ganz....

mein Problem ist, dass die userform ja innerhalb eines großen Makros aufgerufen wird, und das Makro beim Anklicken der Userform auf unterschiedliche Weisen weiterlaufen soll (oder auch nicht)
ich brauche also irgendwie einen Wert, der je nach angeklickter Schaltfläche dem Makro sagt ob, ggf an welcher Stelle oder mit einem bestimmten Wert es weiterlaufen soll. (nur als Beispiel: wenn ich in der Userform 2 Schaltflächen mit "Tabelle1" und "Tabelle2" hätte, dann soll es das Makro beim Anklicken jeweils das Tabellenblatt 1 oder 2 auswählen und die Daten dort eintragen (anschliessend kommt noch mehr im Makro), und bei "Abbrechen" das Makro beenden, ohne die weiteren Schritte auszuführen)

Sorry, wenn ich es nicht so gut erklären kann und/oder auf dem Schlauch stehe...
LG
Andreas
0 Punkte
Beantwortet von
Hallo Andreas,
mit einer Musterdatei ist es bestimmt möglich dir zu helfen.

http://www.file-upload.net/

Gruß
fedjo
0 Punkte
Beantwortet von andreas_3 Mitglied (109 Punkte)
.. das ganze Makro ist leider ziemlich kompliziert, deshalb müsste ich das erst umschreiben und aus dem ganz großen Zusammenhang rausnehmen, um es als Demo hochladen zu können..

vielleicht hat ja sonst noch jemand nen Rat, ansonsten werde ich das nächste Woche mal in Angriff nehmen

Danke, fedjo, trotzdem für das Angebot und vielleicht bis nächste Woche.
Schönes WE einstweilen

Andreas
0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo Andreas...
beim ersten groben drüberlesen, war mein erster Gedanke:

Ich würde statt einer Schaltfläche Optionbutton's nehmen, um zu bestimmen auf welches Tabellenblatt die Daten hinsollen.

Wenn die Userform nicht geschlossen wird, kann man den Zustand der Optionbutton's von überall abfragen.
z.B.:
if userform2.option1.value=true then
Tabelle1
else if userform2.option2.value =true then
TAbelle2
else

Endif

Vielleicht wäre das sinvoller als eine Schaltfläche, weil das Optionfeld selbst als 'Merker' zu verwenden ist.

Soweit meine Anregung dazu...

Gruß
Kauz
0 Punkte
Beantwortet von andreas_3 Mitglied (109 Punkte)
Hallo Kauz,
danke für die Anregung, aber ist im Moment nicht das, was ich brauche.
Vielleicht hab ich es auch zu kompliziert dargestellt, wie gesagt es kann sein, dass ich das einfachste einfach nicht sehe.

Ich kann auch leider die komplette Datei mit dem Makro nicht hochladen, ist viel zu komplex, und eine kleine Demo-Datei zu basteln, hab ich grad nicht den Nerv.
Ich wollte nur "rasch" mal so eine Userform einbauen, weil das an der Stelle sehr praktisch erscheint.

Also nochmal kurz das ursprüngliche Problem:

Ein Makro mit vielen Schritten lässt an einer Stelle die Userform erscheinen, der Anwender gibt Werte ein, und mit Schaltfläche "OK" läuft das Makro mit diesen Werten weiter. (das funktioniert schon)
Wie erreiche ich, dass mit der Schltfläche "Abbrechen" das Makro an der Stelle abbricht und die restlichen Schritte nicht ausgeführt werden?

Danke nochmals
LG
Andreas
0 Punkte
Beantwortet von
Hallo Andreas,

falls Du an sowas noch nicht gedacht hast, glaube ich, so genannte "globale" Public-Variablen könnten Dir grundsätzlich weiterhelfen. Sie werden in einem VBA-Modul (am besten gleich am Anfang) außerhalb von Sub XXX() ... End Sub deklariert:

Public GlobaleTextVariable As String

Zitat VBA-Hilfe: Auf Variablen, die mit der Public-Anweisung deklariert wurden, kann von allen Prozeduren in allen Modulen aus allen Anwendungen zugegriffen werden. Wenn allerdings Option Private Module aktiviert wurde, sind die Variablen nur innerhalb des zugehörigen Projekts öffentlich.

D. h. alle Deine Makros, Subs und alle Userform-Elemente/ -Ereignisse können diese Variablen gemeinsam benutzen (Werte lesen und zuweisen) und so Informationen austauschen.

MfG Charlotte
0 Punkte
Beantwortet von andreas_3 Mitglied (109 Punkte)
Hallo Charlotte,
ist es schlimm, dass ich damit gar nix anfangen kann? *seufz* (ich weiß immer mehr, was ich nicht weiß...) So ist das halt, wenn man sich alles selbst beibringt und immer alles irgendwo zusammenkopiert...
Ich glaub, ich muß doch nächste Woche, wenn ich dazu komme, mal eine Musterdatei basteln, damit mir vielleicht jemand konkret helfen kann.
Danke trotzdem einstweilen
LG
Andreas
...