Excel VBA - Variable in Code

duAffentier

Vice Admiral
Registriert
Jan. 2008
Beiträge
6.354
Hallo!

Wie kann ich im VBA Code ein Teil variabel machen!

Beispiel:
Select.Range("A20") - Dies ist ja ein fester Wert.
Ich möchte nun gerne die "20" variabel machen. z.B. aus einer Zelle XY holen. Wo ich dann eine Zahl X eingebe.
Das Makro würde dann nicht A20 ansteuern, sondern z.B: A21 oder A22 etc.
 
For i = 1 To 10
Frage: Wo hole ich die Info her, welche Zeile dann die Vorgabe ist? Nimt Excel die aktive Zeile oder kann ich dies in einer Zelle Vorgeben?

For i = Worksheets("Projektliste").Range("A2").Value
Hier steht dann z.B: die 20 oder 22 oder xx drin.
 
Man könnte das z.B. so machen

Code:
For i = 1 To 10
   Range("A" & i).Value = "MEIN WERT"
Next
 
  • Gefällt mir
Reaktionen: duAffentier
Code:
Dim MeinWert as Integer

MeinWert =  ActiveWorksheet.Range("A2").Value

So als Anhaltspunkt. Mit der Variable "MeinWert", welches in diesem Beispiel eine Zahl sein muss, kannst Du dann machen was Du willst, z.B. cells(1, MeinWert).activate :)
 
  • Gefällt mir
Reaktionen: tollertyp
Ich glaube die Sache mit der For-Schleife verwirrt den TE mehr als sie hilft, die Fähigkeit abstrakt zu denken scheint ihm da etwas zu fehlen und manche haben vielleicht auch nicht zu 100% trotz Erklärung verstanden, wie er es genau mit "variabel" meinte.
 
Code:
' Zahl aus Zelle A1 auslesen
meinWert = Worksheets("Projektliste").Range("A1").Value


' Inhalt aus Zelle A2 auslesen
zweiterWert = Worksheets("Projektliste").Range("A2").Value

' Inhalt aus Spalte A und Zeile "meinWert" auslesen
zweiterWert = Worksheets("Projektliste").Range("A"&meinWert).Value
zweiterWert = Worksheets("Projektliste").cells(meinWert, 1).Value

Laesst man das "Worksheets("Projektliste")." (inkl. Punkt) weg, bezieht man sich immer auf das aktuell aktive Worksheet. Da kann schnell mal ein Fehler passieren, weshalb es sinnvoller ist, immer vollstaendig zu referenzieren (also inkl. Angabe des Worksheets)

Der Vorteil der Cells-Methode: Sie ist schneller.
Aufruf: Cells(Zeilennummer, Spaltennummer)
 
duAffentier schrieb:
Danke @G-Red .
"Mein Wert" kann ich dann per
Code:
Worksheets("Projektliste").Range("A2").Value
einfügen?
Mein Beispiel sagt, dass du in die Zellen A1 bis A10 ein und denselben Wert schreibst und zwar "MEIN WERT".
Das Beispiel dient lediglich dazu, um dir zu zeigen wie es funktioniert, wenn man dynamisch einen oder Bestimmte Werte (abhängig von weiterer Logik) schreibt.
Ergänzung ()

Scientist schrieb:
Code:
' Zahl aus Zelle A1 auslesen
meinWert = Worksheets("Projektliste").Range("A1").Value


' Inhalt aus Zelle A2 auslesen
zweiterWert = Worksheets("Projektliste").Range("A2").Value

' Inhalt aus Spalte A und Zeile "meinWert" auslesen
zweiterWert = Worksheets("Projektliste").Range("A"&meinWert).Value
zweiterWert = Worksheets("Projektliste").cells(meinWert, 1).Value

Laesst man das "Worksheets("Projektliste")." (inkl. Punkt) weg, bezieht man sich immer auf das aktuell aktive Worksheet. Da kann schnell mal ein Fehler passieren, weshalb es sinnvoller ist, immer vollstaendig zu referenzieren (also inkl. Angabe des Worksheets)

Der Vorteil der Cells-Methode: Sie ist schneller.
Aufruf: Cells(Zeilennummer, Spaltennummer)
Mag sein dass ich mich irre, aber ich glaube so gibt es einen Fehler. Denn eine Zelle mit der Nummer "AzweiterWert" kennt Excel nicht. Die Nomenklatur ist <Spaltenbuchstabe><Nummer>
 
G-Red schrieb:
Mag sein dass ich mich irre, aber ich glaube so gibt es einen Fehler. Denn eine Zelle mit der Nummer "AzweiterWert" kennt Excel nicht. Die Nomenklatur ist <Spaltenbuchstabe><Nummer>
Und auf welche Stelle beziehst du dich?
Ich sehe keinen Verweis auf "AzweiterWert".
 
Scientist schrieb:
Und auf welche Stelle beziehst du dich?
Ich sehe keinen Verweis auf "AzweiterWert".
Zeile 1: Zuweisung eines Stringwertes aus der Range("A1")
Zeile 9: Da machst du die Zuweisung
Code:
zweiterWert = Worksheets("Projektliste").Range("A"&meinWert).Value

D.h. es wird versucht in die Variable zweiterWert, der Inhalt an der Stelle Range("A"&meinWert) zu schreiben. Das kann aber nicht gehen weil die Variable meinWert ein String und keine Nummer ist.

Versuch das einfach selbst dann wirst du den Fehler bekommen.
 
Dir ist schon klar, dass du Range() einen String uebergibst (man achte auf die Anfuehrungszeichen) und das "&" an dieser stelle ein String-Operator ist?
Bevor du also irgendwen zu einem Test aufforderst, solltest du das vielleicht selbst mal testen ...
 
Scientist schrieb:
Dir ist schon klar, dass du Range() einen String uebergibst (man achte auf die Anfuehrungszeichen) und das "&" an dieser stelle ein String-Operator ist?
Ähmm.. das ist DEIN Code von oben. Ich habe es nur übernommen so wie du es geschrieben hast. Daher erst Mal Ruhe bewahren.
Scientist schrieb:
Bevor du also irgendwen zu einem Test aufforderst, solltest du das vielleicht selbst mal testen ...
Das beigefügte Video ist der Test deines Codes mit der eindeutigen Fehlermeldung. Von da an verstehe ich die Aufregung nicht.
 
Zuletzt bearbeitet:
Scientist schrieb:
Herzlichen Glueckwunsch, du kannst keine Zahl eintippen.
Denn das steht in Zeile 1 meines Code-Tags "Zahl aus Zelle A1 auslesen".
Zunächst ein Mal ist der herablassende Ton hier nicht angebracht, zumal du nach wie vor leider falsch liegst.
Nachfolgend wie du aus einer Range den Wert bzw. die Nummer der Zelle ermittelst, was du eigentlich in deinem Beispiel als "Zahl aus Zelle A1 auslesen" gemeint hast.

Code:
'Wert aus Range auslesen
MsgBox (Range("A1").Value)

'Zellennummer aus Range Auslesen
MsgBox (Range("A1").Row)
 
Scientist schrieb:
Warum ich so reagiere, weil du nur murks in jedem Betrag schreibst und ich eher das Gefuehl habe, dass du hier trollst
Was für ein Quark...

Scientist schrieb:
Wenn in Zelle A1 2 steht, wird in meinWert "2" als String geladen.
Aus ' "A"&meinWert' wird dann "A2" und anschließend wird der Inhalt aus A2 in die Variable zweiterWert geladen.
Nochmals, wenn du dem Nachweis des Fehlers aus der oben beigefügten Videosequenz, wo DEIN Code ausgeführt wird, nicht glaubst, dann teste es doch selbst, statt beharrlich darauf zu bestehen, dass du im Recht bist, obwohl es offensichtlich nicht der Fall ist.

Wenn das Testen zu schwer für dich ist und du von dir so überzeugt bist, dann ist es dein Problem. Von mir aus bleib in dem Glauben, dass du Richtig liegst.
 
Scientist schrieb:
Dann gib doch mal eine Zahl in deinem Test ein, statt "irgendwas".
wenn ich dort 13,8 eingebe, was meinst du was dann passiert?
 
Scientist schrieb:
Hast dir den verdient: <*)))o><
Geschenkt ;)

Verstehe jetzt deinen Gedankengang, aber so etwas macht man nicht, aus offensichtlichen Gründen. Der Anwender hält sich in der Regel nicht an den Gedankengang des Entwicklers und ballert unmögliche Werte rein ;). Daher muss man das absichern und anders lösen.

Und für die Zukunft, bleib Sachlich bei der Diskussion, wer laut pöbelt den nimmt man meistens nicht ernst.
 
Zurück
Oben