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 2447 beim Doppelklick

Begonnen von derilzemer, September 20, 2017, 15:51:50

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
ich wollte eine schon funktionale Routine in einem anderen Bereich anwenden und bekomme den Laufzeitfehler 2447
Ein .-(Punkt) oder !-Operator wird auf ungültige Weise verwendet, oder es liegt ein ungültiges Klammernpaar vor.
Das debuggen springt dann zur neuen Zeile im VBA Editor. Also was habe ich gemacht.
Ich habe ein Suchformular, in dem ich zu jedem Datensatz eine thumb anzeigen lasse. Jetzt wollte ich mit einem Doppelklick das thumb größer anzeigen lassen. Dies mache ich schon in einem anderen Formular so, wo dieser Ablauf auch funktioniert.
Die VBA Anweisung sieht so aus:
Private Sub imgDeckblattThumb_DblClick(Cancel As Integer)
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BildDateiName
End Sub

Der einzige Unterschied zum funktionierenden liegt im Namen und dass ich dort parent nutzen muss, weil es in einem Ufo ist
'Private Sub imgBild_DblClick(Cancel As Integer)
'    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Parent.BilderPfad & Me.BildDateiName
'End Sub


Kann mir da jemand sagen, welcher Operator dort nicht passen soll?? Danke für eventuelle Hilfe.

mfG
Andreas
Grüße und Dank im voraus
Andreas

Lachtaube

Es handelt sich wohl eher um einen Fehler im SQL-Abfragetext.
Grüße von der (⌒▽⌒)

derilzemer

Hi,
hmmm in der Tat, das Bild was aktuell angezeigt wird und vergrößert werden soll, hat als Steuerelementinhalt folgenden Eintrag:
=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]
Das bedeutet  im VBA muss der String anders zusammengesetzt werden :(. Okay, das weiss ich nicht, wie man das jetzt im VBA umsetzt. Da muss ich diesen Gimmick sein lassen.

Gruß Andreas

Grüße und Dank im voraus
Andreas

Beaker s.a.

Hallo Andreas,
ZitatDas bedeutet  im VBA muss der String anders zusammengesetzt werden
Nee, das bedeutet, das der genauso zusammengesetzt werden muss ( "\" ).
Hast du die Möglichkeiten von Debug.Print immer noch nicht erkannt?  ;)
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

derilzemer

Hi Ekkehard,
Zitat von: Beaker s.a. am September 20, 2017, 16:45:55
ZitatDas bedeutet  im VBA muss der String anders zusammengesetzt werden
Nee, das bedeutet, das der genauso zusammengesetzt werden muss ( "\" ).
Ja das hört sich doch für mich mal wieder einfach an.
Zitat von: Beaker s.a. am September 20, 2017, 16:45:55
Hast du die Möglichkeiten von Debug.Print immer noch nicht erkannt?  ;)
gruss ekkehard
Selbst wenn ich das jetzt mal in der aktuellen Konfiguration aktiviere, so komme ich gar nicht zur Ausgabe von debug.print. da ich ja schon vorher hänge bleibe weil er Me.BilderPfad nicht findet.
Private Sub imgDeckblattThumb_DblClick(Cancel As Integer)
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BildDateiName
      Debug.Print
End Sub


BilderPfad ist ja eine Feld in tblBildPfad. Auch mit Me.Parent.Bilderpfad komme ich da natürlich nicht hin. Sprich ich weiss nicht wie ich den Verweis auf die tblBildPfad.BilderPfad hinbekomme.

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

Lachtaube

Leg' Dir doch eine eigene Eigenbnschaft in der DB an, die anschließend wie jede andere Eigenschaft auch beschrieben und ausgelesen werden kann.
Option Compare Database
Option Explicit

'in einem allgemeinen Modul

' von Allen Browne
Function SetPropertyDAO(obj As Object, strPropertyName As String, intType As Integer, _
                        varValue As Variant, Optional strErrMsg As String) As Boolean
   On Error GoTo ErrHandler
   'Purpose:   Set a property for an object, creating if necessary.
   'Arguments: obj = the object whose property should be set.
   '           strPropertyName = the name of the property to set.
   '           intType = the type of property (needed for creating)
   '           varValue = the value to set this property to.
   '           strErrMsg = string to append any error message to.

   If HasProperty(obj, strPropertyName) Then
      obj.Properties(strPropertyName) = varValue
   Else
      obj.Properties.Append obj.CreateProperty(strPropertyName, intType, varValue)
   End If
   SetPropertyDAO = True

ExitHandler:
   Exit Function

ErrHandler:
   strErrMsg = strErrMsg & obj.Name & "." & strPropertyName & " not set to " & varValue & _
               ". Error " & Err.Number & " - " & Err.Description & vbCrLf
   Resume ExitHandler
End Function

Function HasProperty(obj As Object, strPropName As String) As Boolean
   'Purpose:   Return true if the object has the property.
   Dim varDummy As Variant

   On Error Resume Next
   varDummy = obj.Properties(strPropName)
   HasProperty = (Err.Number = 0)
End Function

Beispiel zur Nutzung im VBA-Direktbereich.'Test - Bilderpfad noch nie verwendet
'
?CurrentDb.Properties("Bilderpfad")
' Laufzeitfehler: 3270

'Eigenschaft anlegen und gleich bestücken
?SetPropertyDAO(CurrentDb, "Bilderpfad", dbText, "C:\MeineBilder\Karten\Deckblaetter\")
Wahr

'Jetzt benötigt man die Funktionen nicht mehr

?CurrentDb.Properties("Bilderpfad")
C:\MeineBilder\Karten\Deckblaetter\

'korrigieren
CurrentDb.Properties("Bilderpfad") = "D:\NeuerBildpfad\"

?CurrentDb.Properties("Bilderpfad")
D:\NeuerBildpfad\

Die Eigenschaft und ihr Wert bleibt natürlich auch nach dem Schließen der DB erhalten.
Grüße von der (⌒▽⌒)

derilzemer

Hallo Lachtaube,
ich habe mir mal das Allgemeine Modul angelegt (Name Allgemein_SetProperty), den oberen Teil eingefügt. Dann habe ich auch im VBA-DB das Ergebnis mit dem Laufzeitfehler erhalten. Soweit habe ich es verstanden, jedoch kann ich jetzt nicht wie in deinem Beispiel den kompletten Pfad einfügen, da die "Deckblätter" bzw Spiele ja von unterschiedlichen Verlagen strammen und somit der Verlag und auch das Spielverzeichnis wechseln können.
=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]
Der Bilderpfad ist in tblBildPfad, der Bilderordner in tblVerlag und der Verzeichnisname in tblSpiele als Feld definiert. Im Verzeichnis findet sich letztendlich der Bilddateiname. Das Problem ist wie gesagt, dass der Pfad mehr oder weniger dynamisch ist bzw. der Pfad sich ständig ändern kann. Das kann ich ja mit der SetProperty Variante so nicht fixen, oder sehe ich das falsch?

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

Lachtaube

Dann steht wohl in Verzeichnisname etwas, was da nict hingehört. Nur, woher bezieht Verzeichnisname seinen Wert?
Grüße von der (⌒▽⌒)

derilzemer

Hi,
Zitat von: Lachtaube am September 20, 2017, 20:14:06
Dann steht wohl in Verzeichnisname etwas, was da nicht hingehört. Nur, woher bezieht Verzeichnisname seinen Wert?
wie schon in #6 erwähnt,
Zitat=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]
Der Bilderpfad ist in tblBildPfad, der Bilderordner in tblVerlag und der Verzeichnisname in tblSpiele als Feld definiert. Im Verzeichnis findet sich letztendlich der Bilddateiname. Das Problem ist wie gesagt, dass der Pfad mehr oder weniger dynamisch ist bzw. der Pfad sich ständig ändern kann. Das kann ich ja mit der SetProperty Variante so nicht fixen, oder sehe ich das falsch?
Das verhält sich ja so. Der Bildpfad wird global festgelegt, ist also statisch. Das Verzeichnis eines Verlages ist dann schon dynamisch, wird in tblVerlag festgelegt. Ebenso ist es mit dem Verzeichnisname des Spieles, welches z.B. vom Verlag Ass kommt. Das wird dann in tblSpiele mit z.b 3200_1971 definiert, ist unique. Der Pfad setzte sich dann also so zusammen
W:\quartette\bilder\ass\3200_1971\ und wie erwähnt ab Ass dynamisch.

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

Lachtaube

Ja, das ist mir schon klar. Du solltest ergründen, woher das Steuerelement oder Feld Verzeichnisname seinen Inhalt bezieht. Ist da VBA involviert?
Grüße von der (⌒▽⌒)

derilzemer

Zitat von: Lachtaube am September 20, 2017, 20:50:09
....... Du solltest ergründen, woher das Steuerelement oder Feld Verzeichnisname seinen Inhalt bezieht. Ist da VBA involviert?
Für das Feld Verzeichnisname in tblSpiele gibt es keinen VBA. Ich schreibe da lediglich den Verzeichnisnamen des Spieles rein, wenn ich ein neues Spiel erfasse.

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

DF6GL

Hallo,

ohne weiter einzusteigen und wenn dies in einem (Haupt)Form funktioniert:



ZitatPrivate Sub imgDeckblattThumb_DblClick(Cancel As Integer)
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BildDateiName
End Sub

dann sollte es bei einem in diesem HFO liegenden UFO so lauten:

ZitatPrivate Sub imgBild_DblClick(Cancel As Integer)
    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Parent!BilderPfad & Me.Parent!BildDateiName
End Sub

Wobei in "Me.Parent!BilderPfad"  ein abschließender Backslash stehen muss.




derilzemer

Hi Franz,
Zitat von: DF6GL am September 21, 2017, 08:06:45
wenn dies in einem (Haupt)Form funktioniert:
ZitatPrivate Sub imgDeckblattThumb_DblClick(Cancel As Integer)
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BildDateiName
End Sub
dann sollte es bei einem in diesem HFO liegenden UFO so lauten:
ZitatPrivate Sub imgBild_DblClick(Cancel As Integer)
    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Parent!BilderPfad & Me.Parent!BildDateiName
End Sub
Wobei in "Me.Parent!BilderPfad"  ein abschließender Backslash stehen muss.
ich verstehe nicht wirklich, wieso das nicht geht :(. Ich will diese Funktion ja in der frmQuartettSuche. Das Thumb welches ich gerne mit Doppelklick größer darstellen will wird ja schon angezeigt :-\. Was genau bewirkt, dass es angezeigt wird?
In der Query für frmQuartettSuche sind alle erforderlichen Felder und Tabellen hinterlegt. Das Thumb wird über ein Bildelement dargestellt, welcher als Steuerelementinhalt diesen Eintrag hat:
=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName].
Meinem Verständnis nach, ist in dem String alles drin, was den Pfad angeht, sonst würde er ja das Thumb nicht anzeigen. Jetzt müsste doch auch meinem Verständnis nach über die Eigenschaften des Bildelement unter Ereignis mit Doppelklicken eine Ereignisprozedur hinterlegt werden können. Man muss dann wohl nur den Pfad anpassen, dachte ich ja auch.
Ich habe dann jetzt im VBA noch einmal umgestellt:
DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Verlag & Me.BilderOrdner & Me.BildDateiName
siehe da, er meckert Laufzeitfehler 2220, QuartettDB von Andreas Müller kann die Datei Berlinerberl6316737_1974_db.png nicht öffnen.
Berlinerberl6316737_1974_db.png = Berliner=Verlag | berl=BilderOrdner | 6316737_1974_db.png=BildDateiName.
Ergo ist er nah dran, ich muss noch die Backslashes mit reinmachen, aber wie :( Ich dachte einfach & "\" aber das geht nicht, auch nicht mit Asterix. Wie mache ich das?

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

Beaker s.a.

ZitatWie mache ich das?
Na, genauso wie beim DomWert, - oder nicht. -> siehe #3
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

das solltest Du aber jetzt wirklich interpretieren und abstellen können...

Offensichtlich fehlen die Backslashes...



Zitatich verstehe nicht wirklich, wieso das nicht geht :(. Ich will diese Funktion ja in der frmQuartettSuche. Das Thumb welches ich gerne mit Doppelklick größer darstellen will wird ja schon angezeigt :-\. Was genau bewirkt, dass es angezeigt wird?

Ich verstehe es so, dass das "Thumb" in einem Bild-Steuerelement angezeigt wird, dessen Steuerelement den (kompletten) Pfad-Dateinamen des Bildes zugewiesen erhalten hat.

Beim Öffnen des frmDeckblatt wird der (komplette) Bild-Pfaddateiname als Openargs-Parameter übergeben.   Im Open- oder Load-Ereignis des frmDeckblatt muss Code stehen, der das Openargs-Argument auswertet und damit den Bild-Pfaddateinamen dem Steuerelement-Inhalt eines Bild-St.-El. zuweist.  Alternativ kann der Dateiname auch der Picture-Eigenschaft des Buld-St. El. zugewiesen werden.


Mit diesen Infos und ein bisschen Debuggen (mit einem Haltepunkt und/oder der Ausgabe mit Debug.Print ins Direktfenster ) solltest Du das Ganze nun aber selber hinbekommen.