Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1612to1616
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

if-Bedingung als Variable

if-Bedingung als Variable
13.03.2018 16:30:34
Burkhard
Hallo miteinander,
kann ich einer if-Abfrage eine (String-)Variable zur Auswertung unterschieben? Etwa so (symbolisch):
Dim sBed as String
sBed = "A1 = 250"
if sBed then
else
endif
Das ist nur ein Beispiel, natürlich setzt sich die Bedingung ein bisschen komplizierter zusammen; die Frage richtet sich auf die Zeile mit dem if. Dass es so NICHT geht, habe ich gemerkt; geht es irgendwie anders?
Grüße
Burkhard

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: if-Bedingung als Variable
13.03.2018 16:52:29
Zwenn
Hallo Burkhard,
es handelt sich bei If ... Then um eine Entscheidungsstruktur, die den Ausdruck, den ich nur durch die drei Punkte allgemein abgebildet habe, entweder zu true oder false auswertet. Dieser Ausdruck wiederum kann alles enthalten, was ein Ausdruck unter VBA eben sein kann. In der Regel macht man einen Vergleich zwischen zwei Werten.
Schreibst Du statt der drei Punkte den Namen einer Variable vom Typ Boolean hin, brauchst du nicht zwingend einen Vergleich. Dann wird der Codeblock zwischen Then und End If ausgeführt, wenn die Variable den Wert true hat.
Viele Güße,
Zwenn
Anzeige
AW: if-Bedingung als Variable
13.03.2018 17:20:16
Burkhard
Hallo Zwenn,
ich habe aber keine boolsche Variable, sondern eine String-Variable. Die wird aus zwei Arrays (deren Größe ich an dieser Stelle nicht kenne) zusammengebaut und sieht konkret z.B. so aus (im Direktfenster):
?sBed
.Cells(4, 3) = "W*" AND .Cells(4, 2) = "Mayer"
Wenn ich nun "if sBed" codiere, bekomme ich einen Fehler "Typen unverträglich". Wundert mich auch nicht: sBed kann ja gar nicht true oder false werden - oder?
Grüße
Burkhard
AW: if-Bedingung als Variable
13.03.2018 18:56:57
Zwenn
Hallo Burkhard,
genau. Deine Variable allein enthält einfach keinen Wahrheitswert, deshalb der "Typen unverträglich" Fehler. Aber Tino hat Dir ja bereits die richtige Richtung für Dein vorhaben gewiesen. Ich kannte Evaluate bisher auch nicht, weil ich noch nie in der Situation war, einen Ausdruck auszuwerten, der nur als String vorliegt.
An Deinem Ausdruck fällt mir noch auf, dass er einen With-Block mit einer Sheet-Angabe voraussetzt, weil er mit einem Punkt beginnt.
Viele Grüße,
Zwenn
Anzeige
geht schon
13.03.2018 17:02:31
Tino
Hallo,
denke ist aber nicht im sinne des erfinders!
Sub Beispiel()
Dim sBed As String
sBed = "A1 = 250"
If Evaluate(sBed) Then
MsgBox True
Else
MsgBox False
End If
End Sub
Normal wird es so gemacht!
Sub Beispiel2()
Dim booBed As Boolean
'auf aktives Blatt bezogen wenn in Modul
booBed = Range("A1").Value = 250
'oder
booBed = Cells(1, 1).Value = 250 'oder
'oder auf Tabelle bezogen
booBed = Sheets("Tabelle1").Cells(1, 1).Value = 250
'oder
booBed = Tabelle1.Cells(1, 1).Value = 250
If booBed Then
MsgBox True
Else
MsgBox False
End If
End Sub
Gruß Tino
Anzeige
AW: geht schon
13.03.2018 17:28:18
Burkhard
Hallo Tino,
so etwas wie evaluate() brauche ich in genau dieser Situation, denn sBed wird aus zwei Arrays zusammengesetzt, deren Größe ich nicht kenne (und damit auch nicht, wieviele Bedingungen da noch kommen könnten). Im Direktfenster sieht das bei mir z.B. so aus:
?sBed
.Cells(4, 3) = "W*" AND .Cells(4, 2) = "Mayer"
Das Dumme ist nur: ich bekomme bei "if evaluate(sBed)" immer noch einen Type-Mismatch-Fehler!
Grüße
Burkhard
kannst Du ein Beispiel hochladen?
13.03.2018 17:32:34
Tino
Hallo,
kann es so nicht testen!
Gruß Tino
AW: kannst Du ein Beispiel hochladen?
14.03.2018 10:24:51
Burkhard
Hallo Tino,
in https://www.herber.de/bbs/user/120405.xlsm sind die wichtigsten Infos im Kommentar. Einige meiner Fehlversuche kannst du auch noch finden ...
Vielen Dank für deine Unterstützung!
Grüße
Burkhard
Anzeige
AW: kannst Du ein Beispiel hochladen?
14.03.2018 13:36:00
Tino
Hallo,
vielleicht geht es auch so.
Makro im Modul1 Start ausführen und im Direktfenster ausgeben!
Beachte die Hilfstabelle Tabelle0 die ich ausgeblendet habe!
https://www.herber.de/bbs/user/120413.xlsm
PS: vielleicht liege ich auch komplett daneben und verstehe dein Vorhaben nicht! Sorry!
Gruß Tino
AW: ist evaluate() ad acta?
14.03.2018 15:47:07
Burkhard
Hallo Tino,
erstmal vielen Dank, das ist ein interessanter Ansatz. Mit ein paar Schwachstellen, aber das liegt nicht an dir und ließe sich wohl beheben. Allerdings mag ich prinzipiell nicht so gerne zur Laufzeit eine Hilfstabelle anlegen (und danach wieder wegwerfen), und genau das müsste ich hier tun.
Die Idee mit dem evaluate() hast du wohl ad acta gelegt? Die wäre mir - wenn sie denn funktioniert - wesentlich sympathischer! Die Herausforderung besteht wohl darin, den Suchstring richtig zusammenzubasteln, denn im Direktfenster habe ich das (mit einem sehr vereinfachten Test-String) durchaus hinbekommen. Aber frag mich bitte nicht, wie der ausgesehen hat, das war heute Vormittag, also vor Programmierer-Äonen ...
Grüße
Burkhard
Anzeige
AW: ist evaluate() ad acta?
14.03.2018 16:37:32
Tino
Hallo,
Evaluate nur weil ich davon ausging das der der String nicht zusammengebastelt wird sonder bereits vorliegt.
Die Tabelle ist immer da nur nicht sichtbar!
Gruß Tino
AW: ist evaluate() ad acta?
14.03.2018 17:05:26
Burkhard
Hallo Tino,
da draußen gibt es viele Anwender, und keiner von ihnen hat diese Hilfstabelle (sichtbar oder nicht) - deswegen müsste die in der Tat prinzipiell erst erstellt werden.
Ob der Suchstring nun "zusammengebastelt" wird oder "schon vorliegt" - irgendwoher muss er ja kommen, und irgendwie muss er wohl auch bestimmte Voraussetzungen erfüllen. Die vba-Hilfe und div. Internet-Suchen haben mich da nicht wirklich weitergebracht.
Hast du eine Idee oder Tipps, wie dieser Suchstring korrekterweise aussehen müsste? Ich bin ja durchaus zum Rumprobieren bereit, aber da sollte dann schon irgendwie eine Zielrichtung klar sein. Im Moment bin ich in dieser Hinsicht ziemlich am Ende mit meinem Latein (bzw. vba).
Grüße
Burkhard
Anzeige
AW: ist evaluate() ad acta?
14.03.2018 17:14:49
Tino
Hallo,
der String muss in diesem Fall eine Formel sein.
Die Platzhalterzeichen machen es schwierig eine gescheite Formel zu erstellen.
Evtl. Geht es mit Zählenwenn, muss mal schauen.
Gruß Tino
versuch es mal so...
14.03.2018 17:54:45
Tino
Hallo,
verwende Zählenwenn wegen Platzhalterzeichen und
Min um zu prüfen ob alle Suchkriterien erfüllt sind!
For i = 0 To UBound(arSearchColumns)
sSearchString = sSearchString & sAndString & _
"CountIF(" & ColumnLetter(arSearchColumns(i)) & iRow & _
"," & Chr(34) & arValues(i) & Chr(34) & ")"
sAndString = ","
Next i
If Evaluate("MIN(" & sSearchString & ")>0") Then

Anzeige
Yabba Dabba Doo!
15.03.2018 09:50:45
Burkhard
Hallo Tino,
nie im Leben ...
... wäre ich auf diese Lösung gekommen! Aber es funktioniert! Vielen Dank!!!
Grüße
Burkhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige