VBA Exel - Inhalt von Zellen in Variable schreiben

JumpnJack

Grünschnabel
Hallo Leute.

Also ich bin ein totaler Neuling in Sachen VB oder VBA. Mein Problem ist, ich möchte Werte in Zellen auslesen, diese dann mit verschiedenen Abfragen prüfen und dann etwas damit anstellen.

Das Prob ist halt das ich mit der Hilfe von VBA nicht wirklich zurecht komme und eine anständige Funktionsreferenz ala php vermisse ich auch. Also weiß ich schon überhaupt nicht wie ich eine Zelle auselesen kann. Hat da einer einen Tipp wie ich das am besten bewerkstellig, oder wo es sowas wie eine sinnvolle Funktionsreferenz gibt?

Wäre echt klase wenn ihr mir helfen könntet.

Liebe Grüße
JumpinJack
 
Code:
dim ZellenInhalt as String
ZellenInhalt = range("A1").value

Befehlreferenz find ich auch grade für Einsteiger nicht besonders nützlich und im Internet hab ich auch noch keine guten Sites gefunden :rolleyes:
Was manchmal ganz nützlich sein ist "Makro aufzeichnen".
 
Hallo Danke dir für die Antwort. War schon ziemlich nahe an der Lösung wie ich sehe. Es ist auch mal schön zu sehen wie man die Variablen perfekt ausweißt. Also vielen Dank dafür.

Leider stehe ich vor einem unerklärlichen Prob. Ich möchte eine Referenz schreiben und diese soll aus Variablen zusammengesetzt. Das sieht wie folgt aus:
ActiveCell.FormulaR1C1 = "='" & VAR_TABELLE & "'!" & VAR_ZELLE
Laut meinem Gedankengang sollte das dann richtig raus kommen. Nämlich:
='TabelleX'!B3
Was aber tatsächlich raus kommt ist dies:

='TabelleX'!'B3'

Sprich zwei einzelne Anführungszeichen zu viel. Wie kommt sowas und wie kann ich das verhindern.

Gruß JumpinJack

btw: Ja das mit dem Makro aufzeichnen funktioniert echt klasse. Aber leider nurt soweit wie man alles anklicken kann. Wenn ich eine wert in eine Variable schreiben möchte ist das praktische Tool am ende, oder ich hab das noch nicht ganz begriffen. ;)
 
Ich denk mal der Fehler entsteht, wenn du VAR_TABELLE und VAR_ZELLE einen Wert zuweist. Aber so wie du das vorhast zu machen sieht es sowieso ziemlich umständlich aus - da gibt es bestimmt eine leichtere Methode. Was möchtest du denn genau machen?
 
Das entsteht aus einer Buchhaltung herraus. Jedes WorkSheet ist die Buchhaltung für ein anderes Jahr für nur einen Klient oder Mandant.

Das Makro erzeugt eine neue Tabelle mit dem Namen "Aktuelles Jahr" (2004) und übernimmt von Tabelle 2003 die Daten. Ich möchte nicht die Werte von den Zellen kopieren sondern die referenz hinterlegen damit, sollte ich was ändern, auch alles automatisch mitgeändert wird.

Hm...das ist echt schwer zu erklären. Fest steht das ich diese Referenzen benötige. Mal ein Beispiel für meine Zuweisungen

Code:
            COUNTER2 = COUNTER2 + 1
' COUNTER2 = Schleifendurchlauf und Zeilendef
            NEW_GEGENSTAND_ZELLE = "B" & COUNTER2
' Spalte B bleibt, Reihe wird durch Schleifendurchlaufszahl gesetzt
' Ich denke die Zusammensetzung ist einigermassen klar.
' NEW_GEGENSTAND_ZELLE ist die Referenz
            Sheets(TO_SHEET).Select
            Range(NEW_GEGENSTAND_ZELLE).Select
            I_NEW_GEGENSTAND_ZELLE = "='" & AKT_SHEET & "'!" & NEW_GEGENSTAND_ZELLE
            ActiveCell.FormulaR1C1 = I_NEW_GEGENSTAND_ZELLE

Ich kanns schlecht erklären. Ich hoffe du siehst wo ich hin will. Was kann ich denn falsch machen wenn ich 2 Variablen an einander hängen möchte. Oder einen festen String mit einer Variable verkette?
 
Wenn ich das Problem richtig verstanden habe, dann kann man das Problem sogar ohne vba lösen :p

Also du hast ein Blatt mit den Daten vom letzten Jahr (in meinen Beispiel heißt es DB_2003). Die Daten die auf diesen Blatt stehen willst du auf ein neues Blatt (DB_2004) übertragen, willst aber auch, dass automatisch Änderungen, die du auf den alten Blatt machst aufs Neue übertragen werden?!
Ich hab mal ein Beispiel (ist ohne vba) angehängt, wie ich mir vorstelle wie das aussieht.
 

Anhänge

  • test.rar
    2,6 KB · Aufrufe: 311
OK. Finde ich echt klasse das du dir die Mühe machst. Also das Beispiel habe ich mir mal angesehen, funktioniert aber nicht wirklich. Jedenfalls wenn ich in DB_2003 was ändere wird das nicht im anderen Tabellenblatt übernommen.

Ich denke ich benötige doch VBA. ;) Ich hänge mal mein Bspl an.
Gucks dir bitte mal an. Gehe bitte auf Tabellenbaltt 2004. Dort siehst du Referenzen auf 2003. Nun kannst du mit dem kleinen Makro was ich geschrieben habe ein neues Datenblatt erzeugen mit dem Namen 2005. Dort wird die entsprechende Formatierung der Spaltenbreite und den inhalt der Kopftabelle erzeugt. Nun soll das Makro hingehen und checken:
Ist in H3 (1. Zeile Abgänge) ein wert enthalten > ja dann überspringe diese Zeile und kopiere diese nicht in 2005
Wenn nein checke ob in H3 (1. Zeile unter Spalte Gegenstand) ein wert drin steht. Wenn nein ist das ende der tabelle erreicht.

Wenn aber in H3 nichts steht aber in B3 schon dann schreibe die Referenz in das eben erzeugte Tabellenblatt 2005 unter B3. ...und diverse andere Werte. Aber das ist dann nur noch fleissarbeit.

Bei H3 und B3 ist die 3 nur exemplarisch und dient nur als Anfang. Tatsächlich sollte das eher X heißen da diese Abfrage in Schleife gesetzt werden soll. Es soll ja bis zum ende der Tabelle jeder Eintrag geprüft werden.

Ich hoffe das ist einigermassen Verständlich. Und ich hoffe das Makro ist im Dokumnet enthalten.
 

Anhänge

  • bspl.zip
    17,9 KB · Aufrufe: 273
Ich hab mal probiert das mit Objektvariablen zu lösen - bei mir geht es, wie ich mir das vorgestellt habe ;)
 

Anhänge

  • lsg001.rar
    17,9 KB · Aufrufe: 270
Also ich hab das jetzt bei mir auch einmal gemacht - die variable bekomm ich hin - nur möchte ich jetzt mit der Variablen auch etwas machen und zwar, ich habe in der zelle G36 einen Tabellennamen diesen habe ich jetzt in die Variable übergeben nun möchte ich diese Variable in ein makro eingebunden eingesetzt - wo es anstatt des Tabellennames steht - wenn ich jetzt das marko ausführe dann kommt folgende Fehlermeldung "Index auserhalb des gültigen Bereichs" weis einer was ich da machen muss - also ich möchte aus einer 2. tabelle deren name in der Variablen steht daten in die 1. tabelle kopieren.

Danke im Voraus
 
Code:
Sub test()
bla = Range("A1")
Worksheets(bla).Activate
End Sub

Sollte eigentlich funktionieren.


P.S.: Ja, ich benutze nicht aussagekräftige Variablennamen. Bevor das wieder jemand bemängelt... :)
 

Neue Beiträge

Zurück