Wünsche allen einen schönen guten Abend,
ich habe folgendes Problem: in eine bestehende Datenbank ( Access 2007) soll der Nummernblock der Tastatur programmiert werden. Grund ist folgender.... Es soll in einem Formular ein Feld markiert werden, welches dann mit den entsprechenden Zahlen gefüllt werden soll. Leider habe ich von VBA noch keine Ahnung und ich habe nur einen kleinen Hinweis über Google gefunden: ( für die Taste 0 )
Private Sub bt_0_Click()
Dim zahl0 As Integer
zahl0 = 0
strEingabe = (strEingabe + CStr(zahl0))
Me.txtauswahl = strEingabe
End Sub
Da ich aber ein beliebiges Feld markieren will und nicht das Feld txtauswahl, komme ich irgendwie nicht weiter.
Kann hier jemand helfen?
Vielen Dank
Gruß
Hagen
Hallo,
ich verstehe nicht was Du da programmieren willst. Feld aktivieren (Cursor) und Nummernblock benutzen, fertig. Die Zahlen landen im Feld.
Hallo Klaus,
ich brauche auf einem 10" Display ( Tablet ) nur die numerische Tastatur zur Eingabe. Wenn ich die virtuelle Tastatur einblende, sehe ich keine Eingabefelder der Datenbank mehr auf dem Display. Hier will ich also im Programm den 10er Block ( Zahlenblock ) erfassen und über diesen die Eingabe tätigen. Ich brauche nur einen Hinweis, wie ich die Daten in ein ausgewähltes Feld eintragen kann. Ich kann auch gern bei Bedarf den Teil der Datenbank zuschicken.
Bin leider nicht so fit im Bereich VBA
Gruß
Hagen
Hallo,
Zitatich brauche auf einem 10" Display ( Tablet ) nur die numerische Tastatur zur Eingabe.
es wäre geschickt gewesen, wenn Du das gleich geschrieben hättest.
Willst Du nur reine Ganzzahlen eingeben, oder auch ein Komma ?
Im Anhang noch ein Beispiel für einen Ziffernblock den man auf einem Formular einblenden kann. Das Beispiel ist schon älter, was Du nicht brauchst kannst Du löschen.
Hallo Klaus,
genau sowas suche ich. Vielen Dank. Jetzt habe ich nur noch ein Problem. Ich habe mehrere Felder, in die dieses Daten aus dem Ziffernblock eingetragen werden sollen. Das heißt es gibt z.B. folgende Felder: txtAuswahl, txtAuswahl1, txtAuswahl2,.... Insgesamt sind das 20 Felder, in denen Daten eingegeben werden müssen.
Ich will also ein Feld auswählen und dann über den Zifferblock die Daten eingeben.
Kannst Du da auch helfen?
Vielen Dank
Hagen
Hallo Hagen,
Speichere BeimHingehen eine Referenz auf das Text-Control in einer "globalen Variablen".
gruss ekkehard
Hallo ekkehard,
vielen Dank für den Hinweis. Leider kann ich damit nicht wirklich was anfangen. Könntest Du mir vielleicht diese Geschichte noch etwas näher erläutern?
Gruß
Hagen
Hallo Hagen,
Gerne.
In ein allgemeines Modul schreibst du
Option Compare Database
Option Explicit
Private m_ctl As Access.Textbox
Public Property Set AktuellesFeld(ByVal ctl As Access.Textbox)
Set m_ctl = ctl
End Property
Public Property Get AktuellesFeld() As Access.Textbox
Set AktuellesFeld = m_ctl
End Property
Das geht auch einfacher, aber "richtige" globale Variablen sind mir ein Greuel.
In deinem Formular
Function SetAktuellesFeld()
AktuellesFeld = Me.ActiveControl
End Function
In der Entwurfsansicht des Formulars markierst du nun alle Textfelder,
die du mit deinem Nummerblock beschreiben willst, und schreibst beim
Ereignis "Beim Hingehen" (evtl. und/oder, oder auch besser "Bei Fokuserhalt",
musst du ausprobieren)
=SetAktuellesFeld
Von deinem Nummerblock aus greifst du dann einfach auf die Property zu.
AktuellesFeld.Value = Taste
'oder
AktuellesFeld.Value = AktuellesFeld.Value & Taste
(alles Luftcode, ungetestet)
gruss ekkehard
Hallo Hagen,
im Anhang findest du eine Variante die funktioniert, falls du es noch nicht hinbekommen hast. ;)
Gruß Dieter
Hallo,
kleine Nachbesserung.
Case 11 (Clear) funktioniert nicht, bitte Zeile noch ändern:
Case 11
Me(AktivesFeld) = Null
Schon jetzt mal an Alle hier ein herzliches Dankeschön. Leider kam ich noch nicht zum Testen, da ich das Wochenende unterwegs war. Ich werde mich aber heute intensiv damit beschäftigen und darüber berichten.
Allen einen guten Start in die neue Woche.
Gruß
Hagen
Hallo zusammen,
ich habe nun die Datei Ziffernblock1 getestet und übernommen. Es klappt wunderbar, bis auf das Komma. Ich vermute mal das es an den Feldeinstellungen liegen könnte. Aktuell habe ich als Einstellung in der Tabelle: Feldgröße Single und im Formular das Format: Allgemeine Zahl. Wenn ich hier über die normale Tastatur einen Wert mit Komma eingebe funktioniert es, bei der Eingabe über den "virtuellen" Zahlenblock tut sich leider nichts. Was muss ich noch ändern.
Sonst läuft alles so wie ich es mir vorstelle.
Vielen Dank für die Hilf
Gruß
Hagen
Hallo Hagen,
Vermutlich wirst du das Komma (,) zu einem Punkt (.) "umbiegen" müssen.
VBA spricht nur englisch, und erwartet amerikanische Formate.
gruss ekkehard
Hallo,
das umbiegen kannst Du direkt im Code für den Ziffernblock machen.
Case 14
Me(AktivesFeld) = Me(AktivesFeld) & "."
Die Beschriftung (das Komma) des Buttons kannst Du lassen, dann merkt der Anwender nichts.
Hallo nochmal,
das mit dem Punkt hatte ich schon vorab probiert und das klappt leider nicht. Ich gehe mal fest davon aus, dass etwas bei der Formatierung des Datenfeldes was nicht stimmt. Ich kann auch die DB mal schicken...ist nur knapp 3MB groß.... Irgendwie steh ich da total auf dem Schlauch.....
Gruß
Hagen
Hallo,
die Formatierung dürfte keine Rolle spielen.
Du kannst Die DB mal posten, aber ich benötige eine MDB.
Aber es gibt auch noch andere Helfer hier.
PS und nebenbei:
Single als Datentyp ist meist unbrauchbar. Das ist als Fließkommazahl zu ungenau. Nimm Double.
Hat jetzt aber mit dem Problem nichts zu tun, nur als Hinweis.
Hallo Klaus,
...ähm...wie kann ich denn hier eine Datei posten, die größer als 300 kb ist?....
Gruß
Hagen
Hallo,
gar nicht, dafür die DB evtl. datenreduzieren , komprimieren/reparieren und zippen.
Hallo zusammen,
hier dann also meine Datenbank - gespeichert als mdb für die 2000er Version.
Gruß
Hagen
Hallo,
Private Sub Tasten_Click()
On Error GoTo myerr
Static blnkomma As Boolean
Select Case Me.Tasten
Case 0 To 9
If blnkomma Then
If Len(Nz(Me(AktivesFeld), "")) < 12 Then
Me(AktivesFeld) = Me(AktivesFeld) & "," & Me.Tasten
End If
blnkomma = False
Else
If Len(Nz(Me(AktivesFeld), "")) < 12 Then
Me(AktivesFeld) = Me(AktivesFeld) & Me.Tasten
End If
End If
Case 10
If Len(Nz(Me(AktivesFeld), "")) > 0 Then
Me(AktivesFeld) = Left(Me(AktivesFeld), Len(Me(AktivesFeld)) - 1)
End If
Case 11
Me(AktivesFeld) = Null
Case 12
Me(AktivesFeld) = Me(AktivesFeld) * -1
Case 13
MsgBox "Enter gedrückt, eingegebener Wert: " & Me(AktivesFeld)
Case 14
blnkomma = True
End Select
Me.Tasten = Null
exit_Sub:
Exit Sub
myerr:
If Err = 2113 Then
blnkomma = False
Resume exit_Sub
Else
MsgBox Err.Number & ": " & Err.Description
Resume exit_Sub
End If
End Sub
Hallo DF6GL,
und an ALLE anderen Mitstreiter. Vielen Dank. Es funktioniert wunderbar. Großes Dankeschön
Gruß aus dem Erzgebirge
Hagen
Hallo,
oder noch besser so (wegen Eingabe von 0,01) , mit einem ungebundenen Textfeld (zwecks Anzeige der akt. Angabe oder lediglich einer String-Variablen.
Private Sub Tasten_Click()
On Error GoTo myerr
Static blnkomma As Boolean ', txtInput as String
Select Case Me.Tasten
Case 0 To 9
If blnkomma Then
Me!txtInput = Me!txtInput & "," & Me.Tasten
blnkomma = False
Else
If Len(Nz(Me!txtInput, "")) < 12 Then
Me!txtInput = Me!txtInput & Me.Tasten
End If
End If
Case 10
If Len(Nz(Me!txtInput, "")) > 0 Then
Me!txtInput = Left(Me!txtInput, Len(Me!txtInput) - 1)
End If
Case 11
Me!txtInput = Null
Case 12
Me!txtInput = Me!txtInput * -1
Case 13
MsgBox "Enter gedrückt, eingegebener Wert: " & Me!txtInput
Case 14
blnkomma = True
End Select
Me.Tasten = Null
Me(AktivesFeld) = Me!txtInput
exit_Sub:
Exit Sub
myerr:
If Err = 2113 Then
blnkomma = False
Resume exit_Sub
Else
MsgBox Err.Number & ": " & Err.Description
Resume exit_Sub
End If
End Sub
Hallo DF6GL,
die erste Variante sollte ausreichend sein, da ich nur die Viertelstunden ( 0,25 / 0,5/ 0,75 ) brauche. Es geht hier um Zeiterfassungen von Einzelteilen und da sollte die erste VBA vollkommen ausreichend sein. Der Bediener sieht zwar erst das Komma nach der Eingabe der folgenden Zahl, aber das ist kein Problem und kann so bleiben.
Vielen Dank für die schnelle Hilfe.
Gruß aus dem Erzgebirge
Hagen