Office: Code in (Klassen-) Modul auslagern

Helfe beim Thema Code in (Klassen-) Modul auslagern in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Ahhhh, ok. So langsam wird ein Bild draus. Wirklich gut erklärt! Ganz, ganz dickes Lob! Beste Grüße Kentucky Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Kentucky, 10. Juni 2014.

  1. Code in (Klassen-) Modul auslagern


    Ahhhh, ok.
    So langsam wird ein Bild draus.

    Wirklich gut erklärt! Ganz, ganz dickes Lob!


    Beste Grüße


    Kentucky
     
    Kentucky, 13. Juni 2014
    #16
  2. Hallo,

    ich hab das Thema nochmal geöffnet weil ich bei der Umsetzung des hier Erklärten Probleme habe.

    Die Situation:
    UserForm1 hat 4 Checkboxen. Wenn ich eine anklicke soll ein Wert an UserForm2 übergeben und als Label angezeigt werden. Bei Checkbox1 ist der Wert "eins", bei CB2 ist der Wert "zwei", usw.

    Problem: Public Variable
    Ich dachte eigentlich, dass sich das mit einer Public Variablen machen lässt. Also steht in UserForm1:
    Code:
    Und in UserForm2 hab ich dann folgendes stehen:
    Code:
    Es funktioniert aber nicht. Die Variable ist leer. Das liegt doch bestimmt daran, dass beim deklarieren die Variable neu gesetzt wird, oder?


    Problem: Auslagern in Modul
    Also ich orientiere mich da an RJs Code (den mit addieren, subtrakt, usw).
    Eigentlich würde ich das so machen wie bei "Sub Subtrakt", weil ich ja von UF1 nur etwas "weggeben" und nichts "bekommen" will. ABER dann schaff ich es auch nicht einen Wert in der UF2 zu erhalten. Was ja auch logisch ist da die Prozedur nichts ausgibt.
    Wenn ich es mit einer Funktion versuche (ähnlich der "dim2"-Funktion), dann kommt als Fehlermeldung "Variable oder Prozedur anstelle eines Moduls erwartet".
    Ich hab natürlich auch versucht RJs Vorlagen anzupassen, aber es will halt nicht *frown.gif*


    Würde mich sehr über Hilfe freuen!


    Besten Dank im Voraus,


    Kentucky
     
    Kentucky, 22. Juni 2014
    #17
  3. Hi,

    lege in ein MODUL

    Public Nummer as String

    und entferne aus den Userformen diese Zeile

    übrigens was willst du am Label1 machen?
    ich vermute mal beschriften

    Label1.caption = Nummer

    wobei Nummer als Stringvariable nicht gerade ein guter Name ist.
     
    chris-kaiser, 23. Juni 2014
    #18
  4. Code in (Klassen-) Modul auslagern

    Hi Chris,

    danke für die Antwort.

    Ich habe jetzt in einem Modul "Public Nummer as String" stehen (und noch ein paar so Rechteck_BeiKlick() Sachen, aber das dürfte ja nicht stören)
    In UF1 steht nur noch "Nummer = "eins"" und in UF2 nur noch "Label1.caption = Nummer"

    Trotzdem funktioniert es nicht. Weißt du warum?
    Als Fehlermeldung kommt "Variable oder Prozdur anstelle eines Moduls erwartet"


    Vielen Dank und beste Grüße

    Kentucky


    Hab gerade deinen Nachtrag gesehen. Werde den Variablennamen in strNummer ändern, dann weiß man gleich was es ist.
     
    Kentucky, 23. Juni 2014
    #19
  5. Hi,

    keine Ahnung ich sehe deine Datei ja nicht...
    aber wenn da wirklich diese "" vorhanden sind passt da etwas ganz und gar nicht...
     
    chris-kaiser, 23. Juni 2014
    #20
  6. ...wenn Du die Publicvariable nutzt, dann musst Du im Activate Ereignis der 2. Form (bei Dir ist das wohl Form4) dem Label seinen Wert zuweisen.
    Bsp. für 2. (aufzurufende) Form
    Code:
    Wenn Du ohne Publicvaribale arbeiten willst, geht das auch. Dann brauchst Du in der 2. Form auch keinen Code:
    Bsp. für Form1 (die, die die andere aufruft:
    Code:
    ...hab Dir mal beide Varianten für den Aufruf mitgegeben. eine davon immer auskommentieren...*Smilie
     
  7. \@ Chris

    Ja das ist etwas unübersichtlich. Ich klaub das nochmal auseinander:

    Ich habe jetzt in einem Modul Code:
    stehen (und noch ein paar so Rechteck_BeiKlick() Sachen, aber das dürfte ja nicht stören)
    In UF1 steht nur noch Code:
    und in UF2 nur noch Code:
    Könntest du deine Demo-Datei als xls speichern und hochladen? Haben hier im Geschäft nämlich nur Excel 2003 (never change a running system... wenns doch nur der wahre Grund wär*bawling )

    Vielen Dank für deine Hilfe.


    Beste Grüße

    Kentucky
     
    Kentucky, 23. Juni 2014
    #22
  8. Code in (Klassen-) Modul auslagern

    oh oh! Das steht in einem allgemeinen Modul? Da dürfte Excel wahrscheinlich Hustenanfälle bekommen. Wüßte jedenfalls nicht, dass man hier mit Delegates arbeiten kann.
    Die Objektereignisse in VBA da lassen, wo sie generiert werden. Es sei denn, Du hast tatsächlich ein Klassenmodul erstellt und die stehen da drin...*Smilie
     
  9. Hi,

    hier als xls
     
    chris-kaiser, 23. Juni 2014
    #24
  10. Hi Ralf,

    wieder mal vielen Dank für deine Hilfe/Erklärung!!! Wenn so weitergeht kann es passieren, dass ich bald weiß was ich tu *grins

    Also diese Rechteck_BeiKlick Dinger sind im "Standart"-Modul. Also da wo Excel die automatisch reingestellt hat.
    Sollte ich in dieses Modul dann lieber nichts anderes reinschreiben?

    Warum Form4? Oder war das auf die Demo.xlsm bezogen?


    Ich hab mich für die erste Variante entschieden, weil ich den Befehl gern in der UF stehen haben möchte wo auch das Label ist.
    Wo ist der Unterschied zwischen initialize und activate?


    Bei deiner zweiten Variante:
    Code:
    das versteh ich. Ist im Prinzip eine Fernsteuerung der 2. Form.

    Aber was ich nicht verstehe ist die andere Variante, die mit Public Variable:
    Code:
    woher weiß das Label in der Form2 jetzt das es "wert" (bzw. eins oder zwei) heißen soll?
    Das ist doch der Weg des Stringinhaltes: "eins" --> zeigeform2 --> wert --> strNummer. Aber wie kommt das jetzt in s Label1???

    Nochmals vielen Dank.


    Beste Grüße

    Kentucky


    @ Chris
    Hab grad deine Datei gesehn. Der Unterschied zu meinem war nur das activate Ereignis in der UF2.
    Passt prima zu dem von RJ (was ja so sein muss da das ja das selbe ist *Smilie)
    Also auch dir nochmal herzlichen Dank!
     
    Kentucky, 23. Juni 2014
    #25
  11. wenn Excel sie da reingestellt hat, dann lass sie da... ich dachte, Du hättest sie 'outgesourced'...*Smilie

    hatte mir die demo nicht angesehen und Form4 war ein Irrtum von mir. ist aber auch egal... ist der Name der Form. Solange der stimmt, ist alles in Ordnung.

    Initialize wird ausgeführt, wenn die Form das 1. Mal aufgerufen wird und alle darin enthaltenen Objekte initialisiert, also mit Werten befüllt werden.. Im obigen Bsp. wird ja das Label mit einem Text gefüllt, also initialisiert. Initialize schaut also nach, was muss wie dargestellt werden. Das geschieht, bevor alle anderen Ereignisse ausgeführt werden. Activate wird immer dann ausgeführt, wenn die Form aktiviert wird. Wie bei den Tabellenblättern auch. Du hast (standardmäßig) 3, aber aktiv kann immer nur eins sein... Das bedeutet, initialize wird immer nur einmal ausgeführt (Exceldatei wird geöffnet... es sei denn, Du erstellst mehrere Instanzen des Objektes, aber selbst dann wird es pro Objekt nur einmal ausgeführt),
    Activate kann mehrmals ausgeführt werden. Immer, wenn ein Tabellenblatt, egal wie oft angeklickt wird.

    ...aus dem Activate Ereignis. Da steht doch, schau mal nach, welchen Wert strNummer hat und diesen Wert weist du dem Label als Caption zu...

    Der Weg ist:
    1. Click_Ereignis der Checkbox:
    darin steht: rufe die Prozedur mit dem Namen zeigeform2 auf und übergib als Parameterwert den String mit dem Wert "Eins"... oder welchen auch immer.
    Daraufhin geht das Programm zur Prozedur zeigeform2 (mit dem übergebenen Parameterwert vom Typ string.
    Wie der Parameter heißt, ist vorerst nebensächlich (hier heißt er wert). Hauptsache, Du benutzt diesen Namen konsequent in der Prozedur weiter.
    2. Die Prozedur weist dann der Publicvariablen (strNummer) den übergebenen Wert von wert zu und ruft Form2 auf.
    3. Form2 liest im Activate Ereignis(deshalb ja nicht initialize, damit die Änderung bei jeder Aktivierung erfolgt und nicht nur beim 1. Mal) :
    ...aha, ich soll dem Label was zuweisen. Der erforderliche Wert steht in einer öffentlichen Variable namens strNummer.
    Die Anweisung in Activate lautet ja: Label1.Caption = strNummer

    Und daher weiß es dann das Label...*wink.gif*
     
  12. Ach so... *stupid

    Also diesen Code
    Code:
    muss ich schon einfügen.
    Weil du geschrieben hast
    dachte ich das ich das für die Variante nicht brauche und deswegen hats mich gewundert woher das Label bescheid weiß.

    Bei mir steht jetzt in der UF1:
    Code:
    im Modul steht:
    Code:
    und in UF2 steht:
    Code:
    Und es funktioniert einwandfrei.


    Wieder ein Stückchen mehr Wissen geschaffen.
    Vielen herzlichen Dank.


    Beste Grüße

    Kentucky
     
    Kentucky, 23. Juni 2014
    #27
  13. Code in (Klassen-) Modul auslagern

    ...den brauchst Du dann nicht, wenn Du die Form2 so aufrufst:
    Code:
    ich hatte etwas missverständlich den Kommentar 'Aufruf bei vorhandener Publicvariable hinter die letzte Zeile gesetzt. Entscheidend für den Aufruf OHNE Variable ist die Zeile darüber...
     
  14. Ah ok. Ich hab da deine 2 Varianten ein bisschen vermixt, aber jetzt versteh ich schon wie du es meinst.

    Das "vbModal" heißt doch soviel wie "mache einen Rechendurchgang und dann schließe dich wieder", oder?


    Besten Dank für deine Hilfe.


    Gruß

    Kentucky
     
    Kentucky, 23. Juni 2014
    #29
  15. ...vbModal bedeutet, lass erst dann wieder andere Operationen zu, wenn das Formular geschlossen wurde. Quasi der Messagebox-Effekt. Im modalen Formular selbst kannst Du so viele Operationen durchführen, wie Du willst. Das Gegenteil davon ist vbModeless... damit kannst Du zwischen den Formen oder anderen Anwendungen wechseln...

    ...aber... das geht jetzt über die ursprüngliche Ausgangsfrage hinaus. Wenn die für Dich geklärt ist, dann sollten wir den Thread hier beenden...
     
Thema:

Code in (Klassen-) Modul auslagern

Die Seite wird geladen...
  1. Code in (Klassen-) Modul auslagern - Similar Threads - Code Klassen Modul

  2. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  3. Code wird nicht komplett ausgeführt

    in Microsoft Excel Hilfe
    Code wird nicht komplett ausgeführt: Guten Morgen in die Runde! Situation: Dieser Code wird nicht komplett ausgeführt. es wird der Teil mit der Du Until Schleife übersprungen. Wenn ich aber mit Einzelschritte durch den Code gehe...
  4. Rabat Codes in einen Serienbrief einfügen

    in Microsoft Word Hilfe
    Rabat Codes in einen Serienbrief einfügen: Hi, Ich möchte bei einem Brief für meine Kunden eine Rabatcode einfügen. Diese sind zufällig erstellt und in Excel als Tabelle gespeichert. Wie bekomme ich diese nun so eingefügt das auf jedem...
  5. Combobox einbinden

    in Microsoft Excel Hilfe
    Combobox einbinden: Hallo, ich bastele an einer Funktion, bei der ich an einer Stelle im Programm eine Combobox aufrufen möchte, die dann mit bestimmten Werten aus einer Tabelle gefüllt ist und dann den gewählten...
  6. VBA Code für Zeilen ausblenden einblenden mit JA/Nein

    in Microsoft Excel Hilfe
    VBA Code für Zeilen ausblenden einblenden mit JA/Nein: Hallo, habe eine Exceltabelle, bei der ich bei einer Zelle eine Ja/Nein abfrage mache, wenn in der Zelle Nein steht, dann soll ein bestimmter Zeilenbereich, den ich definieren möchte, ausgeblendet...
  7. VBA Code ohne ergebnis

    in Microsoft Excel Hilfe
    VBA Code ohne ergebnis: Hallo, ich habe einen VBA Code der in meiner Tabelle nicht funktioniert. Kann mir vielleicht jemand bei der Korrektur ggf. weiter helfen? Danke und Gruß Private Sub Worksheet_Change(ByVal Target...
  8. Bild löschen auch wenn es nicht vorhanden ist?! Code funktioniert nicht mehr..

    in Microsoft Excel Hilfe
    Bild löschen auch wenn es nicht vorhanden ist?! Code funktioniert nicht mehr..: Hallo Leute, Habe ein Macro in Benutzung das jetzt über Monate gut funktioniert hat und jetzt kam anscheint ein update und es funktioniert nicht mehr, wobei ich es mir nicht erklären kann, weil...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden