Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bedeutung von "Evaluate"

Forumthread: Bedeutung von "Evaluate"

Bedeutung von "Evaluate"
22.03.2006 07:54:27
"Evaluate"
Tach allerseits
in einem fremden Makro habe ich folgendes Konstrukt gefunden:
varUniqueKey = Evaluate(ActiveWorkbook.Names("UniqueKey").Value).Value
Das gleiche Resultat wird mit
varUniqueKey =Range("UniqueKey")
erreicht.
Frage: Was ist der Vorteil von "Evaluate" ?
Gruss yogi
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bedeutung von "Evaluate"
22.03.2006 09:58:01
"Evaluate"
Hallo yogi,
Grundfunktion der Evaluate-Methode:
Diese Methode konvertiert einen Microsoft Excel-Namen in ein Objekt oder in einen Wert.
Beispiel:
Set Bereich = Evaluate("[MAPPE1.XLS]Tabelle1!A1:B20")
ist identisch mit
Set Bereich = Workbooks("MAPPE1.XLS").Sheets("Tabelle1").Range("A1:B20")
Statt die einzelnen Objekt-Typen nacheinander abzufragen/zuzuweisen, kann man mit Evaluate über den EXCEL-Namen des Objects direkt in VBA ein Object erzeugen und diesem Objekt dann Eigenschaften zuweisen oder Eigenschaften auslesen.
Die Evaluate-Methode vereinfacht also ggf. die Definition von Objekten. Warum der Programmierer in dem Beispiel mit dieser Methode arbeitet: ? Evtl. möchte er in seinem Code die verwendeten Objekte immer mit ihrem vollständigen Namen ansprechen, um Trouble zu mimimieren.
Gruß
Franz
Anzeige
AW: Bedeutung von "Evaluate"
22.03.2006 11:01:58
"Evaluate"
Tach Franz
Dank für die Hilfe. Ganz löst das meine Frage nicht. Ich hatte nicht den ganzen Code gezeigt, der sieht so aus:

Sub a
varUniqueKey = GetValueOfANamedRange("UniqueKey")
varKey1=GetValueOfANamedRange("Key1")
varKeyn=GetValueOfANamedRange("Keyn")
End Sub


Function GetValueOfANamedRange(ByVal strName) As Variant
GetValueOfANamedRange = Evaluate(ActiveWorkbook.Names(strName).Value).Value
End Function

wobei alle Referenzen in der gleichen Tabelle sind. Ich hätte das so gemacht:

Sub a
Dim awb As Workbook
Dim ash As Worksheet
Set awb = ActiveWorkbook
Set ash = awb.Sheets("Tabelle1")
With ash
uniqueKey = Range("UniqueKey")
varKey1 = Range("varKey1")
End With
Eine Vereinfachung mit Evaluate ist das kaum, zudem dürfte es langsamer sein.
Gruss yogi

Anzeige
;
Anzeige

Infobox / Tutorial

Bedeutung von "Evaluate" in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Verwendung von Evaluate: Um die Evaluate-Methode in Excel VBA zu nutzen, musst du sie im Kontext eines Namens oder eines Bereichs verwenden. Zum Beispiel:

    varUniqueKey = Evaluate(ActiveWorkbook.Names("UniqueKey").Value).Value

    Dieser Code konvertiert den Namen "UniqueKey" in den entsprechenden Wert.

  2. Objekte mit Evaluate erstellen: Du kannst auch ganze Bereiche mit Evaluate definieren:

    Set Bereich = Evaluate("[MAPPE1.XLS]Tabelle1!A1:B20")

    Dies ist gleichbedeutend mit dem direkten Zugriff über die Workbook- und Sheet-Objekte.

  3. Werte aus benannten Bereichen abrufen: Eine Funktion zum Abrufen von Werten aus benannten Bereichen könnte so aussehen:

    Function GetValueOfANamedRange(ByVal strName) As Variant
        GetValueOfANamedRange = Evaluate(ActiveWorkbook.Names(strName).Value).Value
    End Function

Häufige Fehler und Lösungen

  • Fehler: "Name nicht gefunden": Dieser Fehler tritt auf, wenn der angegebene Name nicht im Workbook existiert. Stelle sicher, dass der Name korrekt ist und im Namensmanager vorhanden ist.

  • Leerer Rückgabewert: Wenn Evaluate nichts zurückgibt, überprüfe, ob der benannte Bereich tatsächlich Werte enthält. Ein leerer Bereich führt zu einem leeren Rückgabewert.


Alternative Methoden

Statt Evaluate kannst du auch direkt auf den Bereich zugreifen:

varUniqueKey = Range("UniqueKey").Value

Diese Methode kann in vielen Fällen schneller sein und ist einfacher zu lesen, besonders für Anfänger in Excel VBA.


Praktische Beispiele

Hier sind einige Beispiele, wie Evaluate in der Praxis angewendet werden kann:

  1. Bereichszuweisung:

    Dim Bereich As Range
    Set Bereich = Evaluate("Tabelle1!A1:A10")
  2. Summe von Werten in einem benannten Bereich:

    Dim Summe As Double
    Summe = Evaluate("SUM(UnnamedRange)")
  3. Verwendung in komplexeren Formeln:

    Dim Ergebnis As Variant
    Ergebnis = Evaluate("IF(A1>10, 'Ja', 'Nein')")

Tipps für Profis

  • Performance: In vielen Fällen ist die direkte Verwendung von Range-Objekten schneller als Evaluate. Überlege, ob die Verwendung von Evaluate in deinem spezifischen Fall wirklich notwendig ist.

  • Lesbarkeit: Verwende Evaluate sparsam, da es den Code weniger lesbar machen kann. Halte den Code klar und verständlich.

  • Debugging: Wenn du Probleme mit Evaluate hast, kannst du die Formel, die du evaluierst, in eine Zelle schreiben und die Ergebnisse überprüfen, um sicherzustellen, dass die Syntax korrekt ist.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Evaluate und Range?
Evaluate konvertiert einen Namen oder eine Formel in einen Wert oder ein Objekt, während Range direkt auf Zellen zugreift. Evaluate kann in bestimmten Kontexten nützlich sein, ist aber oft langsamer.

2. Kann ich Evaluate in Formeln verwenden?
Ja, Evaluate kann auch verwendet werden, um Formeln auszuwerten, die in einem String-Format übergeben werden, was die Flexibilität erhöht.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige