Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - Formelergebnis aus Zelle auslesen

Forumthread: VBA - Formelergebnis aus Zelle auslesen

VBA - Formelergebnis aus Zelle auslesen
15.08.2002 11:26:49
Ralph
Ist wahrscheinlich ein simples Problem, aber ...

Ich habe einige Beschriftungen in Datentabellen lokalisiert, indem ich die Namen aus einem gesonderten Blatt hole, je nachdem welche Sprache der Benutzer ausgewählt hat (mittels "WVerweis").

Gleichzeitig möchte ich nun aus VBA mit einer Funktion auf diese Daten zugreifen und die Beschriftungen als "Orientierung" nutzen (bspw. ".Find(Label)"), um die entsprechende Datenzeile zu selektieren.

Leider wirft VBA mir einen Laufzeitfehler 91 ("Objektvariable oder With-Blockvariable nicht festgelegt"). Ersetze ich die Labels durch direkte Eingaben (ohne Lokalisierungsformel), geht's prima.

Wie lese ich bei VBA das Ergebnis der Formel in einer Zelle aus und nicht die Formel selbst?

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: VBA - Formelergebnis aus Zelle auslesen
15.08.2002 11:39:42
mathias r.
Debug.Print Range("A1").Formula ' gibt =1+2
Debug.Print Range("A1").Value ' gibt 3
Debug.Print Range("A1") ' gibt 3
Re: VBA - Formelergebnis aus Zelle auslesen
15.08.2002 12:25:54
Ralph
Danke! Das funtkioniert hier zwar auch, hilft aber leider nicht weiter. Ich poste mal die bisherige Prozedur - vielleicht habe ich ja auch irgendeinen Fehler übersehen. Die Mischkurse werden problemlos eingelesen, aber beim Einlesen der Daten muckt er dann. Test-Aufruf im Direktfenster mit '?Umrechnung ("VJ", "AE", "EUR", 3)'.

Ergänze ich die Suchspalte mit "AE" (statt einer Formel), läuft die Schleife für das Einlesen der Daten problemlos durch.


Dim Mischkurs(1 To 12), Perfcardwert(1 To 12) As Single
Public Function Umrechnung(Tabelle, Umrobjekt, Kurs, aktMonat)

Set Kursblatt = Workbooks("PerfCard.xls").Worksheets("Mischkurse") 'Referenz auf Mischkursblatt
Set Datenblatt = Workbooks("PerfCard.xls").Worksheets(Tabelle) 'Referenz auf Datenblatt

Debug.Print Tabelle, Umrobjekt, Kurs, aktMonat

'Arrays löschen

For i = 1 To 12
Mischkurs(i) = 0
Perfcardwert(i) = 0
Next i


' Mischkurse einlesen

Kursblatt.Activate
For i = 1 To aktMonat
Kursblatt.Range("A:A").Find(Kurs).Activate 'Erste Zelle in Mischkurszeile aktivieren
Set Monatskurs = ActiveCell.Offset(0, i + 1) 'Erster Mischkurs-Wert in Spalte 3
Mischkurs(i) = Monatskurs.Value 'Mischkurs-Array füllen
Debug.Print i; Mischkurs(i);
Next i

Debug.Print 'Zeilenumbruch

' Daten in Landeswährung einlesen (jeweils eine Zeile bzw. ein Wert, z.B. AE, U, EBIT)

Datenblatt.Activate
For i = 1 To aktMonat
Datenblatt.Range("A:A").Find(Umrobjekt).Activate 'Erste Zelle in Datenzeile aktivieren
Set Monatswert = ActiveCell.Offset(0, i) 'Erster Datenwert in Spalte 2
Perfcardwert(i) = Monatswert.Value 'Datenarray füllen
Debug.Print i; Perfcardwert(i);
Next i


End Function

Anzeige
Re: VBA - Formelergebnis aus Zelle auslesen
15.08.2002 14:29:33
mathias r.
Mir fällt nur auf, das mit
Dim Mischkurs(1 To 12), Perfcardwert(1 To 12) As Single
der Mischkurs als Variant und Perfcardwert als Single deklariert wird. (Nicht wie du vielleicht annimmst beide als Single)
Dadurch "schluckt" Mischkurs alles, Perfcardwert dagegen nur Zahlenwerte. Gibt es da ein Problem?
Versuchs mal beide als Variant oder mit
Perfcardwert(i) = CSng(Monatswert.Value)
Anzeige
Re: VBA - Formelergebnis aus Z
15.08.2002 15:03:20
Ralph
Leider keine Veränderung. Ich hatte in der Tat angenommen, daß ich beide als "Single" dimensionieren würde - Danke für den Hinweis! Auch der Versuch mit CSng hilft leider nicht.
Irgendwie muss ich sowohl für das Auslesen als auch für die .Find-Methode tatsächliche Daten in der entsprechenden Zelle haben und keine Formel. Seltsam irgendwie. Kann ich vielleicht die Ausgabe von Debug.Print irgendwie in die Array-Elemente umleiten (so á la Unix: "Debug.Print(Zelle) > Array(index)"? Debug.Print funktioniert ja wie gewünscht...
Anzeige
Re: VBA - Formelergebnis aus Z
15.08.2002 16:27:28
mathias r.
Da liegt offensichtlich ein Typenproblem vor.
Durchlaufe den Code schrittweise und schau was aus der Zelle gelesen wird. Debug.Print interpretiert alles zwangsläufig als String. Versuch auch den Zellwert als String umzuwandeln oder wie bereits vorgeschlagen als Variant einzulesen.
Es geht bestimmt!
Anzeige
Re: VBA - Formelergebnis aus Z
15.08.2002 16:53:42
Ralph
*Seufz* Es will einfach nicht. Inzwischen habe ich so ziemlich alles auf Variant stehen, habe es mit der Umwandlung versucht, die Variablen angeschaut - nickesse! Aber wenn der Prophet nicht zum Berg kommt...
Ich habe jetzt links von der Zeilenbeschriftung eine weitere Spalte eingefügt, dort die Labels im (deutschen) Klartext eingefügt und die Spalte dann ausgeblendet. So kann der User mit lokalisierten Beschriftungen arbeiten, ich spare mir den Aufwand, die Labels in VBA zu ändern und komme mit der Tabelle weiter. Ist vielleicht nicht elegant, aber wenigstens funktioniert es.

Nichtsdestotrotz vielen Dank für Deine Unterstützung!

*leicht-frustriert*
Ralph


Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Formelergebnis aus einer Zelle in VBA auslesen


Schritt-für-Schritt-Anleitung

Um das Formelergebnis aus einer Zelle in VBA auszulesen, kannst du die folgende Vorgehensweise nutzen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub AuslesenFormelergebnis()
       Dim cellValue As Variant
       cellValue = Range("A1").Value ' Hier wird der Wert aus Zelle A1 ausgelesen
       Debug.Print cellValue ' Gibt das Ergebnis im Direktfenster aus
    End Sub
  4. Führe das Makro aus: Drücke F5, während der Cursor im Code steht, oder wähle das Makro im Menü aus.

  5. Überprüfe das Direktfenster: Drücke CTRL + G, um das Direktfenster zu öffnen, und sieh dir das ausgelesene Ergebnis an.


Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Dieser Fehler tritt auf, wenn eine Objektvariable nicht ordnungsgemäß festgelegt wurde. Stelle sicher, dass du die richtige Zelle referenzierst und dass das Arbeitsblatt aktiv ist.

  • Formel statt Wert: Wenn du die Formel anstelle des Wertes ausliest, verwende Range("A1").Value anstelle von Range("A1").Formula.

  • Typenkonflikte: Achte darauf, die Variablen korrekt zu deklarieren (z.B. als Variant), um Typkonflikte zu vermeiden.


Alternative Methoden

Eine alternative Methode, um den Wert einer Zelle auszulesen, ist die Verwendung von Evaluate. Hier ein Beispiel:

Sub AuslesenMitEvaluate()
    Dim cellValue As Variant
    cellValue = Application.Evaluate("A1") ' Wert aus Zelle A1
    Debug.Print cellValue
End Sub

Diese Methode ist besonders nützlich, wenn du dynamische Zellreferenzen benötigst.


Praktische Beispiele

Hier sind einige Beispiele, wie du die Methoden in verschiedenen Szenarien verwenden kannst:

  1. Wert aus einer Zelle mit einer Formel auslesen:

    Dim wert As Variant
    wert = Range("B2").Value ' Angenommen, B2 enthält eine Formel
  2. Mischkurse auslesen und speichern:

    Dim Mischkurs As Variant
    Mischkurs = Range("C2").Value ' C2 enthält den aktuellen Mischkurs
  3. Daten aus einer Tabelle auslesen:

    Dim zeile As Long
    For zeile = 1 To 10
       Debug.Print Range("D" & zeile).Value ' Auslesen der Werte in Spalte D
    Next zeile

Tipps für Profis

  • Debugging: Nutze Debug.Print, um den Verlauf deiner Variablen zu überprüfen. Das hilft dir, Probleme schneller zu identifizieren.
  • Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um Laufzeitfehler zu steuern.
  • Zellformatierung: Achte darauf, dass die Zellen im richtigen Format vorliegen, um unerwartete Typenkonflikte zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich den Wert einer Zelle mit einer Formel in VBA auslesen?
Du kannst den Wert mit Range("A1").Value auslesen, um das Ergebnis der Formel zu erhalten.

2. Was tun, wenn ich einen Laufzeitfehler erhalte?
Überprüfe deine Zellreferenzen und stelle sicher, dass alle Variablen korrekt deklariert sind. Achte auch darauf, dass das entsprechende Arbeitsblatt aktiv ist.

3. Kann ich Zellwerte in ein Array speichern?
Ja, du kannst Zellwerte in ein Array speichern, indem du eine Schleife verwendest, um die Werte einzulesen und in das Array zu schreiben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige