Formelergebnis nicht als Value erkannt

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
TextBox MsgBox
Bild

Betrifft: Formelergebnis nicht als Value erkannt
von: Dietmar
Geschrieben am: 06.05.2015 10:36:42

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

Bild

Betrifft: AW: Formelergebnis nicht als Value erkannt
von: Rudi Maintaire
Geschrieben am: 06.05.2015 10:54:07
Hallo,
wirklich 1 oder "1"?
If val(ThisWorkbook.Worksheets("Fixdatenerfassung").Range("E24").Value) = 1 Then
Gruß
Rudi

Bild

Betrifft: leider nein ...
von: Dietmar
Geschrieben am: 06.05.2015 12:44:10
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

Bild

Betrifft: AW: Prüfung mit Select Case und Test MsgBoxen
von: fcs
Geschrieben am: 06.05.2015 14:22:09
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


Bild

Betrifft: Absolut TOP ! ...
von: Dietmar
Geschrieben am: 08.05.2015 00:22:18
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

Bild

Betrifft: AW: Formelergebnis nicht als Value erkannt
von: EtoPHG
Geschrieben am: 06.05.2015 10:58:56
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

Bild

Betrifft: Vorschlag wird gemacht, wenn ...
von: Dietmar
Geschrieben am: 06.05.2015 13:03:20
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

Bild

Betrifft: AW: Vorschlag wird gemacht, wenn ...
von: EtoPHG
Geschrieben am: 06.05.2015 13:44:41
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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Formelergebnis nicht als Value erkannt"