Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1424to1428
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
Formelergebnis nicht als Value erkannt
06.05.2015 10:36:42
Dietmar
Hallo in die Morgenrunde,
ich versuche bisher ergebnislos herauszufinden, weshalb der in einer Zelle per Formel berechnete Wert im Rahmen einer VBA-Prüfroutine nicht als Wert erkannt wird.
Mit folgendem Code prüfe ich den Eintrag in Zelle E24 des Tabellenblattes Fixdatenerfassung. Zelle E24 kann nur die Einträge 0 oder 1 oder 9 haben
Je nach Ergebnis erfolgt dann eine Prüfung, ob die mit vorverlagertem Befehl geöffente Datei (in die ein Datenübertrag stattfinden soll) einen bestimmten Namen hat. Sofern in diesem Namen ein bestimmter Buchstabe vorkommt, soll eine Warnung ausgegeben werden und die Möglichkeit, den weiteren VBA-Prozess abzubrechen (Klick auf Nein).
Die Prüfung VERSAGT ständig, wenn der Wert in E24 nicht 0 ist; mit 0 funktioniert alles bestens. Mit 1 oder 9 rauscht die Prüfung durch und berücksichtigt den Eintrag nicht.
(!) Dabei scheint der Umstand relevant zu sein, dass der Eintrag in Zelle E24 Tabellenblattes Fixdatenerfassung aus einer Indexformel zustandekommt (E24 = INDEX(G48:G72;E22).
Damit sehe ich keine Möglichkeit, auf den Zulieferungswert aus G48:G72 zurückzugreifen, was das Problem ggf. lösen wurde. Ich muss m.E. also auf das Formelergebnis in E24 prüfen können.
Das Zellenformat von E24 ist Standard.
Hier der Code-Schnipsel, der die Prüfung durchführen soll:
If ThisWorkbook.Worksheets("Fixdatenerfassung").Range("E24").Value = 1 Then
Dim dat As String, pruef As Byte
dat = objTarget.Name
pruef = InStr(dat, "N") 'In geöffentenr Datei kommt der Buchstabe N vor, diese ist dann  _
aber falsch!
If pruef = 0 Then
'MsgBox "Alles gut!"
Else
If MsgBox("ACHTUNG(!) ACHTUNG(!) ACHTUNG(!)" _
& vbCrLf & vbCrLf & "Falsche Datei ausgewählt!",
vbCritical + vbYesNo + vbDefaultButton2, "Warnung!") = vbNo Then
objTarget.Activate
If blnOpen = False Then objWB.Close savechanges:=False 'Zieldatei schliessen
GoTo ErrExit 'For-Next-Schleife überspringen
End If
End If
End If
Dankbar für jeden Tipp!
LG
Dietmar

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formelergebnis nicht als Value erkannt
06.05.2015 10:54:07
Rudi
Hallo,
wirklich 1 oder "1"?
If val(ThisWorkbook.Worksheets("Fixdatenerfassung").Range("E24").Value) = 1 Then
Gruß
Rudi

leider nein ...
06.05.2015 12:44:10
Dietmar
Hallo Rudi,
auch mit val in der If-Prüfung geht es leider nicht. Der Code berücksichtigt die Prüfung nicht, sondern rauscht durch.
Es ist dabei auch unerheblich, ob ich 1 oder "1" prüfe.
Habe in Ergänzung Deines Vorschlags noch für alle Möglichkeiten (1 oder "1") ergänzende Tests gemacht, indem ich das Zellformat der zu prüfende Zelle E24 als Standard, Zahl und Text definiert habe. Leider ohne Ergebnis.
Was ich nicht verstehe: Wieso funktioniert die Prüfung korrekt, wenn in E24 eine 0 steht?
LG
Dietmar

Anzeige
AW: Prüfung mit Select Case und Test MsgBoxen
06.05.2015 14:22:09
fcs
Hallo Dietmar,
manchmal ist ein Makro schneller als die Neuberechnung der Zellen. Deshalb sollte man an kritischen Stellen eine Neuberechnung einbauen.
Außerdem könnte die Ermittlung des Position der "N" fehllaufen, wenn Groß-/Kleinschreibung nicht korrekt berücksichtigt wird.
Gruß
Franz
  Dim dat As String, pruef As Byte
With ThisWorkbook.Worksheets("Fixdatenerfassung").Range("E24")
.Calculate
'oder .Parent.Calculate
'oder Application.Calculate
Select Case .Value
Case 0
MsgBox .Parent.Name & " Zelle " & .Address & " : " & .Value, _
vbOKOnly, "Prüfung auf 0" 'Testzeile
Case 1
MsgBox .Parent.Name & " Zelle " & .Address & " : " & .Value, _
vbOKOnly, "Prüfung auf 1" 'Testzeile
dat = objTarget.Name
'In Name geöffenter Datei Buchstabe N suchen, Groß-/Kleinschreibung nicht beachten
'pruef = InStr(1, dat, "N", vbTextCompare)
'In Name geöffenter Datei Buchstabe N suchen, Groß-/Kleinschreibung beachten
pruef = InStr(1, dat, "N", vbBinaryCompare)
If pruef = 0 Then
'MsgBox "Alles gut!"
Else
If MsgBox("ACHTUNG(!) ACHTUNG(!) ACHTUNG(!)" _
& vbCrLf & vbCrLf & "Falsche Datei ausgewählt!", _
vbCritical + vbYesNo + vbDefaultButton2, "Warnung!") = vbNo Then
objTarget.Activate
If blnOpen = False Then objWB.Close savechanges:=False 'Zieldatei schliessen
GoTo ErrExit 'For-Next-Schleife überspringen
End If
End If
Case 9
MsgBox .Parent.Name & " Zelle " & .Address & " : " & .Value, _
vbOKOnly, "Prüfung auf 9 " 'Testzeile
Case Else
MsgBox .Parent.Name & " Zelle " & .Address & " : " & .Value, _
vbOKOnly, "Prüfung auf sonstige Werte " 'Testzeile
End Select
End With

Anzeige
Absolut TOP ! ...
08.05.2015 00:22:18
Dietmar
Hallo Franz,
so, habe jetzt alle Varianten in meiner Originaldatei durchgecheckt.
Die Case-Prüfung war die(!) Lösung!
Das 'Calcualte' davor war nicht nötig, weil ich das in dem Worksheet-Activate schon drin hatte.
Nachdem ich dann die InStr-Funktion nach ein paar Versuchen richtig eingesetzt habe, schnurrt der Code nur so durch!
Ganz herzlichen Dank!
LG
Dietmar

AW: Formelergebnis nicht als Value erkannt
06.05.2015 10:58:56
EtoPHG
Hallo Dietmar,
Dein Codeschnipsel liefert hier keine relevanten Informationen. Grundsätzlich wird der Code ja nur durchlaufen wenn in E24 der numerische Wert 1 steht. In allen anderen Fällen wird er übersprungen. Darum versteh ich auch deine Ausführungen bezgl. 0, 9 etc... nicht.
Die INDEX-Formel liefert dir den gleichen Datentyp der referenzierten Zelle in G48:G72, das kann u.U. also auch String, ein Datum, ein Fehlerwert, ein Boolean sein.
Am besten eine Beispielmappe zur Fehleranalyse liefern!
Gruess Hansueli

Anzeige
Vorschlag wird gemacht, wenn ...
06.05.2015 13:03:20
Dietmar
Hallo Hansueli,
vielen Dank für Deine Rückmeldung.
Die Beispielmappe müsste ich dann erst erstellen. Da diese dann aber recht umfangreich würde, weil die Daten im Indexbereich über eine Textbox eingefügt werden und der Aufruf des Eintrags in der Prüfzelle E24 über ein Dropdownmenü generiert wird ... deshalb hatte ich davon zunächst Abstand genommen.
Wenn ich gar nicht anders klarkomme, werde ich das wohl machen müssen. Ich warte aber erst nochmal, ob es nicht doch eine Lösung gibt, die sich aus meinen Schilderungen generieren lässt.
Was mir mehr als seltsam vorkommt, ist ja der Umstand, dass die Prüfung einwandfrei funktioniert, wenn in E24 ein 0 steht; also nicht "", sondern ein 0 als Zahlenwert.
LG
Dietmar

Anzeige
AW: Vorschlag wird gemacht, wenn ...
06.05.2015 13:44:41
EtoPHG
Hallo Dietmar,
Zitat: weil die Daten im Indexbereich über eine Textbox eingefügt werden
Das heisst schon mal, dass du Text einfügst, wenn du keine explicite Typenwandlung im Code vornimmst.
Zeig doch mal alle relevanten Codeteile, die im Zusammenhang mit Quelldaten (z.B. TextBox nach Zellenbereich) und Steuerelementen (Dropdownmenü ? ), sowie Formeln in den angesprochenen Zellen!
Deine Ausdrucksweise von z.B. 'der Code rauscht durch' liefert einen Informationsgehalt der sehr nahe an Null liegt. Mit dem Debugger (F8-Einzelschritt-Modus) kannst du den Inhalt von Variablen Schritt für Schritt überprüfen. Sonst hilft wirklich nur eine (abgespeckte, anonymisierte) Beispielmappe.
Gruess Hansueli
Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige