Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1016to1020
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

UF: Control mit nächsthöherem Tabindex auswählen

UF: Control mit nächsthöherem Tabindex auswählen
15.10.2008 20:59:00
JogyB
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

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UF: Control mit nächsthöherem Tabindex auswählen
15.10.2008 21:20:09
JogyB
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
Anzeige
AW: UF: Control mit nächsthöherem Tabindex auswählen
15.10.2008 21:59:00
Tino
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

Anzeige
AW: UF: Control mit nächsthöherem Tabindex auswählen
15.10.2008 22:14:00
JogyB
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?
Anzeige
AW: UF: Control mit nächsthöherem Tabindex auswählen
15.10.2008 22:28:11
Tino
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
AW: UF: Control mit nächsthöherem Tabindex auswählen
15.10.2008 23:14:36
Tino
Hallo,
andersrum gefragt, wo liegen die vorteile in einer Collection dieser Objekte?
Gruß Tino
AW: UF: Control mit nächsthöherem Tabindex auswählen
16.10.2008 07:45:00
Tino
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

Anzeige
AW: UF: Control mit nächsthöherem Tabindex auswählen
16.10.2008 08:38:06
JogyB
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
AW: UF: Control mit nächsthöherem Tabindex auswählen
16.10.2008 08:35:46
JogyB
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
Anzeige
AW: UF: Control mit nächsthöherem Tabindex auswählen
16.10.2008 00:48:57
Daniel
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
AW: UF: Control mit nächsthöherem Tabindex auswählen
16.10.2008 09:01:00
JogyB
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
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige