Rolf007 Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 Hallo zusammen, ich habe ein Problem mit der SendKeys(...) VBA Funktion in Zusammenhang eines Kombinationsfeldes. Das Kombinationsfeld ist so erstellt worden, das man zuerst ein ein "+" eingibt und dann einen Zahlenwert. Bei dem "+" klappt das Kombinationsfeld auf und man sieht alle Einträge die zur Auswahl stehen. Über einen Zahlenwert selektiert man dann letztendlich einen dieser Einträge. Das Funktioniert auch alles einwandfrei. Nur möchte ich nun von einem andern Formblatt aus mittels SendKeys einen Eintrag selektieren. Das Problem ist, wenn ich das Pluszeiczhen sende SendKeys("{+}", true) dann wird das Zeichen nur in das Kombinationsfeld geschrieben. Das Kombinationsfeld klappt nicht auf um den zweiten Zahlenwert entgegen zu nehmen. Kennt da jemand einen Trick ?? In meinen VBA Büchern habe ich leider nichts hilfreiches gefunden. :confused: Bin für jeden Tipp dankbar :hodata Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JayN Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 Zwei Fragen: 1.) Wird beim manuellen Eingeben das "+"-Zeichen in das Kombinationsfeld eingegeben oder einfach gedrückt? 2.) Welches Element hat bei der Sendkeys-Lösung den Fokus? Gruß JayN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rolf007 Geschrieben 10. Februar 2003 Autor Teilen Geschrieben 10. Februar 2003 Hallo JayN !!! Bei der manuellen Eingabe ist der Fokus auf das Kombinationsfeld gesetzt. Dann wird die "+" Taste gedrückt. Das "+" Zeichen wird jedoch nicht in das Kombinationsfeld geschrieben. Das "+" bewirkt nur das das Kombinationsfeld aufklappt. Bei der SendKeys( ) Variante ist der Focus ebenfalls auf das Kombinationsfeld gesetzt. Nur verhält es sich anders wenn ich das "+" Zeichen sende. Es klappt nicht auf, sondern zeigt mir das "+" Zeichen nur an. Schönen Gruss rolf007 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JayN Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 Kannst Du vielleicht den Code posten, wie das mit dem + programmiert ist? Es ist schwer zu helfen, wenn man die Anwendung nicht vor sich hat... JayN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rolf007 Geschrieben 10. Februar 2003 Autor Teilen Geschrieben 10. Februar 2003 Klar kann ich machen: mit der ersten funktion geht es los Public Sub cboZutateneingabe_KeyUp(KeyCode As Integer, Shift As Integer) Dim str As String, RNr As Integer ' Bestimmt welche Taste gedruckt wurde Select Case KeyCode 'Wenn "+" Taste, dann Aktion gleich 0 (später wird Addition durchgeführt) Case Is = vbKeyAdd g_Aktion = ZUTAT_HINZUFUEGEN Me.cboZutateneingabe.RowSource = "SELECT * FROM ZutatAdd WHERE BestellNr = '" & Me.com1_Bestellnummer & "'" ' Findet erlaubte zutaten für ausgewähle Speise If Me.cboZutateneingabe.text <> "" Then Call SpeichernAdd(Me.cboZutateneingabe.text) Me.cboZutateneingabe.text = 1 End If Me.Refresh Me!cboZutateneingabe.Dropdown Case Is = vbKeySubtract g_Aktion = ZUTAT_WEGNEHMEN Me!cboZutateneingabe.RowSource = "SELECT * FROM ZutatMinus WHERE PositionsNr = " & Me.PositionsNr If Me!cboZutateneingabe.text <> "" And Me!cboZutateneingabe.text <> "-" Then Call SpeichernMin(Left(Me.cboZutateneingabe.text, Len(Me.cboZutateneingabe.text) - 1)) End If Me.cboZutateneingabe.text = "" Me.cboZutateneingabe.Dropdown End Select End Sub Function SpeichernAdd(StrNr As String) Dim strNummer As String Dim Var As Variant Dim rs As Recordset strNummer = Left(StrNr, Len(StrNr) - 1) If strNummer = "" Then Exit Function Var = strNummer If Not GetZutatErlaubt(CStr(Var), Me!com_Bestellnummer) Then Exit Function Call CheckPositionExistance 'Zutatenposition in db anlegen, oder wenn negativ vorhanden dann löschen Set rs = CurrentDb.OpenRecordset("SELECT * FROM PositionZutaten WHERE PositionsNr = " & Me.PositionsNr & " AND ZutatenNr = " & strNummer & " AND PlusMinus='-'") If Not rs.EOF Then rs.Delete Else rs.AddNew rs!RechnungsNr = Forms!Kunden.Form!Rechnungen!RechnungsNr rs!PositionsNr = Me!PositionsNr rs!BestellNr = Me!com_Bestellnummer rs!ZutatenNr = strNummer rs!PlusMinus = "+" rs.Update End If rs.Close ' ungebundenes Preisfeld in Tabellenansicht neu berechnen Me!ZutatenPreis = GetZutatenPreis(Me!PositionsNr) Me!Zutatenliste = GetZutatenString(Me!PositionsNr, 2) End Function ' Sicherstellen, daß Position in DB Sub CheckPositionExistance() Dim rs2 As Recordset ' Scherstellen, das die Position bereits in DB! Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM Positionen WHERE PositionsNr=" & Me.PositionsNr) If rs2.EOF Then Call DoCmd.GoToRecord(, , acNext) Call DoCmd.GoToRecord(, , acPrevious) End If rs2.Close End Sub Function GetZutatErlaubt(ZutatenNr As Integer, SpeiseNr As String) As Boolean If Not CurrentDb.OpenRecordset("SELECT BestellNr FROM SpeisenZutaten WHERE BestellNr= '" & SpeiseNr & "' AND ZutatenNr = " & ZutatenNr).EOF Then GetZutatErlaubt = True Else GetZutatErlaubt = False End If End Function Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JayN Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 OK, schaue ich mir jetzt erstmal an.... Nur ein Tip der Übersichtlichkeit halber: Beim Posten von Code am besten immer den -Tag benutzen. Gruß JayN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rolf007 Geschrieben 10. Februar 2003 Autor Teilen Geschrieben 10. Februar 2003 ok, danke werde ich beim nächsten posting dran denken. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rolf007 Geschrieben 10. Februar 2003 Autor Teilen Geschrieben 10. Februar 2003 Bevor du dir den Kopf zerbrichst, bin ich auf den ersten Anhaltspunkt gestossen. Und zwar springt er erst gar nicht in den Case für das "+" Zeichen in der ersten Funktion: Case Is = vbKeyAdd Anscheinend erkennt er das "+" Zeichen das ich mit SendKeys() sende gar nicht als solches. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JayN Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 Und wenn Du es statt "vbKeyAdd" mit Asc("+") versuchst? Gruß JayN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rolf007 Geschrieben 10. Februar 2003 Autor Teilen Geschrieben 10. Februar 2003 jo, danke für den Tipp Wenn ich vbKeyAdd durch Asc("+") ersetze reagiert funktioniert die manuellen Eingabe auch nicht mehr. Dann verhält sich die manuellen Eingabe genau so wie die SendKeys Variante. Das Kombinationsfeld geht dann nicht mehr auf und die "+" Zeichen werden in das Feld geschrieben Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rolf007 Geschrieben 10. Februar 2003 Autor Teilen Geschrieben 10. Februar 2003 Ich bin zu einer neuen Erkenntnis gekommen. Hinter vbKeyAdd steckt der ASCI Code 107 und hinter Asc("+") steckt der ASCII Code 43 Kein Wunder das hier nichts klappt. Aber wie sende ich nun die 107 ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JayN Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 Und wenn Du es so umschreibst, dass bei der manuellen Eingabe die 43 benötigt wird? Gruß JayN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JayN Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 Laut meiner ASCII-Liste ist 107 ein kleines "k"... :confused: JayN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JayN Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 Die Access-Hilfe sagt mir dies: Konstante: vbKeyAdd Wert: 0x6B Beschreibung: PLUSZEICHEN-TASTE (+) JayN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rolf007 Geschrieben 10. Februar 2003 Autor Teilen Geschrieben 10. Februar 2003 Ja das stimmt, ich habe mit Chr(107) auch feststellen müssen dass es sich bei diesem ASCII Code um ein kleines "k" handelt. Aber wenn ich einen Breakpoint in der Funktion cboZutateneingabe_KeyUp einfüge, zeigt er mir an das die Konstante vbKeyAdd für eine 107 steht. Kann es sein das die Tasten auf dem Numpad einen zusätzlichen Wert voranschicken ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JayN Geschrieben 10. Februar 2003 Teilen Geschrieben 10. Februar 2003 Das 0x6B, das ich gepostet habe, ist der richtige Wert. 6B umgerechnet in dezimal ist 107. JayN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rolf007 Geschrieben 10. Februar 2003 Autor Teilen Geschrieben 10. Februar 2003 Ich hab jetzt mal ein "k" in dem Kombinationsfeld eingegeben. Wenn ich Debugge sehe ich das das "k" den ASCII Wert 75 hat. Obwohl mir die Asc("k") Funktion eine 107 zurückgibt. Kann es sein das VBA zwei verschiedene ASCII Codes benutzt ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.