Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

VBA-Hilfe bei Nummernblock

Begonnen von HaNe, März 30, 2017, 19:49:55

⏪ vorheriges - nächstes ⏩

HaNe

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

MzKlMu

Hallo,
ich verstehe nicht was Du da programmieren willst. Feld aktivieren (Cursor) und Nummernblock benutzen, fertig. Die Zahlen landen im Feld.
Gruß Klaus

HaNe

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

MzKlMu

#3
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.
Gruß Klaus

HaNe

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

Beaker s.a.

Hallo Hagen,
Speichere BeimHingehen eine Referenz auf das Text-Control in einer "globalen Variablen".
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)

HaNe

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

Beaker s.a.

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
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)

dedidado

Hallo Hagen,
im Anhang findest du eine Variante die funktioniert, falls du es noch nicht hinbekommen hast.  ;)
Gruß Dieter

MzKlMu

Hallo,
kleine Nachbesserung.
Case 11 (Clear) funktioniert nicht, bitte Zeile noch ändern:
Case 11
   Me(AktivesFeld) = Null
Gruß Klaus

HaNe

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

HaNe

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

Beaker s.a.

Hallo Hagen,
Vermutlich wirst du das Komma (,) zu einem Punkt (.) "umbiegen" müssen.
VBA spricht nur englisch, und erwartet amerikanische Formate.
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)

MzKlMu

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.
Gruß Klaus

HaNe

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