Office: Variablendeklaration / Werte aus Zellen in Variablen speichern...

Helfe beim Thema Variablendeklaration / Werte aus Zellen in Variablen speichern... in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; hallo zusammen, ich bin wieder einmal in der Situation, Excel 97 verwenden zu müssen. Nach ein paar Monaten, in denen mir hier der ein oder andere... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Marty257, 12. Mai 2007.

  1. Variablendeklaration / Werte aus Zellen in Variablen speichern...


    hallo zusammen,

    ich bin wieder einmal in der Situation, Excel 97 verwenden zu müssen.

    Nach ein paar Monaten, in denen mir hier der ein oder andere auch sehr weit geholfen hatte, habe ich mir mal die einzelnen Dateien angeschaut und mir überlegt, ob ich nicht etwas verbessern/optimieren könne.

    hier viel mir dann auf, dass bei einer Datei bestimmte Werte aus der Exceltabelle in jeder Prozedur von einer Variable zugewiesen werden muss.
    Beispiel: varUsername = Environ("Username")

    Auch wenn ich jetzt irgendwelche Variablen ändern muss, ist es eher ein Suchen bis ich etwas gefunden habe...

    da kam mir der Gedanke, am Anfang des Moduls (hier in meinem Falle das Tabellenblatt, wo der Code reinkommt) erst einmal die ganzen Variablen zu erstellen damit ich mich in den Prozeduren dann auf das wesentliche konzentrieren kann und falls Änderungen anliegen, ich die dann direkt am Anfang der Datei vornehmen kann und nicht erst durch die hunderte von Code blättern muss.

    Ich hatte mir mal eine Einführung in VBA zugelegt, als pdf-Datei und mich versucht ein wenig schlau zu machen. Da hieß es dann auch, dass man Variablen außerhalb von Prozeduren erstellen und dann entsprechend verwenden kann. Der Unterschied zwischen solchen Variablen und denen, die innerhalb einer Prozedur erstellt werden ist dann halt einfach nur der, dass die ersteren so lange gültig sind, bis die Datei geschlossen wird, die anderen, zweiten gelten nur so lange wie die Prozedur läuft und werden danach wieder "entleert".

    Wenn ich jetzt jedoch am Anfang z. b. varUsername = Environ("Username") eingeb, dann meckert der VBA-Editor aber auf einmal, dass dies außerhalb einer Prozedur nicht gültig/zulässig ist.

    Wie kann ich es denn hinbekommen, dass ich z. B. Informationen (UserID, E-Mail-Adresse, Büro, Name usw) von z. B. zwei Sachbearbeitern aus der Excel-Tabelle auslese und für die weitere Verwendung in entsprechenden Variablen speichere, jedoch wie gesagt, am Anfang von allem und die einzelnen Prozeduren können dann jeweils auf die einzelnen Variablen zugreifen?

    Oder spricht man hier bereits von Konstanten? (bleiben ja im Verlauf immer gleich...)

    Dankeschön für eure Hilfe *Smilie

    :)
     
    Marty257, 12. Mai 2007
    #1
  2. Hi Marty,

    Du verwechselst hier die Bekanntgabe einer Variablen und der Wertzuweisung.

    Mit [Dim][Public][Static] Variablemname As Datentyp

    dimensionierst Du die Variable. D.h., Du weist das Programm an, entsprechenden Speicherplatz für diese Variable zu reservieren. Das kannst Du sowohl ausserhalb als auch innerhalb von Prozeduren.

    Die Zuweisung jedoch: Variablenname = "xyz", das geht nur innerhalb von Prozeduren/Funktionen.

    Einzige Ausnahme: Bei Konstanten ist es andersherum. Die müssen ausserhalb von Prozeduren dimensioniert werden UND die Wertzuweisung erhalten.
     
  3. hm. okay... Wieder was gelernt...

    also, wenn ich jetzt also aus dem Tabellenblatt folgende Daten auslese:
    • Sachbearbeiter-Name
    • Sachbearbeiter-Emailadresse
    • Sachbearbeiter-Büro
    • Sachbearbeiter-UserID
    diese wiederum verändern sich nicht über die ganze Zeit nicht, dann kann man die doch quasi als Constanten ansehen, oder?
    Also dann folglich, ich hoffe ich denke jetzt richtig, anlegen (oder heißt das hier auch dimensionieren?):
    Wenn ich jetzt aber z. B. aus dem SBName die Umlaute in Selbstlaute umwandeln möchte, das wiederum muss in einer Prozedur passieren, stimmts?

    Wenn ich dann folgendes anwende:
    Code:
    Wie kann ich das dann einmalig ausführen lassen und das Ergebnis kann dann von den folgenden Prozeduren einfach übernommen werden?
    Also so, dass dann z. B. in Prozedur »Sende_Email« nicht mehr mit SBName weiter gearbeitet wird sondern mit SBName_SL (SL = Selbstlaut)...

    Davon finde ich jetzt auf Anhieb leider nichts in der pdf-Dokumentation... :-/
     
    Marty257, 14. Mai 2007
    #3
  4. Variablendeklaration / Werte aus Zellen in Variablen speichern...

    ...lach....

    ...nee! Das geht nicht. Du kannst Zellwerte nicht als Konstanten-Wertzuweisung benutzen, da Zellwerte ja (logischerweise) veränderbar sind. Konstanten müssen einen FESTEN Wert zugewiesen bekommen und können und dürfen nicht veränderbar sein!
    Deshalb kannst Du (logischerweise) auch NICHT einen als konstant festgesetzen Wert nachträglich ändern (Bsp. Umlaute in Selbstlaute). Wenn Du das vorhast, dann bleibt Dir keine andere Wahl, als Variablen zu benutzen.
     
  5. Also das heißt, ich muss alles so lassen wie es ist, und es in Kauf nehmen, dass ich in 4 Prozeduren viermal die gleiche Variable deklariere? *frown.gif*
     
    Marty257, 14. Mai 2007
    #5
  6. ...das kann ich, ohne genaue Kenntnis nicht so genau sagen. Kommt immer auf den spez. Fall an. Eine Zählervariable 'x' z. Bsp. würde ich für jede Prozedur neu dimensionieren. Den Usernamen allerdings nur einmal als globale Variable und die Zuweisung dann vornehmen, wenn das Workbook geöffnet oder die Form aktiviert wird. Je nachdem...
    Die Auswertung dieser Variablen kann dagegen durchaus in mehreren Prozeduren/Funktionen nötig sein. Da mußt Du halt mal schauen.
     
  7. Also ich habe, im Grunde genommen eigentlich schon etwas einfaches, ein Tabellenblatt, in dem verschiedene CommandButtons zum Einsatz kommen.

    Ich stell am besten mal meine Idee vor:
    Sinn & Zweck des ganzen ist, dass man von einer Tabelle einer Webseite Daten in ein Tabellenblatt reinkopiert
    • dieses das formatiert, Zellen löscht, neue Spalten anlegt etc. (1. Commandbutton)
    • die Datei speichert und ggf. den Ordner falls noch nicht vorhanden erstellt wird (CommandButton 2)
    • Diese nun erstellte Datei wird dann als Verknüpfung an Personen verschickt, die in zwei bestimmten Zellen angegeben werden (CommandButton 3)
    • nun besteht die Möglichkeit, per Buttonclick, falls die Datei an zwei Mitarbeiter ging, den anderen zu benachrichtigen, wenn man die Datei mit deren Inhalt zur Bearbeitung übernimmt. (CommandButton 4)
    • Da bei der Bearbeitung verschiedene Schritte durchlaufen werden, muss man einen Zwischenbericht schicken.(CommandButton 5)
    • Wenn die Bearbeitung fertig ist, wird dann wieder eine Benachrichtigung mit einer Verknüpfung zur Datei an den Sachbearbeiter zurückgeschickt, der die Datei erstellt hat. (CommandButton 6)

    Was auf jeden Fall immer gleich bleibt, sind die Daten für:
    • Daten zum Sachbearbeiter
      • Name
      • E-Mail-Adresse
      • Büro-Nr.
      • UserID
    • Speicherinformationen
      • Pfad
      • Dateiname
    • Daten zu den beiden Bearbeitern der Datei
      • Name
      • UserID
      • E-Mail-Adresse
    Es dreht sich ja auch nur um diese Variablen, die auch über mehrere Prozeduren hinweg den gleichen Wert behalten...


    Da kann ich jetzt nicht ganz folgen... Könntest du mir das etwas genauer schildern/erklären?
     
    Marty257, 14. Mai 2007
    #7
  8. Variablendeklaration / Werte aus Zellen in Variablen speichern...

    Hi Marty,

    die o.g. Variablen in einem allg. Modul als Public deklarieren.

    Bsp.: Code:
    (für Stringvariable zur Aufnahme des Sachbearbeiternamens)

    Wobei Du natürlich
    1. 'Name' umbennenen solltest (Schlüsselwort - sh. Stichwort Namenskonventionen). Deshalb ja im Bsp. sSBName.
    2., 2 unterschiedliche Variablen (Bearbeiter und Sachbearbeiter [worin auch immer der Unterschied liegen mag...]), benötigst. Das gleiche gilt für die User-ID und eMailadresse... Also beispielsweise sSBName und sBName

    Die Deklaration wäre damit erledigt. Nun willst Du den Variablen ja noch Leben einhauchen, soll heißen, einen Wert zuweisen. Da diese hier im Prinzip von verschiedenen Prozeduren aufgerufen werden können und vorher nicht klar ist welche die 1. aufrufende Prozedur sein wird, ist es doch das Einfachste das gleich beim Programmstart zu tun. I.d.R. ist das bei Excel das Workbookereignis Code:
    Dort weist Du den Variablen jetzt Ihre Werte zu.
    Code:
    Das Workbook_Open Ereignis würde ich dann nicht nutzen, wenn Du alle Ereignisse über eine Userform auslöst. Dann nutze das Activate Ereignis der Form. Die Deklaration kannst Du in diesem Fall auch aus dem allg. Modul herausnehmen. Die sollte in diesem Fall im allg. Deklarationsteil der Form (oberhalb aller Prozeduren und Funktionen, aber ebenfalls als Public (wenn Du externe Prozeduren/Funktionen nutzt) erfolgen. Nutzt Du keine ausserhalb der Form erstellte Prozeduren, dann genügt es sogar, wenn Du die Variablen mit DIM erstellst.

    Alles klar? *Smilie
     
  9. Hmmmmmmmm... »Alles klar?«... ich bin noch am grübeln... *wink.gif* aber ich denke schon.

    => Der Unterschied liegt darin: die »Bearbeiter« bereiten vor, man kann dazu auch allgemein »Aushilfen« sagen. *wink.gif* Diese erleichtern dem Sachbearbeiter die Arbeit, sodass dieser natürlich nur mit dem »Kernproblem« zu tun hat. *Smilie

    So, jetzt mal wieder zurück zum Thema.
    => Also das heißt: Einfügen -> Modul -> Hier dann die Variablen deklarieren (?)

    Die Wertzuweisung mach ich dann auch in dem allgemeinen Modul?

    Ich habe den gesamten Code in Tabelle3, damit ja der CommandButton den gewünschten »Effekt« erzeugt. Dazu dann gleich zwei Fragen:
    • Wie greife ich denn dann auf die Variablen zu? Einfach den Variablennamen dann nutzen oder muss ich da noch etwas ergänzen, damit man dann weiß, dass die Variable aus eben dieser ersten Prozedur kommt?
    • Kann ich das eigentlich auch so machen, dass ich den kompletten Code in ein Modul schreibe und bei den Commandbuttons dann was eingebe, was dann das entsprechende Makro ausführen lässt?
     
    Marty257, 15. Mai 2007
    #9
  10. Ja...
    Jein...*Smilie
    Kannst Du machen, jedoch innerhalb einer Prozedur. Würde ich aber nicht unbedingt empfehlen. Wie gesagt, wenn Du ohne Formulare arbeitest (nur Buttons auf dem Tabellenblatt) dann im Workbook_Open Ereignis. Solltest Du ausschliesslich mit Formularen arbeiten, dann im Form_Activate Ereignis.

    In Deinem Fall (Code soll immer nur im Blatt 3 ausgeführt werden) - und ich gehe davon aus, dass Du keine Prozeduren in extra Modulen ausgelagert hast - kannst Du das auch so lösen:

    Kein allg. Modul nötig (auch nicht zur Variablendeklaration)

    Ganz oben (im Modul von Blatt3, unterhalb von Option Explicit [wenn vorhanden - aber unbedingt empfehlenswert]) die Variablen deklarieren. In diesem Fall reicht sogar DIM. Das hat den Vorteil, dass die Variablen nur dann Speicherplatz belegen, solange Blatt 3 aktiv ist, während sie gleichzeitig für alle Prozeduren in diesem Modul bekannt sind.
    Also. im Modul für Blatt 3, ganz oben :
    DIM sSBName As String, sBName As String usw....
    Dann Deine kommen die Prozeduren.
    Im Worksheet_Activate Ereignis erfolgt dann die Zuweisung.
    Bsp. sSBName = "Max" usw.
    Genau...
    Bsp. in einer beliebigen Prozedur:
    Dim Sachbearbeiter as String
    Sachbearbeiter = sSBName
    Nein. Nicht in diesem Fall. Die Variable hast Du ja nicht in einer Prozedur, sondern im Modul deklariert (ganz oben, vor allen Prozeduren.
    Genau so machst Du es ja jetzt...*Smilie Alles im Modul von Blatt3.
     
  11. Ne, bisher noch nicht. An solche Userforms, wie sich die glaub ich nennen, hab ich mich noch nicht herangetraut. *wink.gif*
    Weiß auch gar nicht, ob das bei meiner kleinen Spielerei nützlich sein kann...

    Hm. Also wenn ich dann von Blatt 3 zu Blatt 1 wechsle, und dann wieder zu Blatt 3, dann werden die Variablen neu eingelesen, sofern ich »dim« nutze?
    Bei »public« würden sie den Wechsel zu anderen Tabellenblättern »überleben«?

    Das fällt mir grade auf, du schreibst hier:
    Gleich beim Programmstart -> Da ist die Zelle, in der der zukünftige Wert drin steht jedoch noch leer... ist das egal?
     
    Marty257, 15. Mai 2007
    #11
  12. ...so ist es...

    ...nachdem nun klar ist, dass Du ausschliesslich mit Blatt 3 arbeitest, vergiss das Workbook_Open Ereignis.

    Wann steht denn fest, welchen Wert die Variable annehmen soll? Deklarieren kannst Du sie trotzdem im Modul von Blatt 3. Doch jetzt kommt es darauf an in welchem Ereignis sie einen Wert bekommt. Folgende Szenarien sind denkbar:
    1. Blatt wird aktiviert,Sachbearbeitername steht fest:
    Zuweisung dann im Worksheet_Activate Ereignis (nach Deiner Schilderung eher unwahrscheinlich).
    2. Blatt wird aktiviert, Sachbearbeitername unbekannt
    In allen Prozeduren, die Sachbearbeitername benutzen, auswerten lassen ob Username leer ist und entsprechend darauf reagieren.
    In dem Ereignis, in dem Sachbearbeitername befüllt werden kann, die Zuweisung realisieren.
    Bsp.: Im Blatt 3, Zelle A2 soll der Name per Hand (oder automatisch) eingetragen werden. Dann wäre das Selection_Change Ereignis von Blatt 3 zuständig.
    Code:
    Oder Du lässt den Sachbearbeitername aus einer Prozedur heraus per Inpubox abfragen, dann erfolgt natürlich die Zuweisung natürlich dort. Du musst halt schauen was wann passiert. Ich kann das von hier aus schlecht beurteilen.
     
  13. Variablendeklaration / Werte aus Zellen in Variablen speichern...

    Also, das ganze läuft so ab:
    Sachbearbeiter kopiert seinen Inhalt in die Mappe
    Per Klick auf CommandButton1 wird dann das ganze formatiert, alles an die richtige Stelle gebracht, und die nötigen Inhalte eingefügt.

    DANACH stehen dann alle Daten zur Verfügung.

    Ich denk jetzt mal einfach:
    Reicht es dann einfach, diese eine Prozedur als erstes festzulegen und erst nach dieser dann die Variablen zu deklarieren?
     
    Marty257, 15. Mai 2007
    #13
  14. Nein!

    Wie willst Du denn eine globale Variable nachträglich deklarieren? *Smilie
    Innerhalb der Klick-Prozedur von Button 1? Dann kennt nur die Klick-Prozedur dieses Buttons die Variable. Im Übrigen ist es egal ob Du die Prozedur ganz oben oder ganz unten hinschreibst. Das hat nichts mit deren 'Rang-, oder Reihenfolge' zu tun.
    Also, Variablendeklaration ganz oben, dann alle Prozeduren.
    Die Enable-Eigenschaft aller Buttons auf false setzen.
    Im Selection Change Ereignis überprüfen, ob die Zelle mit dem Usernamen gefüllt wurden. Falls ja, Wertzuweisung an oben deklarierte Variablen vornehmen sowie die Enable-Eigenschaft aller Buttons auf True setzen.
     
  15. hm. ok. Ich denke, ich habe jetzt mal einige Informationen, die ich ausprobieren werde.

    Da jetzt auch Feierarbend in Sicht ist, werd ich mich da morgen wieder dran setzen.
    Auf jedenfall ganz dickes Dankeschön für deine Hilfe heute! *Smilie
     
    Marty257, 15. Mai 2007
    #15
Thema:

Variablendeklaration / Werte aus Zellen in Variablen speichern...

Die Seite wird geladen...
  1. Variablendeklaration / Werte aus Zellen in Variablen speichern... - Similar Threads - Variablendeklaration Werte Zellen

  2. Wenn ein Wert ein einer Spalte, dann komplette Zeile im anderen Blatt untereinander einfügen.

    in Microsoft Excel Hilfe
    Wenn ein Wert ein einer Spalte, dann komplette Zeile im anderen Blatt untereinander einfügen.: Hallo, kann mir jemand bitte bei folgenderm Helfen. Habe etwas ähnliches gefunden was ich brauche, nur noch eine kleine Änderung ist notwendig. Aufgabe: Es wird geprüft, ob in Spalte Q ein Wert...
  3. Abfrageergebnis soll keine doppelten Werte enthalten

    in Microsoft Access Hilfe
    Abfrageergebnis soll keine doppelten Werte enthalten: Ich suche nach einer Lösung für folgendes Problem. In einer Tabelle werden Abwesenheiten erfasst. Verknüpft mit einer Mitarbeitertabelle. So erhalte ich eine Übersicht welcher Mitarbeiter aus...
  4. Teilstring einer Zelle auf Wert aus anderer Zelle überprüfen

    in Microsoft Excel Hilfe
    Teilstring einer Zelle auf Wert aus anderer Zelle überprüfen: Hallo zusammen, ich habe in einer Excel-Tabelle in zwei Tabellenblätter. Tabellenblatt "Artikelstamm" beinhaltet in Spalte A eine Artikel-Nr. und diverse weitere Spalten. Hier ein kleiner Auszug:...
  5. konti aufzählung und wert gleicher konti zusammenfassen

    in Microsoft Excel Hilfe
    konti aufzählung und wert gleicher konti zusammenfassen: hallo ich möchte eine automatische konti aufzählung aller gleichen konti und gleichzeitig die werte gleicher konti zusammenfassen (rot sind die zahlen, welche ich errechnen lassen möchte) danke...
  6. Werte zusammenzählen - ab einer Zelle die nächsten 5

    in Microsoft Excel Hilfe
    Werte zusammenzählen - ab einer Zelle die nächsten 5: Hallo. ich würde gerne eine bestimmte Menge an Zellen zusammenzählen. Genau gesagt: Wenn in einer Zelle (A1) die Zahl 5 steht dann soll Excel ab B2 die nächsten 5 Werte zusammenzählen. Wenn...
  7. Bedingte Formatierung basierend auf Wert anderer Zelle

    in Microsoft Excel Hilfe
    Bedingte Formatierung basierend auf Wert anderer Zelle: Hallo zusammen, beim Erreichen des 18. Lebensjahres (Geburtsdatum Spalte D, Alter automatisch in Spalte E kalkuliert) soll eine bedingte Formatierung den Namen und Vornamen der Teilnehmer (Spalte...
  8. Summieren an Hand der letzten x Datums Werte und mit weiteren Kriterien

    in Microsoft Excel Hilfe
    Summieren an Hand der letzten x Datums Werte und mit weiteren Kriterien: Schönen guten Abend, Wie kann man am besten Summieren mit mehreren Kriterien eines soll davon das Datum sein. So das vom Aktuellen Letzten Datums Wert aus gehent die letzten Bsp. 10 Werte...
  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