Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1584to1588
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Formula vs Value

Formula vs Value
08.10.2017 10:41:05
Thomas
Hey zusammen,
bin neu hier und hänge gerade an einer echt simplen Aufgabe und komme nicht weiter.
Leider konnte ich auch im Forum und bei Google nichts finden.
Wenn ich etwas übersehen hab, bitte Link teilen.
Nun zum Problem, ich würde gern den Wert einer Zelle in eine Variable schreiben :-).
Nur einmal mit dem Syntax „Formula“ und das andere Mal mit „Value“.
Sub Beispiel()
If XYZ = True Then
strTempSyn = "Formula"
Else
strTempSyn = "Value"
End If
strWert = Worksheets("Tabelle1").Cells(X, Y). & strTempSyn
End Sub
Hab bereits auf verschiedene Arten versucht die Variable “strTempSyn” dem Code hinzuzufügen, leider ohne Erfolg.
Lösungsvorschläge sollten nur diese Art der Lösung anstreben. Natürlich könnte das Auslesen des Wertes in die IF-Anweisung eingebettet werden. Allerdings strebe ich diese Art der Lösung NICHT an.
Vllt könnt Ihr mir hier weiterhelfen.
Danke schon mal..
Gruß

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formula vs Value
08.10.2017 10:48:17
Hajo_Zi
VBA Eigenschaften kannst Du keiner Variablen zuweisen, würde ich vermuten.
Warum machst Du es nicht gleich im If?
strWert = Worksheets("Tabelle1").Cells(X, Y).formula

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Anzeige
AW: Formula vs Value
08.10.2017 11:02:47
Thomas
Hey Hajo_Zi,
danke für die schnelle Antwort.
Der oben gezeigte Code ist natürlich nur ein Beispiel.
Der eigentliche Code besteht aus sehr vielen Schleifen, mit deren Hilfe Werte aus verschiedenen Arbeitsblättern und Dateien auf unterschiedliche Arten und Weisen miteinander verglichen werden.
Je nach Vorgabe sollen eben die Formeln oder eben der Wert der Zelle verglichen werden.
Die If Anweisung wie oben beschrieben könnte ich dann eben vor den Schleifen in den Code einfügen und müsste nicht in jede Schleife eine zusätzlich IF-Anweisung schreiben.
Wenn das richtig verstanden habe, dann kann ich einer VBA Eigenschaften generell keine Variablen zuweisen und somit bleibt mir nichts anderes übrig als deinen Vorschlag zu befolgen?
Gruß
Anzeige
AW: Formula vs Value
08.10.2017 11:03:11
Sepp
Hallo Thomas,
und worin liegt der Sinn des ganzen?
Sub Beispiel()
Dim strTempSyn As String, strWert As String, XYZ As Boolean, X As Long, Y As Long

X = 4
Y = 2
XYZ = True

If XYZ = True Then
  strTempSyn = "Formula"
Else
  strTempSyn = "Value"
End If

strWert = CallByName(Worksheets("Tabelle1").Cells(X, Y), strTempSyn, VbGet)

End Sub

Gruß Sepp

Anzeige
AW: Formula vs Value
08.10.2017 11:15:02
Thomas
Hallo Sepp,
vielen Dank.
Macht genau das was ich möchte ;-).
Der Sinn dahinter. Programm wird deutlich übersichtlicher und muss deutlich weniger programmieren ;-). Unnötige If-Anweisungen fallen weg. Kann von einer Stelle im Code, das ganze Programm beeinflussen, etc...
Nochmals Danke ;-)
Es ist schon erstaunlich, dass jemand mit ...
09.10.2017 02:20:46
Luc:-?
…VBA-Basiskenntnissen derartige Überlegungen anstellt, Thomas, ;-)
denn das sieht man hier nur selten, selbst bei Leuten mit langjähriger Erfahrung. Deshalb noch ein Tipp:
Eine boolesche Variable kann nur 2 Werte annehmen und ein Vgl liefert auch immer eine solche. Folg­lich ist ein Vgl wie If XYZ = True Then doppelt gemoppelt, If XYZ Then würde reichen.
Desweiteren ist es immer günstig, Variablen, die sich auch mal ändern könnten, über Konstanten, die am PgmAnfang per Const … deklariert wdn, zu befüllen. Man muss dann bei Bedarf nur den Inhalt der Konstanten am PgmAnfang ändern und nicht das uU lange ganze Pgm durchsuchen. Das beträfe hier X, Y, XYZ und den Namen des Blattes, die direkt als Konstanten angelegt wdn könnten, weil sie sich im Pgm nicht erkennbar ändern. Sollte das aber dennoch im Pgm geschehen, sollte wenigstens ihr Startwert als Konstante festgelegt wdn.
Das könnte man auch mit den TextBezeichnern der Range-Eigenschaften machen, obwohl das hier weniger wichtig wäre. Andererseits eignet sich CallByName als 3.Referenzierungs­Typ (neben CallByReference und CallByValue) auch hervorragend für eine Obfuskation des Pgms, falls das mal erforderlich würde. Allerdings muss der 1.Parameter stets ein Objekt sein, der 2. der einfache Name einer Eigenschaft desselben, der auch verschlüsselt vorgegeben, aber dann in der Methode selbst entschlüsselt wdn muss (zB durch Notation einer dafür geeigneten Fkt, der der verschlüsselte NamensText übergeben wird, als 2.Parameter). In solchen Fällen könnte auch etwas anders vorgegangen wdn (hier mal unverschlüsselt):
Const XYZ As Boolean = True, X As Long = 4, Y As Long = 2, _
relBlatt As String = "Tabelle1", tempSyn As String = "Value Formula"
Dim arxTempSyn() As String, zWert As Variant
arxTempSyn = Split(tempSyn)
zWert = CallByName(Worksheets(relBlatt).Cells(X, Y), arxTempSyn(Abs(XYZ)), VbGet)
Das wäre dann schon alles.
Morrn, Luc :-?
Besser informiert mit …
Anzeige
AW: Formula vs Value
08.10.2017 20:02:23
Werner
Hallo Sepp,
von mir auch ein Danke, habe mitgelesen, kannte ich so auch noch nicht, wieder was gelernt, Danke.
Gruß Werner
Tja, damit geht aber noch mehr, ...
09.10.2017 03:01:59
Luc:-?
…Werner,
wie oben von mir ausgeführt. Aber du kannst dir so bspw auch deine eigene SuperFkt aufbauen, nur musst du bei ihrer Anwendung darauf achten, dass auch immer die richtige Anzahl ggf benötigter Argumente der jeweils auszuführenden WorksheetFunction angegeben wird (muss ggf abgefragt wdn!). Das Grundgerüst sähe dann so aus:
Function MultiPurpose(ByVal FunkName, ParamArray Args())
Dim ix '…ggf benötigte Variablen!
If UBound(Args) 
Dabei müssen die übergebenen Args natürlich entsprd aufgeschlüsselt wdn (falls erforderlich), wobei ggf auch darauf zu achten ist, ob ein einzelnes Args(ix) skalar oder als eigenes Array vorliegt. Die können in einem ParamArray nämlich sehr unterschiedlich ange­geben wdn. Welche Fkt ausgeführt wdn soll, kannst du natürlich schon bei Aufruf der SuperFkt von Bedingungen abhängig machen.
Morrn, Luc :-?
Anzeige
Danke für die Anmerkung
10.10.2017 17:13:05
Werner
Hallo Luc,
werde mich mal damit etwas intensiver auseinandersetzen.
Gruß Werner
Na dann mach mal! ;-] Viel Erfolg! owT
11.10.2017 03:23:49
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige