Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Laufzeitfehler abfangen

Begonnen von derilzemer, Dezember 31, 2016, 16:48:23

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
ich habe da eine Kleinigkeit, was ich aber trotz der Kleinigkeit nicht kann, weil eben VBA dazu notwendig ist. Ich habe zwei Felder im Formular, welche bei einem Eintrag entsprechend ein Bild aufrufen. Wenn es kein Bild dazu gibt, ist einfach Standardmäßig ein - platziert. Wenn man dann daraufklickt, kommt FM wie im angehängten Bild1.
Ich dachte ich kann das mit meinem bescheidenem Wissen so abfangen (ab If ist das, was ich dazu ergänzt habe):
Private Sub txtTrumpfkarte_DblClick(Cancel As Integer)
    Dim strPfad As String
    strPfad = Me!BilderPfad & _
                        Me!txtVerzeichnisname & "_" & _
                        Me!Trumpfkarte & ".png"
    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, strPfad
    If strPfad = Me.BilderPfad & _
                        Me!txtVerzeichnisname & "_" & _
                        Me!Trumpfkarte & "-.png" Then
                        MsgBox "Sorry, das Spiel hat keine Trumpfkarte!"
    End If
End Sub


Aber auch dann kommt der Laufzeitfehler 2220.

Nach suchen im Inet, habe ich auch mal noch folgenden Zusatz versucht
If Err.Number = "2220" Then
            MsgBox "Das Spiel hat keine Trumpfkarte!", vbCritical
        End If


Selbe Ergebnis, Laufzeitfehler kommt wieder. Wie kann/muss man so etwas abfangen?
Gruß und Danke für die Tipps
Andreas

Grüße und Dank im voraus
Andreas

Lachtaube

Du kannst auch die Prüfung in das Öffnen-Ereignis des anderen Formulars verfrachten.Function FileExists(Path As String) As Boolean
  Const NotFile = vbDirectory Or vbVolume

  On Error Resume Next
    FileExists = (GetAttr(Path) And NotFile) = 0
  On Error GoTo 0
End Function

Private Sub txtTrumpfkarte_DblClick(Cancel As Integer)
   Dim strPfad As String

   strPfad = Me!BilderPfad & _
             Me!txtVerzeichnisname & "_" & _
             Me!Trumpfkarte & ".png"

   If Not FileExists(strPfad) Then
      ' oder ein Dummy-Bild verwenden
      strPfad = vbNullString
      MsgBox "Sorry, das Spiel hat keine Trumpfkarte!"
   End If

   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, strPfad
   ' Hier ist es zu spät
   'If strPfad = Me.BilderPfad & _
    '   Me!txtVerzeichnisname & "_" & _
    '   Me!Trumpfkarte & "-.png" Then
   '   MsgBox "Sorry, das Spiel hat keine Trumpfkarte!"
   'End If
End Sub
Grüße von der (⌒▽⌒)

derilzemer

Hi,
ich habe es im aktuellen Formular untergebracht und es geht. Wenn ich die MSG-Box jedoch bestätige, kommt Laufzeitfehler 94: Unzulässige Verwendung von Null. Hab dazu folgendes gefunden, damit man wohl diesen Laufzeitfehler auch vermeiden kann.
Public Function FeldInhalt(Feld As Field) As Variant
  If IsNull(Feld.Value) Then
    If Feld.Type = dbInteger Or Feld.Type = dbLong Then
      FeldInhalt = 0
    ElseIf Feld.Type = dbBoolean Then
      FeldInhalt = False
    Else
      FeldInhalt = ""
    End If
  Else
    FeldInhalt = Feld.Value
  End If
End Function


Das müsste man wohl in den Functionteil mit reinpacken, oder? Aber ich werde nicht wirklich schlau daraus :-[. Kannst du mir dazu noch den Lösungsansatz geben?

Gruß aus der Pfalz und guten Rutsch
Andreas
Grüße und Dank im voraus
Andreas

Joss

Hallo Andreas,

ZitatWenn ich die MSG-Box jedoch bestätige, kommt Laufzeitfehler 94: Unzulässige Verwendung von Null.

Dazu müsste man deinen kompletten, aktuellen Code sehen. Die Funktion "FeldInhalt" wird dadurch vermutlich überflüssig.
Mit dem Code von Lachtaube kann der Fehler jedenfalls nicht auftreten.

Gruß
Josef

derilzemer

Moin und gutes Neues 2017 Joss,
hier mal der Code, welcher für das Feld hinterlegt ist:

Private Sub txtTrumpfkarte_DblClick(Cancel As Integer)
   Dim strPfad As String
       strPfad = Me!BilderPfad & _
                       Me!txtVerzeichnisname & "_" & _
                       Me!Trumpfkarte & ".png"
   
   If Not FileExists(strPfad) Then
      ' oder ein Dummy-Bild verwenden
      strPfad = vbNullString
      MsgBox "Sorry, das Spiel hat keine Trumpfkarte!"
   End If
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, strPfad
End Sub


Also der ursprüngliche Laufzeitfehler 2220 ist weg, bekomme also bei Feldinhalt - via Messagebox "Sorry, das Spiel hat keine Trumpfkarte!". Bestätige ich dann mit ok, dann kommt der neue Laufzeitfehler 94:  Unzulässige Verwendung von Null.

Gruß Andreas
Grüße und Dank im voraus
Andreas

MzKlMu

Hallo,
in welcher Zeile kommt der Fehler ?
Gruß Klaus

derilzemer

Hallo Klaus,
noch ein gutes Neues 2017.
Hmmm, wenn ich es richtig sehe, läuft der Code ja grundsätzlich sauber durch, da ich ja auch noch die MSG Box erhalte. Wie ich das mit den Haltepunkten mache muss um es genau herauszubekommen wo der Fehler zuschlägt weiß ich nicht :(. Aber wie gesagt, im Code komme ich ja mindestens bis zum End If ..... DoCmd.OpenForm muss er ja in dem Fall nicht machen, weil es nichts zu öffnen gibt. Wenn ich den Laufzeitfehler richtig werte, dann stört aber sicherlich an  strPfad = vbNullString, oder interpretiere ich das falsch?

Gruß Andreas
Grüße und Dank im voraus
Andreas

Joss

#7
Hallo Andreas,

kommentiere doch mal diese Zeile aus:
DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, strPfad

Der Fehler liegt aus meiner Sicht im Formular "frmDeckblatt" an der Stelle, wo die OpenArgs ausgewertet werden, d.h. beim Versuch, die Datei zu öffnen.

Und vielleicht magst du dich auch mal mit dem Thema "Haltepunkt und Debugging" beschäftigen? ;)

Gruß
Josef

MzKlMu

#8
Hallo,
wenn nichts gemacht werden muss, dann steige in der Schleife aus der Sub aus.
   If Not FileExists(strPfad) Then
      ' oder ein Dummy-Bild verwenden
      strPfad = vbNullString
      MsgBox "Sorry, das Spiel hat keine Trumpfkarte!"
      Exit Sub
   End If
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, strPfad
End Sub
Gruß Klaus

derilzemer

Zitat von: Joss am Januar 01, 2017, 14:14:30
kommentiere doch mal diese Zeile aus:
DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, strPfad
Der Fehler liegt aus meiner Sicht im Formular "frmDeckblatt" an der Stelle, wo die OpenArgs ausgewertet werden, d.h. beim Versuch, die Datei zu öffnen.
Und vielleicht magst du dich auch mal mit dem Thema "Haltepunkt und Debugging" beschäftigen? ;)
Gruß Josef

Hallo Josef,
mit Zeile auskommentieren ist der Fehler gefixt, danke. Und ja, wenn ich ehrlich bin, muss ich mich in der Tat mit sehr vielem in Access beschäftigen :(. Das bekomme ich zurecht auch immer wieder von anderen hier im Forum gesagt. Aber es fällt mir sehr schwer, das alles in Gänze zu verstehen, es ist alles sehr rudimentär geblieben was mein Accessverständnis angeht. Und das will ich jetzt nicht auf mein Alter schieben, sonst kommt der Klaus bei mir vorbeigefahren und haut mich wohl möglich noch.

Gruß Andreas
Grüße und Dank im voraus
Andreas

derilzemer

Hi,
jo, das war jetzt mal wieder ein Beispiel meines rudimentären Wissens. Auskommentieren lässt jetzt zwar den Fehler nicht mehr erscheinen, aber wenn dann ein ein Wert im Feld steht, wozu er DoCmd.OpenForm ausführen muss, geht das ja nicht mehr :). Das bedeutet ja, der Fehlergrund für LZF 94 ist identifiziert, aber ich muss das ja wohl umbauen was den DoCmd angeht, oder? Was soll ich sagen :(.
Gruß Andreas
Grüße und Dank im voraus
Andreas

MzKlMu

Hallo,
ZitatUnd das will ich jetzt nicht auf mein Alter schieben, sonst kommt der Klaus bei mir vorbeigefahren und haut mich wohl möglich noch.
weit hätte ich nicht zu fahren, aber Du hast ja noch mal die Kurve gekriegt.
Hast Du gelesen was ich in #8 geschrieben habe ? Es ist nur eine zusätzliche Zeile in der If Schleife.
Das auskommentieren nutzt ja nichts, Du brauchst ja den Befehl wenn geöffnet werden soll.

Auch von mir, allerseits einen guten Rutsch.
Gruß Klaus

derilzemer

#12
Hallo Klaus,
so einfach Exit Sub, das wars. Oh Mann. Also vergisst bitte mein Nachfragen zuletzt.

Gruß Andreas
Grüße und Dank im voraus
Andreas