649 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

kennt jemand eine Möglichkeit, wie ich innerhalb eines Codes einer Variablen einen Zell-Wert zuweisen kann, den ich dadurch bestimme, dass ich den Cursor auf diese Zelle stelle. Das könnte dann aber auch eine andere Zelle sein als die, auf der der Cursor momentan steht.
VG A.

11 Antworten

0 Punkte
Beantwortet von
Hallo Andreas,

Definiere die Variable in einem Standardmodul (z.B. Modu1) ganz oben als Public

z,b, Public x As Variant

Dann im Sheetmodul diesen Code eingeben.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
x = Target.Value
End Sub

Gruß Mr. K.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,
danke für die schnelle Antwort, aber ich brauche da noch eine kleine Nachhilfe..
Ich habe die Variable wie vorgeschlagen als public definiert und den Code separat im "Sheetmodul" eingetragen. Aber da passiert noch nichts...
Was muss ich noch tun, um dieser Variablen "x" jetzt einen konkreten Zellwert durch die Corsorpositionierung zuzuweisen?
VG A.
0 Punkte
Beantwortet von
Hallo Andreas,

die Variable muss ganz oben im Standard-Modul (also vor der ersten Sub stehen) Wenn du eine andere Zelle anklickst, wird der Wert in die Variable geschrieben und behalten. Kann also mit jedem anderen Makro wieder ausgelesen werden, bis du wieder eine Leere Zelle anklickst.

Probiers bitte nochmal aus.

Gruß Mr. K.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo nochmal,

irgendwas muss ich grundsätzlich falsch machen.

Mein Code beginnt mit:

Option Explicit
Public x As Variant
Sub Leasing()

Dim dteUebernahme As Date, dteRueck As Date
Dim dblRate As Double, dblErste As Double, dblLetzte As Double, dblBetrag As Double
Dim strAbfrage As String, strText1 As String, strText2 As String
........


der andere code
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
x = Target.Value
End Sub

steht im Sheetmodul "Tabelle19". Ich habe bisher mit diesem "Sheetmodul" überhaupt keine Erfahrung und Kenntnis (wo liegt eigentlich der Unterschied zu einem "normalen" Modul1?).

Sorry für meine Begriffsstutzigkeit...
A.
0 Punkte
Beantwortet von
0 Punkte
Beantwortet von
Hi Andreas,

soweit so richtig. Eigentlich sollte es funktionieren. Zumindest in allen Excel-Versionen,
die ich kenne, kannst du jetzt die Variable x auch wieder auslesen. Z.B. mit
Range("A1").value = x

Frage: Beendest du deinen Code irgendwo mit dem Einzel-Befehl End? Damit
wird der Inhalt der Variable wieder gelöscht. Lass das lieber weg.

Der Unterschied ist (u.a.), dass der Code im Sheetmodul ausgeführt wird, sobald du
etwas bestimmtes auf diesem Blatt machst (Hier ein Zellenwechsel), zumindest, sofern
du nicht die Ereignisse explizit mit Application.EnableEvents=False ausgeschaltet hast.

Wie liest du denn die Variable wieder aus und wann genau erfolgt der Zellenwechsel?
0 Punkte
Beantwortet von
hi Andreas :-)

Wobei das Klassenmodul Calculate verboten ist :-)
Mit hinweis auf Volatives Verhalten einiger Funktionen!
MS gingen wohl die Ideen aus *kicher kicher*

Gruss Nighty
0 Punkte
Beantwortet von
lol Nighty. Toller Link. Witzig geschrieben. Ich kann dem Autor nur zustimmen. Mit
Klassenmodulen kann man richtig tolle Sachen machen. Auch ich habe schon
komplexe Objektstrukturen samt Benutzerevents damit gebaut. Aber soweit ist Andi
noch lange nicht.

Stimmt schon: Ein Sheetmodul oder das Modul "Diese Arbeitsmappe" ist im
Endeffekt ein bereits von Excel automatisch instanziertes Klassenmodul das direkt
auf das entsprechende Objekt verweist. Diese Info ist aber erstmal nebensächlich.
Wichtig ist: Das Sheetmodul reagiert auf Benutzereingaben im entsprechenden
Tabellenblatt, wenn über den Dropdownpfeil oben rechts das entsprechende
Ereignis ausgewählt wurde. Zum Anzeigen der Liste der möglichen Ereignisse
zunächst über den Dropdownpfeil oben links das Objekt "Worksheet" wählen.
Natürlich kann auch weitere Code hier geschrieben werden, muss aber nicht
unbedingt.

Die Ereignisse übergeben auch Parameter. Hier wird das Target Objekt übergeben,
das auf die Zielzelle verweist, zu der gewechselt wird und deren Eigenschaften
übernimmt.

@Andreas
Habe dir mal ein Beispiel erstellt.
https://www.dropbox.com/s/eywsix0xc4re1ae/Zellenwechsel.xls?dl=0


[/url]
0 Punkte
Beantwortet von
lol Nighty. Toller Link. Witzig geschrieben. Ich kann dem Autor nur zustimmen. Mit
Klassenmodulen kann man richtig tolle Sachen machen. Auch ich habe schon
komplexe Objektstrukturen samt Benutzerevents damit gebaut. Aber soweit ist Andi
noch lange nicht.

Stimmt schon: Ein Sheetmodul oder das Modul "Diese Arbeitsmappe" ist im
Endeffekt ein bereits von Excel automatisch instanziertes Klassenmodul das direkt
auf das entsprechende Objekt verweist. Diese Info ist aber erstmal nebensächlich.
Wichtig ist: Das Sheetmodul reagiert auf Benutzereingaben im entsprechenden
Tabellenblatt, wenn über den Dropdownpfeil oben rechts das entsprechende
Ereignis ausgewählt wurde. Zum Anzeigen der Liste der möglichen Ereignisse
zunächst über den Dropdownpfeil oben links das Objekt "Worksheet" wählen.
Natürlich kann auch weitere Code hier geschrieben werden, muss aber nicht
unbedingt.

Die Ereignisse übergeben auch Parameter. Hier wird das Target Objekt übergeben,
das auf die Zielzelle verweist, zu der gewechselt wird und deren Eigenschaften
übernimmt.

@Andreas
Habe dir mal ein Beispiel erstellt.
https://www.dropbox.com/s/eywsix0xc4re1ae/Zellenwechsel.xls?dl=0
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo an Alle,

danke für die vielen guten Hinweise und Tipps! Muß sie jetzt allerdings einmal durchdenken und testen, vieles ist dabei neu für mich - um so interessanter!
Melde mich, falls ich noch eine Frage habe.
VG A.
...