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
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
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
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
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
Hallo,
in welcher Zeile kommt der Fehler ?
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
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
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
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
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
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.
Hallo Klaus,
so einfach Exit Sub, das wars. Oh Mann. Also vergisst bitte mein Nachfragen zuletzt.
Gruß Andreas