habe deine Datei anschauen lassen. Diese weicht sehr stark von der eigentlichen Eingabemaske ab.
Sinn und Zweck der Eingabemaske war es (damit auch gleich deine Frage warum ein Feld Monat und dann ein Feld Datum):
1.) Die Eingabemaske wird von den durchführenden der Fachleistungsstunden beim Besuch des Klienten ausgefüllt. Da diese nicht immer die ein und die selbe Person sind, mussen Sie nach anklicken des Klienten eine komplette Übersicht haben wann was behandelt wurde und wie lange.
2.) Da diese Personen nicht unbedingt Computer oder Excel Spezialisten sind müssen so viel wie mögliche Fehleingaben ausgeschlossen werden, da aus den erfassten Daten dann die Meldung an die Leistungsträger erfolgt.
3.) Das Feld Monat zeigt die Monate laufend ab dem Bewilligungs Datum bis zum Bewilligungsende an. In Jedem Monat müssen die Fachleistungserbringer 2 Termine mit Behandlungen tätigen. Diese Termine sind willkürlich mit dem Clienten zu vereinbaren. Somit muss abgefangen werden das der Fachleistungserbringer im Bewilligungs Monat z,B, Oktober 2018 kein Leistungsdatum November 2019 einträgt. Da die Bewilligungszeiträume von Client zu Client im Bereich von - bis unterschiedlich sind ist abhängig von der Antragsstellung. Mit meiner Maske Sieht der Anwender direkt um Welchen Monat es geht und ob da schon irgend etwas durchgeführt wurde.. Die Maske verändert auch, wenn bei einem anderen Clienten der Bewilligungs Monat "von" anders ist das Monatsfeld und zeigt direkt ab Bewilligungsmonat fortlaufend die jeweiligen Monate an.
Also um es kurz zu sagen es wird eine Maske benötigt in welcher egal welcher Anwender alles wichtige im Überblick gezeigt wird und dem Anwender möglichst keine Gelegenheit gegeben wird falsche eingaben zu tätigen.
Dieser gesamt Überblick über den komplett bewilligten Zeitraum gibt Deine Maske bedauerlicher Weise nicht her.
In der Maske läuft bis jetzt alles bis auf die 2 offene Abfragen.
Das der komplette Code nicht schön oder zu umfangreich ist ist mir klar. Dass vieles im Hintergrund zu kompliziert abläuft ist mir auch klar. Dass man den gesamten Code mit variablen extrem verkürzen kann ist mir auch klar. Jedoch ist dies eine Arbeit -nach und nach- wenn es erst einmal, und das bedauerlicher weise von mir nicht beeinflussbar, komplett läuft.
Wie bereits von Anfang an beschrieben bin ich nicht nur blind sondern bin mich gerade erst am einarbeiten in der Arbeit mit einer Userform und Ihrer Programierung. Es wurde also alles aus Codeschnipsel zusammengebaut.
Für die Feinarbeit habe ich später noch viel Zeit. Nur Rückt das nächste Meldedatum an die jeweiligen Leistungsträger immer näher und ich möchte einfach nicht mehr mit jeder Menge manuell geschriebener Stundenzettel zusammen fassen und auf das Meldeformular übertragen.
Sei also nicht Böse, wenn ich bzw. 2 der zukünftigen Anwender deine Userform für nicht Zweckmäßig halten.
Ich möchte Dir auch für Deine Anregungen und zugespielten Ideen danken. Dies hat Dich bestimmt einige Zeit gekostet.
vielen lieben Dank, ich hoffe dass ich deinen letzten Beitrag mit Code verstanden habe und werden Ihn versuchen mit meiner Schreibassistenz am Sonntag umzusetzen. Ich melde mich dann umgehend um denn Stand der Dinge mitzuteilen.
Bis spätestens Montag
Gruß
Jürgen
PS.: allem Anschein nach, hat ein blindes Huhn ein Zweites Korn gefunden :18:
Doch habe ich ein neues Problem bekommen, wenn eine Abfrage gestartet wird mit einer Schleife und er kommt dann an eine Textbox die überhaupt nicht da ist - dann knallt es. Es ist wohl beim erstellen der Maske passiert, das TextBoxen angelegt wurden und Irgendwann gelöscht wurden. Weis nicht ob ich das richtig erkläre deshalb mal der Code:
PHP-Code:
Dim k As Long For k = 17 To 128 If Controls("TextBox" & k) = "" Then Controls("TextBox" & k).SetFocus Exit Sub Else CommandButton4.SetFocus End If Next
Das funktioniert auch bis er mit dem "k" an eine Textbox kommt, die nicht mehr Existent ist. Als Beispiel er prüft die Textboxen 1,2,3,4,5, und dann kommt er an die Textbox6 aber die ist nicht mehr existen, geht er in die Fehlermeldung / Debugmodus und meldet Object konnte nicht gefunden werden.
Kann man das abfangen?
oder muss ich jetzt irgend welche Textboxen mit der Textboxbezeichnung anlegen? versteckt anlegen
Gruß
Jürgen
PS.: Kann man sich das nicht Anzeigen lassen in einer Übersicht welche Textboxen überhaupt in der Userform da sind incl. den Frames? Manuell alles zu Durchforsten ist ja Wahnsinn.
wenn Du die Objekte auf Deinem Userform listen willst könntest DU eine Schleife über alle Objekte des Userforms laufen lassen und diese z.B. auf einem Blatt ausgeben.
Ich hab hier aber erst mal einen Ansatz für das eigentliche Problem:
Code:
For k = 17 To 128 On Error Resume Next If Me.Controls("TextBox" & k) Is Nothing Then 'Textbox k existiert nicht! On Error GoTo 0 Else 'Textbox k existiert If Controls("TextBox" & k) = "" Then Controls("TextBox" & k).SetFocus Exit Sub Else CommandButton4.SetFocus End If End If Next
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
18.03.2019, 18:47 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2019, 21:27 von WillWissen.
Bearbeitungsgrund: Link zum Fremdhoster entfernt
)
(16.03.2019, 12:09)schauan schrieb: Hallo Jürgen,
ich hab mal hier ein Muster vom Userform-Code für die Verwendung von 3 Klassenmodulen. Dein clsTb1 habe ich 3x verwendet und jeweils clsTb1, 2 und 3 genannt. Entsprechend ist es 3x dimensioniert mit 3 zugeordneten Objekten und im Initialise wird es 3x verwendet.
Dazu habe ich die 4 Zeilen von v= bis zum Schleifenende kopiert und bei den objTb die Nummer dran gehängt. Bei v= stimmen natürlich die Zahlen der TextBoxen nicht, aber zum Test hab ich jeweils nur zwei bei mir angelegt. Die erste Reihe brauchst Du nur von Deinem Original kopieren und bei den anderen weiß ich nicht und hab jetzt auch nicht gesucht, welche dazu gehören. Aber vielleicht hast Du die Definition noch in Deinem fehlerhaften Code und brauchst die auch nur einfach zu kopieren.
Da Dein Fehlercode nicht enthalten ist, kann ich natürlich nicht sagen, was da verkehrt lief.
Code:
Option Explicit
Dim objTB1() As New clsTb1 Dim objTB2() As New clsTb2 Dim objTB3() As New clsTb3
Private Sub UserForm_Initialize() 'Textboxen fuer nummerische Eingabe und Komma festlegen Dim v As Variant, l As Long v = Array(1, 2) 'Zustaendige Textboxen festlegen ReDim objTB1(UBound(v)) For l = LBound(v) To UBound(v) Set objTB1(l).myTB = Me.Controls("TextBox" & v(l)) Next l v = Array(3, 4) 'Zustaendige Textboxen festlegen ReDim objTB2(UBound(v)) For l = LBound(v) To UBound(v) Set objTB2(l).myTB = Me.Controls("TextBox" & v(l)) Next l v = Array(5, 6) 'Zustaendige Textboxen festlegen ReDim objTB3(UBound(v)) For l = LBound(v) To UBound(v) Set objTB3(l).myTB = Me.Controls("TextBox" & v(l)) Next l
'--------------------------------------------------------------------- 'Platzhalter fuer Textboxen mit numerischer Eingabe und Punkt festlegen End Sub
Ich muss nochmal auf Dich zukommen.
Habe Deinen Code wie Du es beschrieben hast alles Übernommen und nur geändert so wie Du es in Bezug auf "v" geändert. Läuft auch hervorragend. Bzw. ist gelaufen bis ich auf die wahnsinnige Idee kam - weil die Assistenzkräfte über die Msg Boxen meckerten - eine Textbox auf der Userform einzustellen, in welcher die selben Meldungen wie in den MsgBoxen angezeigt werden. Das funzt soweit mit allen Prüfungen welche außerhalb der Klassenmodule statt finden also direkt in den Textboxen beim verlassen.
Ich bekomme es nicht nur auf die Reihe wie man anstelle des Textes in der MsgBox diesen Text aus dem Klassenmodul an die Textbox übergibt.
Habe es so gemacht wie im Userform Code aber im Klassenmodul weckert er dann immer weil er das Objekt nicht findet
mein Code: äh Sorry Dein Code
Code:
Public WithEvents myTB As MSForms.TextBox
Private Sub myTB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case 44, 48 To 57 'Festlegen der Zugelassenen Zeichen 0-9 und Komma ' tue nichts Case Else KeyAscii = 0 'MsgBox "Es sind nur Zahlen und Punkt erlaubt!" & vbLf & "oder" & vbLf & "Lassen Sie das Feld leer", _ vbInformation, "Hinweis" TextBox137.BackColor = &HFF& TextBox137 = "Es sind nur Zahlen und" & vbLf & " Komma erlaubt!" & vbLf & "oder" & vbLf & "Lassen Sie das Feld leer" End Select End Sub