Da noch einige Spalten dazu kommen, wäre es einfacher nicht starr mit den Spaltenbezeichnungen zu arbeiten, sondern mit den Spaltenüberchriften. Das würde dann einige Zeit ersparen, jedesmal den gesammten Code anzupassen. Daher mein Versuch Deine tolle Vorlage, ein wenig zu modifizieren. Das suchen in UF1 funktioniert und die UF2 wird geöffnet, nur werden leider keine Boxen in UF2 eingelesen. Wenn das funktioniren würde, wäre das perfekt. Mit Freundlichen und dankbaren Grüssen. Martin
wenn ich es richtig verstanden habe willst du in der Tabelle von Zeit zu Zeit Spalten zusätzlich einfügen oder vielleicht auch wieder entfernen.
Dann willst du in einem Array statt Spaltennummer die "Überschriften" deiner Tabelle vorgeben um daraus die Spaltennummern zu ermitteln.
Du willst damit erreichen, dass du bei Veränderungen ab diesem Punkt die Spaltennummern nicht mehr alle anpassen musst, sondern an passender Stelle den Spaltennamen der Tabelle einträgst oder entfernst.
Wenn ich das richtig verstanden habe wäre eine dynamische Erzeugung der Control wohl der brauchbarste Weg. Was ist das:
Es werden die Labels und die Textboxen im Userform2 zur Laufzeit erzeugt und passend nebst Größe des Userforms angeordnet.
Bevor ich jetzt da was baue muss noch etwas geklärt sein. Es gibt soweit ich mich erinnere Datumseinträge in Textform und auch als echtes Datum (Datumszahl).
Textboxen geben immer Text aus, es sei denn man verpasst der Ausgabe das gewünschte Format. Baue in der Tabelle mal so viel Datensätze wie nötig ein, damit alle Eventualitäten in den Zellen erkennbar sind. Lade dann diese Datei hier hoch.
27.06.2025, 15:57 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2025, 15:58 von snb.)
1. Verzichte auf verbundenen Zellen 2. Benütze eine dynamische Tabelle 3. Verwende ein Listbox mit columncount 7
Dann reicht im Userform
Code:
Private Sub UserForm_Initialize() ListBox1.Column = Application.Index(Tabelle1.ListObjects(1).DataBodyRange.Value, , Array(2, 33, 32, 35, 37, 39)) End Sub
Code:
Private Sub CommandButton1_Click() sn = Array(tbName, tbVorname, tbGeburt, tbHochzeit, tbTod)
For j = 0 To ListBox1.ListCount - 1 ListBox1.Selected(j) = False Next
For j = 0 To ListBox1.ListCount - 1 For jj = 0 To UBound(sn) If ListBox1.List(j, jj + 1) = sn(jj) Then Exit For Next If jj < UBound(sn) + 1 Then Exit For Next If j < ListBox1.ListCount Then ListBox1.Selected(j) = True ListBox1.ListIndex = j tbName = ListBox1.Column(1) tbVorname = ListBox1.Column(2) tbGeburt = ListBox1.Column(3) tbHochzeit = ListBox1.Column(4) tbTod = ListBox1.Column(5) End If End Sub
27.06.2025, 16:56 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2025, 16:59 von luna101.)
Guten Tag Uwe. Richtig erkannt. Genau dies ist der Grund für die Modifikation. Die Datum sind als Text erfasst ('01.12.1900, 'vor 1900, '1900) Wenn es mit dem dynamischen Weg funktioniert, wäre das perfekt. Mit freundichen Grüssen Martin Guten Tag snb danke für die Informationen un den Code. Werde ihn Testen. Mit freundlichen Grüssen Martin
28.06.2025, 11:48 (Dieser Beitrag wurde zuletzt bearbeitet: 28.06.2025, 11:51 von Egon12.)
Hallo Martin,
Es gibt jetzt im Blatt System ein Listobjekt (formatierte Tabelle) in der du die Spalten und den dazugehörigen Text für das Label zur Textbox im Userform2 eintragen kannst. Etwas habe ich schon eingetragen. Die Formel in Spalte Spaltennummer pflanzt sich selbst fort. Da brauchst du nichts dran ändern.
Das sollte die brauchbarste Lösung deines Problems sein. Da musst du nun nicht mehr im Code irgendwas anpassen. Im Userform2 wird alles automatisch erzeugt.
Anpassungen von ein paar wesentlichen Vorgaben können im parametrischen Aufruf der Prozedur Call Erzeugen() im Initialize des Userform 2 ggf. geändert werden.
Das Userform1 wird auf .Hide gesetzt, wenn Userform2 via Button geöffnet. Wenn man Userform2 beendet, wird Userform1 wieder auf .Show gesetzt.
Guten Tag UWE - lichen für die Modifikation. Du bist für mich . Der erste Eindruck war gut. Werde mal testen. Melde mich wieder. Wünsche noch ein schönes Wocheende. Gruss Martin
30.06.2025, 19:57 (Dieser Beitrag wurde zuletzt bearbeitet: 30.06.2025, 20:21 von luna101.)
Guten Abend Uwe, Ich habe vergessen zu erwähnen, dass die Datum als Text formatiert sind und 'vor 1200, ' um 1140, 'nach 1600 oder '1300 enthlten. Auch sollten mehrfach Markierungen in der Maske möglich sein.
Wenn ich "Vornamen" , "Name" suche funktioniert alles.
Bei den Daum jedoch kommt die Fehlermeldung "Es werden keine Einträge gefunden", was vermutlichch wegen der Formatierung der Datum entsteht. Bitte um Korrektur.
Eine kleine Modifikationen hätte ich noch gerne. Wenn ich in UF2 die Daten modifiziert habe, möchte ich per Button (Modifizieren Beenden) wieder die Tabelle1 öffnen.
Eine Frage hätte ich noch. Ist es möglichh die UF2-Datenmaske so wie im Beispiel gezeigt zu modifizieren? W Ein bischen viele Wünsche, aber ich wäre dankbar, wenn einige erfüllt werden Könnten Mit dankbaren Grüssen Martin
Ich habe jetzt eben den von dir ergänzten Text entdeckt und gelesen.
Mehrere Einträge in der Listbox markieren ist in dieser Konstellation nicht sinnvoll, da genau eine Zeilennummer (letzter Spalte des in der Listbox markierten Eintrags) im Userform2 verarbeitet wird.
Das ließe sich zwar umbauen um dann im Userform2 eine Combobox damit zu füllen und dann die ausgewählten Einträge abzuarbeiten.
Das ist mir aber zu viel Aufwand. Wenn die Textboxen im Userform1 eingebaut wären, hätte sich dein Ansinnen gar nicht erst ergeben.
Das Thema Datum im Filter schau ich mir an. Das hast du ja mit Sicherheit auch aus dem Netz.
den Button habe ich eingebaut. Die Variablen, welche von den Textboxen für die historischen Daten gefüllt wird habe ich auf Variant gesetzt (kann somit jederzeit wieder auf Date dimensioniert werden).