Tut .Wert = .Wert handeln ähnlich Evaluate () - Funktion in VBA?
Betrachten Sie den folgenden Codeausschnitt. Es meint die gleiche Formel in zwei Zellen A1
und A2
Sub Main()
With Range("A1")
.Formula = "=1+1"
End With
With Range("A2")
.Formula = "=1+1"
.Value = .Value
End With
End Sub
Zweiten with
block verwendet .Value = .Value
berechnet/ausgeführt wird die Formel daher die Formel verschwindet aus der Formel bar. Finden Sie ausblenden von Formeln aus dem Formel-bar für eine unterstützende Referenz.
Fügen Sie nun ein weiteres mit block
With Range("A3")
.Formula = "=1+1"
End With
Range("A4") = Evaluate(Range("A3").Formula)
Fügen Sie eine Formel in die Zelle A3
dann, dass die neue Zelle die Formel wird Evaluated()
in eine andere Zelle A4
. Die Ergebnisse, wie gezeigt,
Ich denke, der oben genannten Art zeigt, dass .Value = .Value
und Evaluate()
tun die gleiche Sache.
Jedoch Den code unten zieht Werte aus einer geschlossenen Arbeitsmappe mit den beiden genannten Ansätzen. Habe ich eine Arbeitsmappe book9.xlsm
für dieses Beispiel mit einem hello
setzen Sie in Zelle A1. book9.xlsm
ist der, den ich ziehen die A1
's Wert. Betrachten Sie den code
Sub PullValue()
With Range("A1")
.Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
End With
With Range("A2")
.Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
.Value = .Value
End With
Range("A3").Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
Range("A4") = Evaluate(Range("A3").Formula)
End Sub
Den ersten with
block stellt eine Formel in der Zelle A1
Wert aus einer book9.xlsm
. Es wird ausgeführt, deshalb der abgezogene Wert ist hello
aber die Bearbeitungsleiste zeigt den tatsächlichen .Formula
die C:\...
.
Zweiten with
block verwendet die .Value = .Value
wie oben dargelegt, ist für die Auswertung der Rezeptur-und ausblenden der Formel durch ersetzen mit dem Ergebnis.
Range("A3") ist die gleiche wie die erste with
block.
Und jetzt (A4
) ich bin nach dem gleichen Prinzip wie das erste Beispiel(erste Schnipsel, der in dieser Frage) zu Evaluate()
die Formel, aber Es funktioniert nicht in dieser Zeit.
Finden Sie alle aktivierten Zellen, die Werte und die Formel bar für jedes
So, jetzt, ich kann nicht sagen, dass .Value = .Value
gleich Evaluate()
.
Den Bemerkungen von Evalutate() sagen, dass es verwendet werden kann mit Formeln. Aber in dem Beispiel habe ich gezeigt, dass es nicht funktioniert.
Sind die Formeln verwendet, die als Parameter in Evaluate()
beschränkt? Ich habe immer gedacht, dass zu Bewerten ist sehr mächtig, aber es stellt sich heraus, dass .Value = .Value
tatsächlich ist sogar noch stärker. Obwohl Sie sehr ähnlich sind Sie irgendwie anders sind ( aber ich überlege, es könnte meine Schuld sein, wie die Formel, die ich wählte für dieses Beispiel eingeschränkt werden kann oder eingeschränkt ). Ich denke, ich habe gezeigt, welche macht Sie zwei gleiche und verschiedene zur gleichen Zeit. Es ist immer noch wie 50%/50% und ich kann nicht genau sagen, ob Sie gleich sind oder nicht. Es wäre toll, wenn jemand in der Lage war, zu erklären, was hier fehlt.
Evaluate() schlägt fehl, wenn die referenzierte Zelle in einer geschlossenen Arbeitsmappe habe ich Angst. Wenn Sie öffnen Sie die referenzierten Buch dann funktioniert es wieder gut. Es ist die Art und Weise Bewerten, die Funktion funktioniert, kann es nicht Lesen aus einem geschlossenen Buch.
InformationsquelleAutor | 2013-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
.Wert und Bewertung sind nicht dasselbe.
Excel unterhält sowohl einen Wert und eine Formel-Zeichenfolge für jede Zelle verwendet, und Sie können beide unabhängig voneinander mit Bereich.Wert und Bereich.Formel.
Wenn Sie die Anwendung verwenden.Bewerten bewerten einen string der string wird ausgewertet, wie eine Formel, die auf dem aktiven Arbeitsblatt (also eigentlich ist es besser, zu verwenden Arbeitsblatt.Bewerten Sie eher als Anwendung.Bewerten, und seine auch schneller).
Mithilfe Von Rng1.Value=Rng2.Wert kopiert den Wert von Rng2 in Rng1 und überschreibt die Formel von Rng1.
Mithilfe Von Rng1.Wert=Evaluate(rng2.Formel), fragt Excel zum abrufen der Formel-string aus rng2, auswerten und das Ergebnis an Rng1.
Die Evaluate-Methode nicht funktioniert genau die gleiche Weise wie eine Formel in einer Zelle: es hat viele "Macken", die Sie müssen sich bewusst sein, (einschließlich der Tatsache, dass es nicht funktioniert mit Formeln verweisen zu externen geschlossenen Arbeitsmappen): siehe meine blog-post für weitere details
Auch seine in der Regel besser zu verwenden .Wert2 statt .Wert: siehe Wert vs Wert2 für details
InformationsquelleAutor Charles Williams
.Value = .Value
undEvaluate()
unterschiedlich sind.Ich denke, Sie haben einige Verwirrung mit Objekten und Ihre Standard-Eigenschaften.
Halten Sie immer im Verstand, den diese zwei Konzepte:
VBA ermöglicht die Verwendung von Eigenschaften und Methoden, ohne Angabe der Objekt -. VBA werden mit Ihrem Standard-Objekt. Zum Beispiel, wenn Sie verwenden
Evaluate()
Sie tatsächlich nutzenSheet1.Evaluate()
.VBA ermöglicht die Verwendung von Objekten ohne Angabe der Eigenschaft. VBA werden mit Ihrem default-Eigenschaft. Zum Beispiel, wenn Sie verwenden
Range("A1") = 1
Sie tatsächlich nutzenRange("A1").Formula = 1
. (Sie tatsächlich nutzenSheet1.Range("A1").Formula = 1
!)Gehen wir zurück zu Ihrem Beispiel, wenn Sie tun
.Value = .Value
Sie tatsächlich tunRange("A2").Value = Range("A2").Value
. Die Value-Eigenschaft einer Zelle kann eine Zahl, ein string, ein Fehler, etc. Und wenn es eine Zahl ist, könnte es sein das falsch - Nummer, dass ist nicht das richtige Ergebnis der Formel in die Zelle (zum Beispiel, weil Sie die automatische Berechnung deaktiviert wurde). So.Value = .Value
entspricht.Formula = "<xxx>"
, wo<xxx>
ist der Letzte berechnete Wert auf die Zelle.Wenn Sie
Range("A4") = Evaluate(Range("A3").Formula)
Fragen Sie Excel zum auswerten der Formel und weisen Sie das Ergebnis derFormula
- Eigenschaft des range-A4 (da die Formel-Eigenschaft die default-Eigenschaft eines range-Objekts.)hello
und kein Fehler. Wird der Fehler ausgelöst, weil zu Bewerten, kann nicht ziehen Sie einen Wert aus einer geschlossenen Arbeitsmappe dann?Ja. Excel ist ziemlich gut im verstecken, in geschlossenen Arbeitsmappen wenn Formeln beziehen sich auf Sie, auch wenn Sie geschlossen sind. Die Evaluate-Methode arbeitet mit Daten in Arbeitsmappen, aber nur, wenn Sie bereits geöffnet sind. Wenn Sie wissen, dass Ihre nächste Bewerten werde versuchen, auf Daten zuzugreifen, die auf einer anderen Arbeitsmappe, die das makro soll überprüfen, ob die Arbeitsmappe geschlossen ist, und öffnen Sie es. Aber die Leistungen wären viel langsamer (auch mit
ScreenUpdating = False
) als die Formel, weil das makro öffnen würden, die gesamte Arbeitsmappe, während eine Formel, die in der Lage ist, nur den Zugriff auf die erforderlichen Daten innerhalb einer geschlossenen Datei.haben Sie eine Referenz zu unterstützen
(You actually use Sheet1.Range("A1").Formula = 1!)
aus deiner Antwort ? Wie haben Sie herausfinden, dass in der Formel ist die Standardeinstellung für die Bandbreite?Ich habe keine Referenz. Ich denke, das ist, was passiert, weil
Range("A2") = "=A1"
funktioniert, und da von anderen ähnliche Verhaltensweisen, aber ich könnte falsch sein.danke. Bitte dies sehen in Ihrer Freizeit, ist es für Sie interessant sein können
InformationsquelleAutor stenci
.Value = .Value
(innerhalb einer ZelleWith
block) setzt einfach den Wert der Zelle auf den aktuellen Wert zu überschreiben und die Beseitigung Ihrer Formel, wenn er eines hat. Die.Value
Eigenschaft stellt einfach den aktuellen Wert einer Zelle. Wenn die Zelle eine Formel enthält, wurde noch nicht berechnet, z.B. wenn die Berechnung ausgeschaltet wurde, kann es nicht wieder die Formel-Ergebnis-statt Rückkehr der Vorherige Wert der Zelle.Excel.Application.Evaluate
nimmt einen string-Wert, die Bewertung der string-Inhalte, als ob es eine Formel oder den Namen einer Zelle, und für die Rückgabe der Wert der Zelle oder Formel. Wenn Sie übergeben Sie eine Zeichenfolge, die nicht zugeordnet werden in eine Excel-Zelle-name oder nicht ist eine gültige Formel, erhalten Sie eine Fehlermeldung. Der Zweck derEvaluate
ist es dynamisch erzeugten Formeln ausgewertet werden, ohne zu schreiben, die Formel aus einer Zelle. Wenn Sie überschritten wird, eine Formel, es sollte auch ein Ergebnis zurückgeben, selbst wenn die Arbeitsmappe Berechnung ausgeschaltet ist, aber wenn Sie überschritten wird, ein name, den ich erwarten würde, bis Sie wieder den aktuellen Wert einer Zelle, und wenn die Arbeitsmappe Berechnung ausgeschaltet ist, wird dieser Wert nicht unbedingt den erwarteten Wert der referenzierten Zelle.Vermutlich seit der
.Value
einer Zelle undEvaluate()
können unterschiedliche Ergebnisse zurückgeben, die Arbeitsblatt-Formel-Auswertung-engine und dieApplication.Evaluate()
Motor anders sind, oder haben zumindest einige andere Elemente.InformationsquelleAutor Monty Wild
Bewerten ist eine Funktion
Und was verwenden Sie, gefolgt von einem Punkt (.) nach einer Funktion,die aufgerufen wird, als Eigentum. So ".Wert",".Formel"".Text" sind die Eigenschaften der Reihe, die Sie hier verwenden.
Nicht verwechselt werden diese 2 Dinge.
Funktion nimmt die Eingabe, führen Sie Aktionen, die mit den Eingabe-Variablen und geben Ergebnisse zurück. Und es funktioniert auf dem Daten-Typ, für den es konfiguriert ist.
.Wert ist eine Allgemeine Eigenschaft, die ist nicht abhängig vom Datentyp. Es kann sein, string, numeric, float oder was auch immer.
so gibt es die Möglichkeit, wo man Fehler von 1 und andere arbeiten absolut in Ordnung.
InformationsquelleAutor Kamal G