Zum Inhalt springen

VBA: SendKeys(...)


Rolf007

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

:rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...