Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Image
BildScreenshot zu Image Image-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

UF: Control mit nächsthöherem Tabindex auswählen | Herbers Excel-Forum


Betrifft: UF: Control mit nächsthöherem Tabindex auswählen von: JogyB
Geschrieben am: 15.10.2008 20:59:54

Hallo zusammen.

Die Frage steht ja schon oben: Wie kann ich das Control mit dem nächsthöheren Tabindex auswählen?

Hintergrund der Frage ist folgendes: In einem UserForm können mehrere Auftaggeber eingegeben werden. Meine Kollegen neigen nun dazu, in ein Feld mehrere Auftraggeber einzugeben und die z.B. mit / zu trennen. Ich will nun im KeyPress-Ereignis den / abfangen und direkt zum nächsten Auftraggeberfeld springen.

Das kann ich natürlich in jedem Eingabefeld einzeln erledigen und den Fokus auf das nächste Feld setzen, nur hätte ich dafür gern ein Klassenmodul und brauche daher eine allgemeine Fomulierung. Die Holzhammermethode wäre natürlich, einfach alle Controls durchzugehen bis dasjenige mit dem höheren Tabindex auftaucht, nur wäre mir da eine einfachere Lösung lieber.

Danke und Gruss,
Jogy

  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: Tino
Geschrieben am: 15.10.2008 21:06:14

Hallo,
kommst Du hermit zurecht und kannst es auf Deine Userform anpassen?

https://www.herber.de/forum/archiv/1012to1016/t1013893.htm#1013948


Gruß Tino


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: JogyB
Geschrieben am: 15.10.2008 21:20:09

Hallo Tino,

danke für die Antwort, aber das hilft mir leider nicht weiter.

Mein Problem ist nicht die Erstellung des Klassenmoduls, solche habe ich schon für das Projekt angelegt (zwar heute zum ersten Mal, aber so schwer ist das ja nicht ;)).

Was mir Schwierigkeiten bereitet ist rein das Setzen des Fokus auf das Element mit dem nächsthöheren Tabindex, das ich in allgemeingültiger Form brauche, damit ich es ins Klassenmodul packen kann.

Gruss, Jogy


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: Tino
Geschrieben am: 15.10.2008 21:59:28

Hallo,
was hältst Du davon?

Dialog UserForm1

Option Explicit 
 
Private Sub UserForm_Initialize() 
    Dim CoCb As Control 
    Dim InI As Integer 
    Redim Preserve COption(UserForm1.Controls.Count) 
     
    For Each CoCb In Me.Controls 
        
        Select Case TypeName(CoCb) 
        Case "TextBox" 'TextBox 
            Set COption(InI).objText = CoCb 
            InI = InI + 1 
        End Select 
    Next CoCb 
  
End Sub 
  
Private Sub UserForm_Terminate() 
Erase COption 
End Sub 
 

Modul Modul1

Option Explicit 
Public COption() As New Klasse1 

Klassenmodul Klasse1

Option Explicit 
Public WithEvents objText As MSForms.TextBox 
 
Private Sub objText_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
 If KeyCode = 55 Then 
  objText = Left$(objText, Len(objText) - 1) 
  Application.SendKeys "{TAB}", True 
 End If 
End Sub 
 
 



Gruß Tino


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: JogyB
Geschrieben am: 15.10.2008 22:14:53

Hi.

Sendkeys wäre eine Möglichkeit, nur traue ich dem Befehl nicht wirklich. Ich habe ein paar Makros die den verwenden und da kommt es auch durchaus mal vor, dass der Befehl nicht ankommt - und das absolut nicht reproduzierbar. Hatte das einmal, dass es beim ersten Test funktioniert hat, danach trotz mehrerer Neustarts nicht mehr, ein paar Tage später ging es plötzlich wieder. Andere Sendkeys Befehle in anderen Makros haben dagegen die ganz Zeit funktioniert.... alles sehr seltsam.

Von daher ist mir das zu unsicher, das wird von an die 100 Leuten genutzt und da muss das zuverlässig funktionieren. Da treibe ich lieber den Aufwand, eine Select-Anweisung zu basteln, die den Fokus dann direkt auf die richtige Textbox setzt.

Ich lasse die Frage mal offen, vielleicht hat ja noch jemand eine Idee.

Gruss, Jogy

P.S.: Wieso verwendest Du eigentlich einen Array von Klassen und keine Collection?


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: Tino
Geschrieben am: 15.10.2008 22:28:11

Hallo,
ich sehe da weniger Probleme,
da der Focus in der Textbox sein muss, sonst wird dass Event ja nicht ausgelöst.

Ich lass die Frage offen.

Gruß Tino


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: Tino
Geschrieben am: 15.10.2008 23:14:36

Hallo,
andersrum gefragt, wo liegen die vorteile in einer Collection dieser Objekte?

Gruß Tino


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: Tino
Geschrieben am: 16.10.2008 07:45:07

Hallo,
im Bett ist mir eingefallen, dass das KeyPress Ereignis besser geeignet ist.

Klassenmodul Klasse1

Option Explicit 
Public WithEvents objText As MSForms.TextBox 
 
Private Sub objText_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
 If KeyAscii = 47 Then 
  KeyAscii = 0 
  Application.SendKeys "{TAB}", True 
 End If 
End Sub 




Gruß Tino


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: JogyB
Geschrieben am: 16.10.2008 08:38:06

Hi.

Klar, muss natürlich in KeyPress, dort habe ich die Prüfung für das erste Textfeld auch drin. Nur ändert das auch nichts daran, dass man sich auf Sendkeys nicht verlassen kann - und solange ich eine andere sichere (wenn vielleicht auch deutlich aufwendigere) Methode habe, dann vermeide ich das lieber.

Gruss, Jogy


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: JogyB
Geschrieben am: 16.10.2008 08:35:46

Naja, Vorteile hat es eigentlich keine großen, außer dass man sich keine Sorgen um die Dimensionierung des Array machen muss und einzelne Objekte auch mal schnell rausnehmen kann.

Ist jetzt etwas subjektiv, aber irgendwie gefällt mir die Methode besser ;).

Gruss, Jogy


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: Daniel
Geschrieben am: 16.10.2008 00:48:57

HI
das würde ich dann so lösen:
- für die Eingabe der Auftraggeber nur eine Textbox vorsehen und die anderen löschen
- als Hinweis oben drüber schreiben: mehrere Auftraggeber mit "/" trennen.

über die SPLIT-Funktion kannst du dann den eingegebenen String einfach in die einzelnen Auftraggeber aufteilen, falls das benötigt wird.

Wenn deine Kollegen lieber so arbeiten, dann kannst du daß doch in deine Anwendung übernehmen.
auch für dich wird das einfacher, da du nur noch eine Textbox zu handeln hast und nicht mehrere.

Gruß, Daniel


  

Betrifft: AW: UF: Control mit nächsthöherem Tabindex auswählen von: JogyB
Geschrieben am: 16.10.2008 09:01:57

Hi.

Das war zu Beginn auch mal eine Überlegung, die habe ich aber aus drei Gründen verworfen.

1. Im alten (Word-)Formular gab es auch schon mehrere Felder für die Auftraggeber und ich wollte die Optik ähnlich halten

2. Ich müßte mich darauf verlassen, dass die Nutzer das richtig machen - und das kann ich definitiv nicht. Das könnte ich in 20 Punkt blinkend darüberschreiben und es gäbe immer noch Leute, die es anders machen. D.h. ich brauche wieder eine aufwendige Überprüfung der Eingabe und die wird mit ziemlicher Sicherheit nicht alles abfangen, was den Leuten so einfällt (if you make something foolproof, someone will invent a better fool).
Bei mehreren Auftraggebern pro Feld rechne ich einfach mit mehr Kreativität von Seiten der Nutzer als bei nur einem pro Feld (wobei ich da aber sicherlich auch nicht alle Fehleingaben erwischen werde).

3. Hatte ich eingangs falsch erwähnt, das ist keine Textbox sondern eine Combobox, bei der die DropDown Liste abgeschaltet ist (hatte da nicht mehr dran gedacht, da ich an der Stelle schon länger nichts mehr geändert habe und die ja wie eine Textbox aussieht). Wenn diese für nur einen Namen verwendet wird, dann kann ich die häufigsten Namen in die Combobox eintragen und damit ein Autovervollständigen anbieten.

Und es ist auch nicht so, dass die Leute lieber so arbeiten, bei den meisten klappt das ja (wie oben erwähnt, war auf dem alten Formular ja auch so). Das ist nur eine Handvoll, die das trotz Hinweisen immer wieder mal macht, dazu kommen dann noch die Leute, die nur ein Mal im Jahr einen Auftrag schreiben - und ich will eben nicht jeden Auftrag noch von Hand überprüfen.

Gruss, Jogy


Beiträge aus den Excel-Beispielen zum Thema "UF: Control mit nächsthöherem Tabindex auswäh"