Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA User Form Tastatur bauen

VBA User Form Tastatur bauen
19.11.2020 09:22:24
Excelaner
Hi Leute,
ich habe hier schon erfahren, wie man die Bildschirmtastatur über VBA aktivieren kann.
Leider sind die Buchstaben darauf ziemlich klein, diese kann man auch nicht vergrößern. Und man kann hier auch die Windows-Taste usw. drücken, möchte ich auch nicht.
Ich habe zwar gelesen, dass manche ihre eigene Tastatur über ein Userform gebaut haben, leider habe ich gar keine Ahnung wie das gehen soll.
Es sind drei Textboxen die befüllt werden müssen, das heißt, je nachdem welche Textbox ich auswähle sollte die Tastatur sich automatisch öffnen und nur Buchstaben und Zahlen zur Verfügung stehen. Das was getippt wird, sollte dann nur in dem ausgewählten Textbox ersichtlich sein.
Hat jemand eine Idee?
Danke euch schmal im Voraus!
Anzeige

31
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA User Form Tastatur bauen
19.11.2020 10:28:36
Nepumuk
Hallo Excelaner,
bau bitte das Userform mit der Tastatur (nur du weißt wie sie aussehen soll) und lade sie hoch. Den Rest baue ich dir dann ein.
Gruß
Nepumuk
AW: VBA User Form Tastatur bauen
19.11.2020 15:47:10
Excelaner
Hi Nepumuk,
du schon wieder :) Danke dir!
Das heißt, du brauchst nur ein Userform von mir, aufgebaut als Tastatur? Oder die komplette Datei mit den anderen Textboxen?
Anzeige
AW: VBA User Form Tastatur bauen
19.11.2020 15:49:15
Nepumuk
Hallo Excelaner,
nein, nur die Tastatur.
Gruß
Nepumuk
AW: VBA User Form Tastatur bauen
19.11.2020 22:32:06
Excelaner
Hi Nepumuk,
ich habe mich am Beispiel von Daniel orientiert und die Tastatur als Vorlage genommen.
Layout kann ich ja jederzeit noch anpassen. Wichtig ist für mich nur, dass die Tastatur für unterschiedliche Textboxen verwendet werden kann, je nachdem welche Box man auswählt.
Danke dir im Voraus!!
https://www.herber.de/bbs/user/141719.xlsm
Anzeige
AW: VBA User Form Tastatur bauen
22.11.2020 13:04:18
Nepumuk
Hallo Excelaner,
ich habe noch einige Reste vorheriger Versuche entfernt.
https://www.herber.de/bbs/user/141763.xlsm
Gruß
Nepumuk
Anzeige
AW: VBA User Form Tastatur bauen
22.11.2020 16:03:33
Excelaner
Hi Nepumuk,
du bist einfach der Herr der Tastaturen :)
Vielen Dank!! Ist natürlich so schnell und einfach zu schreiben wie die "original" Bildschirmtastatur von Microfost, aber das habe ich auch nicht erwartet.
Nur eine Frage, ist die Eingabe auch in Containerboxen möglich?
VIELEN DANK NOCHMALS!!
Anzeige
AW: VBA User Form Tastatur bauen
22.11.2020 16:13:01
Nepumuk
Hallo Excelaner,
was soll ich mir unter "Containerboxen" vorstellen?
Gruß
Nepumuk
AW: VBA User Form Tastatur bauen
22.11.2020 16:50:35
Excelaner
Hi Nepumuk,
nennt man die nicht Containerboxen? :)
Die sind doch ähnlich wie Textbox nur mit einer Dropdown-Liste Funktion, wo man entweder etwas reinschreiben kann oder aus der Liste etwas auswählen kann.
Geht das auch mit dene?
Anzeige
AW: VBA User Form Tastatur bauen
22.11.2020 16:57:50
Nepumuk
Hallo Excelaner,
du meinst eine ComboBox. Ja das geht.
Gruß
Nepumuk
AW: VBA User Form Tastatur bauen
23.11.2020 13:22:47
Excelaner
Hi Nepumuk,
und was müsste ich dafür anpassen?
AW: VBA User Form Tastatur bauen
23.11.2020 14:05:27
Nepumuk
Hallo Excelaner,
Das Activate-Event des UserForms, sowie die CommandButton-Klasse und die TextBox-Klasse.
Gruß
Nepumuk
Anzeige
AW: VBA User Form Tastatur bauen
19.11.2020 10:28:49
Daniel
Hi
die Tastatur kann sich im unteren Bereich befinden.
Ob die Tastatur sichtbar ist, regelst du über die Höhe der Userform (Userform1.Height), indem du dieses zuerst so setzt, dass der Wert kleiner ist als die obere Top-Position der Tastatur, und wenn sie sichtbar sein soll, größer als die unteres Top-Postion + Höhe der Taste.
wie du die Tastatur gestaltest, hast du auch mehrere Möglichkeiten.
a) du kannst für jede Taste einen Button anlegen und in dessen Klick-Event den jeweiligen Buchstaben (die Caption der Userfom) in die zuletzt angewählte TextBox schreiben
damit du nicht für jeden Button ein Klick-Event-Makro erstellen musst, solltest du dich mit Klassenprogremmierung beschäftigen
b) du erstellst die gesamte Tastatur als eine Grafik und bindest diese in deine Userform ein.
über das MOUSEUP oder MOUSEDOWN-Event der Grafik kannst du die KLlick-Position über der Grafik bestimmen (X und Y) und daraus ermitteln, (z.B. über eine Tabelle) wo der Klick stattgefunden hat und welche Taste gemeint war.
Dabei ist es hilfreich, wenn die Tasten alle gleich groß und regelmäßig angeordnet sind.
Gruß Daniel
Anzeige
AW: VBA User Form Tastatur bauen
19.11.2020 10:55:56
Nepumuk
Hallo Daniel,
das Bild einer Tastatur halt ich für nicht handelbar. Alleine für 10 Nummerntasten brauchst du 40 hart kodierte Koordinaten.
Gruß
Nepumuk
AW: VBA User Form Tastatur bauen
19.11.2020 11:18:02
Daniel
je nach dem.
wenn die Tasten gleich groß sind regelmäßig angeordnet sind (Schokoladentafel), kann man auch einfach rechnen.
bei einer Telefontastatur (4x3) beispielsweise so
Int(X/Tastenbreite)+Int(Y/Tastenbreite)*3 ergibt je nach Klickposition eine Zahl von 0-11, dh du musst dann nur jedem auszugebenden Wert eine Zahl von 0-11 zuordnen, das geht dann relativ einfach über ein Array oder eine Exceltabelle.
dh mit einzelnen Koordinaten muss man sich - Regelmäßigkeit vorausgesetzt - nicht rumplagen.
anders siehts natürlich aus, wenn die Tastatur unregelmäßig sein sollen und nicht ins Schokoladentafelraster passen.
Allerdings, wenn man (so wie ich) die Klassenprogrammierung nicht kapiert, dann muss man sich halt was anderes Einfallen lassen, wenn man nicht für jede Taste ein Klick-Event-Makro schreiben will.
Gruß Daniel
Anzeige
AW: VBA User Form Tastatur bauen
19.11.2020 11:29:14
Nepumuk
Hallo Daniel,
dann musst du noch berücksichtigen ob der Benutzer als Auflösung 100%, 125% oder 150% gewählt hat. Es ist viel einfacher CommandButtons zu verwenden.
Gruß
Nepumuk
AW: VBA User Form Tastatur bauen
19.11.2020 11:58:40
Daniel
Wenn man fleißig ist, ja.
AW: Die Faulen....
19.11.2020 18:20:10
Daniel
hast du das mit der Anleitung zum Laufen gebracht?
hier mal ein Beispiel für eine individuell gestaltbare Tastatur mit minimalem Codeaufwand ohne Klassenprogrammierung.
von der Tastatur in Excel muss man einen Screenshot machen (möglichst genau ausschneiden) und ins Imagecontrol einfügen.
Gruß Daniel
Anzeige
Userform-Tastatur mit minimalem Aufwand
19.11.2020 19:07:58
Daniel
und minimalem notwendigen Wissen
sorry jetzt mit Datei
https://www.herber.de/bbs/user/141715.xlsm
Es wäre auch denkbar, das Bild per Buttons zu vergrößern oder zu verkleinern um es an die Bildschirmauflösung und den eigenen Bedarf anzupassen, die Zuordnung von Klickpunkt zu Taste sollte auch dann gegeben sein.
Gruß Daniel
Anzeige
AW: Die Faulen....
19.11.2020 19:22:11
Mullit
Hallo Daniel,
ja, easy, aber eigentl. braucht ich gar nix zum Laufen bringen ;-), einfach die letzte Bsp.-Datei runtergeladen, geöffnet und dann schwebt sie einem schon entgegen...;-)
Userbild
Gruß, Mullit
Anzeige
AW: Die Faulen....
19.11.2020 19:46:34
Daniel
ich dachte eigentlich, du meinst den ersten Beitrag des Codes.
Warum ausgerechnet die letzte beispieldatei?
ja klar, fertige Sachen kopieren ist immer einfach.
verstehst du den Code dahinter und kannst das selber programmieren wenn du es nicht irgendwo runterladen könntest?
könntest du mir erklären, wie das funktioniert bzw, wie lange bräuchtest du dazu?
Gruß Daniel
Anzeige
AW: Ja, kann ich alles....
19.11.2020 20:38:47
Mullit
...und noch viel mehr, aber nu dreh mal nich am Rad, ich hab hier nur spaßeshalber einen Bsp-Link eingestellt, gerade weil es einfach ist, freut sich der TO...kann schließlich jeder mit rumbasteln wie er lustig ist, ah ja, die letzte Datei natürlich, weil es die letzte Entw.-Version ist, sollte klar sein und steht ja im Thread...;-)
Gruß, Mullit
Anzeige
AW: Ja, kann ich alles....
19.11.2020 21:19:09
Daniel
ok fangen wir mal oben an:
was bedeutet das, warum muss man das programmieren und woher weiß man, was man da tun muss?
Private Declare PtrSafe Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd  _
As Long, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd  _
As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare PtrSafe Function SetWindowPos Lib "User32" (ByVal hwnd As Long, ByVal  _
hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName  _
As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function GetActiveWindow Lib "user32.dll" () As Long
Private Declare PtrSafe Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As  _
Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare PtrSafe Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
klar ,solange man das irgenwo kopieren kann, ist alles easy, aber man will ja auch verstehen, was man da macht.
Anzeige
AW: Sorry Daniel, aber....
19.11.2020 21:59:40
Mullit
...für Api-Nachhilfe isses mir heut zu spät, aber klick mal auf den Min-Button der Form, dann siehst Du den Effekt der Funktionen, Du kannst ja mal als erste Übungseinheit versuchen, die LongPtr Deklarationen für den 64-bit Part zu ergänzen, die fehlt nämlich noch...Nebenbei, die Erklärung steht auch in den Kommentaren im Code, mußt halt lesen...;-)
Private Sub UserForm_Activate()
AddIcon    'Add an icon on the titlebar
AddMinimiseButton   'Add a Minimize button to Userform
AppTasklist Me    'Add this userform into the Task bar
End Sub

Gruß, Mullit
Anzeige
AW: Sorry Mullit aber "API" was ist das?
19.11.2020 22:03:55
Daniel
Ich hab da keine Ahnung von, das müsstest du mir schon genauer erklären.
Danke für deine Bemühungen.
Gruß Daniel
AW: ...danichfür...Gruß, Mullit owT
19.11.2020 22:09:29
Mullit
AW: ...danichfür...Gruß, Mullit owT
19.11.2020 23:03:31
Daniel
OK, dann erklärst du mir (und allen anderen Mitlesern) das ohne dass ich mich dafür bedanken muss?
Anzeige
Ts, ts, ts, oft hier genannt u.gezeigt, ...
20.11.2020 02:21:19
Luc:?
…Daniel;
lies wenigstens selbst, wenn du schon nicht googeln willst…
https://de.wikipedia.org/wiki/Programmierschnittstelle
Mit Declare macht man die API-Fktt des BS/OS (Windows) bzw ggf auch anderer Software mit dgl nutzbar.
Morhn, Luc :-?
Anzeige
AW: Ts, ts, ts, oft hier genannt u.gezeigt, ...
20.11.2020 10:27:25
Daniel
wie hoch schätzt du den Zeitaufwand ein, den man aufwenden muss wenn man von API keine Ahnung hat, bis man brauch um sowas selber programmieren zu können?
ist sowas wirklich "einfach", wenn man kein ausgebildeter Programmierer ist sondern Laie und Autodikakt (also die Menschen, die hier fragen?)
Anzeige
Die Herren, die so etwas zeigen, ...
21.11.2020 04:14:47
Luc:?
…Daniel,
bieten idR FertigLösungen an, weil sie das können. Ich wollte meine Pgmm bisher nicht zusätzlich von so etwas abhängig machen, obwohl damit sicher interessante Möglichkeiten gegeben sind, die allerdings wohl mehr auf eher technisch-gestalterischem Gebiet liegen. Normale VBA-Möglichkeiten (mit wenigen Ergänzungen) reichen mir völlig, denn ob das, was man auf Fktsgebiet nicht vollständig mit VBA nachgestalten kann, mit API-Nutzung gelingen würde, ist doch sehr fraglich. Insofern hatte mich das auch nicht sonderlich interessiert, aber deshalb weiß ich doch, worum's hierbei geht und muss mich nicht ahnungslos stellen.
Was das Erlernen betrifft, dürfte das auch nicht schwerer sein als VBA generell. Es geht ja in 1.Linie darum, wie man Fktt aus einer solchen Bibliothek nutzbar macht, also eine Art Pendant zu Include-Anweisungen anderer Sprachen, nur etwas aufwendiger.
Morhn, Luc :-?
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Eigene VBA Tastatur für Excel Userform erstellen


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen. Füge ein neues Userform hinzu, indem du mit der rechten Maustaste auf „VBAProject (DeinProjektname)“ klickst und „UserForm einfügen“ wählst.

  2. Tastaturlayout designen: Platziere CommandButtons auf der Userform, um die Tasten deiner eigenen Tastatur zu erstellen. Benenne die Buttons nach den Buchstaben und Zahlen, die sie repräsentieren.

  3. Code für die Buttons hinzufügen: Doppelklicke auf einen Button und füge den folgenden Code ein, um den Text in die aktive TextBox zu schreiben:

    Private Sub CommandButton1_Click() ' Beispiel für einen Button mit Buchstabe A
        ActiveControl.Value = ActiveControl.Value & "A"
    End Sub
  4. Dropdown mit Tastatur öffnen: Wenn du eine ComboBox verwendest, kannst du den Code so anpassen, dass die Tastatur öffnet, wenn die ComboBox aktiv ist. Beispiel:

    Private Sub ComboBox1_GotFocus()
        ' Code um die Tastatur zu aktivieren
    End Sub
  5. Testen der Tastatur: Stelle sicher, dass die Tastatur funktioniert, indem du das Userform im VBA-Editor startest (F5 drücken).


Häufige Fehler und Lösungen

  • Button funktioniert nicht: Überprüfe, ob der Button korrekt benannt ist und der Code in der richtigen Subroutine steht.

  • TextBox bleibt leer: Stelle sicher, dass die richtige TextBox aktiv ist, bevor du eine Taste drückst.

  • Tastatur öffnet sich nicht: Vergewissere dich, dass der Code zum Öffnen der Tastatur korrekt ist und dass das Userform aktiv ist.


Alternative Methoden

  • Folientastatur nachbauen: Statt Buttons zu verwenden, kannst du auch ein Bild einer Tastatur in die Userform einfügen und die Klickpositionen auswerten, um die Eingabe zu steuern.

  • Shortcut zur Bildschirmtastatur: Anstatt eine eigene Tastatur zu erstellen, kannst du die Windows-Bildschirmtastatur als Shortcut verwenden. Dies kann einfach über eine Schaltfläche im Userform geschehen:

    Shell "osk", vbNormalFocus

Praktische Beispiele

  • Kassentastatur programmieren: Erstelle eine Tastatur für Kassenanwendungen, die nur Zahlen und spezielle Zeichen erlaubt. Füge CommandButtons für die Zahlen 0-9 und für Aktionen wie „Löschen“ oder „Bestätigen“ hinzu.

  • Dropdown mit Tastatur öffnen: Implementiere eine Tastatur, die sich automatisch öffnet, wenn eine ComboBox ausgewählt wird. Hierbei wird die Funktionalität einer Dropdown-Liste mit der Tastatur kombiniert.


Tipps für Profis

  • Tastatur selber bauen: Überlege, wie du die Tastatur modularer gestalten kannst. Zum Beispiel könntest du die Tastatur für verschiedene Anwendungen anpassen, indem du die Größe der Buttons dynamisch änderst.

  • Tastatur umprogrammieren: Nutze die Flexibilität von VBA, um die Tastatur für verschiedene Eingabemöglichkeiten anzupassen. Denke daran, die Regelmäßigkeit der Tastenanordnung zu beachten, um die Entwicklung zu erleichtern.

  • Tastatur Vorlage ausdrucken: Erstelle eine Vorlage deiner Tastatur, die du ausdrucken kannst, um sie als Referenz zu verwenden.


FAQ: Häufige Fragen

1. Kann ich die Tastatur auch für ComboBoxen nutzen?
Ja, die Tastatur kann auch für ComboBoxen verwendet werden, indem du den entsprechenden Code anpasst, um den Text in die ComboBox einzufügen.

2. Wie kann ich die Tastatur anpassen?
Du kannst die Größe der Buttons und die Anordnung ändern, um das Layout an deine Bedürfnisse anzupassen. Zudem kannst du die Farben und Schriftarten anpassen, um die Benutzeroberfläche zu verbessern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige