Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: HaNe am März 30, 2017, 19:49:55

Titel: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am März 30, 2017, 19:49:55
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: MzKlMu am März 30, 2017, 19:59:25
Hallo,
ich verstehe nicht was Du da programmieren willst. Feld aktivieren (Cursor) und Nummernblock benutzen, fertig. Die Zahlen landen im Feld.
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am März 31, 2017, 08:33:06
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: MzKlMu am März 31, 2017, 08:58:02
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.
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am März 31, 2017, 10:20:50
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: Beaker s.a. am März 31, 2017, 13:23:46
Hallo Hagen,
Speichere BeimHingehen eine Referenz auf das Text-Control in einer "globalen Variablen".
gruss ekkehard
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am März 31, 2017, 13:37:27
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: Beaker s.a. am März 31, 2017, 18:40:09
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: dedidado am April 01, 2017, 09:24:05
Hallo Hagen,
im Anhang findest du eine Variante die funktioniert, falls du es noch nicht hinbekommen hast.  ;)
Gruß Dieter
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: MzKlMu am April 01, 2017, 09:44:38
Hallo,
kleine Nachbesserung.
Case 11 (Clear) funktioniert nicht, bitte Zeile noch ändern:
Case 11
   Me(AktivesFeld) = Null
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am April 03, 2017, 08:27:33
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am April 03, 2017, 11:18:26
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: Beaker s.a. am April 03, 2017, 11:34:18
Hallo Hagen,
Vermutlich wirst du das Komma (,) zu einem Punkt (.) "umbiegen" müssen.
VBA spricht nur englisch, und erwartet amerikanische Formate.
gruss ekkehard
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: MzKlMu am April 03, 2017, 11:42:28
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.
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am April 03, 2017, 11:54:34
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: MzKlMu am April 03, 2017, 11:59:36
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.
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am April 03, 2017, 12:55:35
Hallo Klaus,

...ähm...wie kann ich denn hier eine Datei posten, die größer als 300 kb ist?....

Gruß
Hagen
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: DF6GL am April 03, 2017, 12:58:33
Hallo,


gar nicht, dafür die DB evtl. datenreduzieren , komprimieren/reparieren und zippen.
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am April 03, 2017, 13:04:52
Hallo zusammen,

hier dann also meine Datenbank - gespeichert als mdb für die 2000er Version.

Gruß
Hagen
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: DF6GL am April 03, 2017, 13:54:34
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am April 03, 2017, 14:17:02
Hallo DF6GL,

und an ALLE anderen Mitstreiter. Vielen Dank. Es funktioniert wunderbar. Großes Dankeschön

Gruß aus dem Erzgebirge
Hagen
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: DF6GL am April 03, 2017, 14:18:18
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
Titel: Re: VBA-Hilfe bei Nummernblock
Beitrag von: HaNe am April 03, 2017, 14:51:51
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