Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - Userform - Wenn Schaltfläche geklickt wurde neues Steuerelement einfügen
#1
Hallo,

ich bin gerade dabei so eine Art Kontaktdatenbank zu erstellen

ich hätte gerne eine Schaltfläche in meinem Userform die immer wenn man sie anklickt neue Steuerelemente in das Userform aufnimmt 

Quasi:

der erste Kontakt wurde aufgenommen jetzt drücke ich auf "weiteren Kontakt hinzufügen" und es werden darunter neue Textfelder erstellt "telefonnummer" "Email" etc)

Ich hoffe ich hab mich klar genug ausgedrückt und vielen Dank euch für die hilfe
Antworten Top
#2
Hallöchen,

man kann das so wie beschrieben realisieren, einfacher für Dich wäre wahrscheinlich, die Steuerelemente gleich einzufügen und mit Visible zu arbeiten. Hängt u.a. mit der Zuweisung von Code zusammen, wenn Du die Elemente erst nachträglich einfügst.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
Hi,

normalerweise wird nach Aufnahme eines neuen Kontaktes erstmal gefragt, ob der aktuell, neu aufgenommene, gespeichert werden soll. Egal ob ja oder nein, auf jeden Fall werden die BESTEHENDEN Steuerelemente geleert, um darin die Daten des neuen Kontaktes aufnehmen zu können. Es ist ziemlich unsinnig für jeden neuen Kontakt neue Steuerelemente erstellen zu wollen. Du willst ja schließlich keine neue Steuerelementsammlung erstellen, sondern lediglich neue Kontaktdaten aufnehmen...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#4
Keine schlechte Idee. ;)

wäre es auch dann möglich in einem Rahmen zu Scrollen?
Antworten Top
#5
ja. Du könntest vorhandene Kontakte auch in einer Listbox anzeigen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Es wird nur in der Userform gearbeitet und Eine Exceltabelle dient nur als Datenbank.

Anbei habe ich jetzt mal ein Demo meiner Userform

Es handelt sich um "Kontaktdaten" und um den Rahmen "Ansprechpartner"

Ich habe einfach mal 3 Kontakte eingetragen hätte aber gern nur immer einen Kontakt als Start im Rahmen.
Wenn man jetzt auf "Kontakt hinzufügen" geht soll ein neuer Rahmen Kontakt angelegt werden (vorzugsweise nummeriert)

Wenn ich jetzt zb den Kontakt 3 lösche und es 4 Kontakte gibt soll der Kontakt 4 zu Kontakt 3 werden.

Alle Daten sollen NICHT aus dem Userform gelöscht werden sondern sollen alle vorhanden bleiben.


Angehängte Dateien
.xlsm   DokuTEST.xlsm (Größe: 19,84 KB / Downloads: 8)
Antworten Top
#7
Hallo,

das geht, wenn ich das richtig verstanden habe über Klassenprogrammierung. Du musst faktisch jeden Rahmen mit allen darin enthaltenen Controls dynamisch erzeugen. Dann müssen die Events (CommandButton_Click), da diese ja dyn. erzeugt wurden, in einer Klasse verarbeitet werden.
Das ist einiges an Rechnerei mit den Maßen bei der dyn. Erzeugung. Zum Thema Klassen gibt es im Netz viele Beispiele.
Damit du nicht denkst, dass ich nur schlau schwaflemal anbei eine Userform, wo alles dyn. erzeugt und verarbeitet wird als Beispiel.

Gruß Uwe


Angehängte Dateien
.xlsm   Listbox alle Elemente dyn. grau .xlsm (Größe: 124,23 KB / Downloads: 3)
Antworten Top
#8
Hallöchen,

einfach nur Textboxen ohne weitere Funktion hinzufügen kann man auch ohne Klassenprogrammierung, hier mal das Prinzip:
Du musst Dir dann was einfallen lassen, wie Du die Position ermittelst.
Dann musst Du sicher irgendwann schauen, dass Du den Scrollbereich des Rahmens anpasst.
Eventuell legst Du die Namen der Textboxen auch anders fest. Bisschen Smile Systematik wäre ja sicher nicht verkehrt, falls Du mit den eingegebenen Daten auch noch was anfangen willst.
Das mit dem Löschen könnte lustig werden. Wenn Du Kontakt 3 löschst, kann man den angezeigten Text von 4 auf 3 ändern. Intern würde Deine Textbox aber z.B. noch textbox4 heißen. Löschst Du dann auch noch die 4, würde textbox5 an Stelle von textbox3 stehen.
Wenn da mehrere Textboxen zu einem Kontakt gehören, solltest Du sie zuordenbar benennen, also nicht 4, 5 und 6, sondern 41, 42 und 43.
Hast Du 10 oder mehr Textboxen, dann die Kontaktnummer zweistellig, also z.B. 141, 142 und 143.
Viel Spaß mal schon. Man könnte sicher auch eine Listbox nehmen...

Übrigens, es gibt auch eine Eingabemaske. Ganz ohne Programmierung.

Code:
Private Sub CommandButton1_Click()
Dim i%, ctrTbo As Control
'Anzahl Controls für Name und Position
i = UserForm1.Controls.Count + 1
'Tbo im Rahmen hinzufuegen und Name vergeben
Set ctrTbo = UserForm1.Frame1.Controls.Add("Forms.TextBox.1", "txtBox" & UserForm1.Controls.Count + 1)
'Mit der Tbo
With ctrTbo
  'positionieren
  .Top = 0
  .Top = .Top + i * 25
  .Left = 20
  .Width = 50
  .Height = 20
'Ende Mit der Tbo
End With
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hallo tomcat,

schau mal hier. 
   
Zwar weniger bunt - aber zielführend. Buttons/Funktionen, Textboxen und Spalten in der Liste lassen sich natürlich beliebig erweitern. Du hast so immer viele Kontakte sichtbar, aber die vollständigen Details jeweils nur für einen. Kannst nach Bedarf suchen. Nur so als Anregung der Vereinfachung ...

Grüße

d`r Bastler von den VBAsteleien.de
Win 10 & 11, Office 2019 & 2021 & macOS X.15, XL 2019
Antworten Top
#10
...moin....

nochmal zum Mitschreiben an alle Klassen- und neue Steuerelementefetischisten bei einer simplen Datenerfassung (und darum geht es):

Zur Neuaufnahme/Änderung nutzt man für jede Eigenschaft (Bsp. Nachname, Schuhgröße,...) eines Objektes (Bsp.: Kunde, Auto, Konto,...) jeweils immer nur EIN EINZIGES Steuerelement! Und immer und immer wieder nur dieses eine. Dafür ist es nämlich da. Dessen Inhalt wird entweder erst im Speicherbereich des Objektes gespeichert und dann geleert oder ohne zu speichern geleert. Für die jeweils gewünschten Handlungen gibt es entsprechende Buttons: 
  • Speichern
  • Neuaufnahme
  • Ändern
  • Löschen
  • Abbrechen


Für jede Neuerfassung neue Steuerelemente erstellen zu wollen ist Bullshit! Für das Objekt selbst kann man natürlich eine Klasse nutzen, aber das war hier nicht gefragt. Das Bild von dr Bastler kommt dem schon sehr nahe...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste