Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
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

@Ralf_b (und auch für andere)

@Ralf_b (und auch für andere)
02.07.2022 17:02:20
Oberschlumpf
Moin Ralf (und die Anderen)
Ralf, erinnerst du dich? :-)
Hintergrund: Vor kurzem gab es das Thema wo eine Userform mit Controls zur Laufzeit erstellt wird wie man die darin erstellten Controls mit Events versorgt.
Na ja, hat mir keine Ruhe gelassen^^ :-)
Na ja, und trotzdem befürchte ich, dass ich wieder nich das habe, was dich interessiert...
Denn dort, wo ich gefunden habe, hast du bestimmt auch schon gelesen.
Nun denn, los gehts:
1. Wie wird mit VBA ein Userform erstellt, mit Controls, mit Ereignissen?
Das "Grundgerüst" fand ich hier: https://www.herber.de/mailing/UserForm_mit_ComboBoxes_durch_VBA-Code_erstellen.htm ...vom "Chef" selbst :-)
Was mir daran nicht so gefiel, der Code für Controls/Ereignisse wird mit...
.AddFromString strCode (strCode = String-Variable
...eingetragen
"Sorgen" machte mir die String-Var, denn, so weit ich mich erinner, haben String-Vars eine Grenze, wieviele Zeichen sie er/enthalten können.
Ich kenn die Grenze nicht, wenn aber z Bsp bei 1000 Zeichen Schluss ist, bekomm ich in so eine Variable nicht wirklich viel Code hinein, der ja nach obiger Vorgehensweise (siehe Details im Link) "in einem Rutsch" zur Verfügung stehen muss.
Vielleicht irre ich mich, das mit Grenze ist Quatsch, und der nächste Schritt wäre dann umsonst
2. Damit ich mir wegen vllt MAX-Anzahl von Zeichen in Var keine Gedanken machen muss, suchte ich nach einem anderen Weg, Code mit VBA in Module zu schreiben
Gefunden habe ich: https://www.mrexcel.com/board/threads/userform-creation-from-vba.1003716/
In dem Beitrag fand ich die Verwendung von
.insertlines 1, "Private Sub..."
In jeder insert-Zeile wird der Zeilenwert um 1 erhöht.
Cool, dachte ich, das kann man bestimmt auch mit Arrays lösen!
Ausprobiert, mehrmals korrigiert, funktioniert :-)
3. Und rausgekommen ist nun das hier:
https://www.herber.de/bbs/user/153932.xlsm
Wenn du die Datei öffnest, siehst du erst mal nur 2 Button und eine ansonsten leere Tabelle
Schau dir erstmal ohne Button-Klick im VBE alles an - es ist kein Userform enthalten.
Klick nun bitte auf den Adress-Button.
1. Es öffnet sich ein Userform für Adresseingabe mit Eingabefelder für die üblichen Daten und eine Auswahl, ob m oder w (Rene kann auch n Mädchen sein! ;-) )
2. Bitte trag mal überall etwas ein, wähl m oder w aus und klick erst dann auf den Button, da eine Kontrolle, ob alles ausgefüllt ist, nicht enthalten ist
3. Nach Klick auf den Button hat die Tabelle...
a) eine Überschriftenzeile
b) die Werte aller Textfelder wurden in die korrekten Spalten eingetragen
4. nun kannst du mit Klick auf x das Userform wieder schließen (oder vorher gern auch weitere Datensätze hinzufügen)
5. Nach Schließen des Userforms...
a) sind in der Tabelle noch alle Daten vorhanden
b) ABER im VBE wurde das vorher sichtbare Userform wieder entfernt!
Was hältst du davon?
Auch auf die Gefahr hin, dass es dir...noch immer nicht genug ist^^...habe zumindest ich wieder was Neues gelernt...dank dir! :-)
Bisher hab ich noch nie ein Userform + Co nur mit VBA erstellt.
Und ich werd das wohl auch nie wieder tun! :-)
Was für ein Aufwand...uih uih! Da erstell ich doch lieber sooo viele "echte" Userforms, wie ich sie für ein Projekt benötige, als dass ich all das nur mit VBA durchführe.
Ciao
Thorsten

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
und schon muss ich korrigiern^^ :-)
02.07.2022 17:14:54
Oberschlumpf
Hallo,
a) ich hatte vergessen zu erwähnen, dass die Option "dem VBA-Projekt muss vertraut werden" aktiviert sein muss
b) in Extras/Verweise müssen diese beiden Einträge vorhanden sein
Userbild
c) beim Code-Bereinigen hatte ich 1x zu oft On Error GoTo... gelöscht
hier die korrigierte Version:
https://www.herber.de/bbs/user/153933.xlsm
Ciao
Thorsten
AW: @Ralf_b (und auch für andere)
02.07.2022 17:33:40
Rudi
Hallo,

"Sorgen" machte mir die String-Var, denn, so weit ich mich erinner, haben String-Vars eine Grenze, wieviele Zeichen sie er/enthalten können.
Da kann ich dich beruhigen. Eine Zeichenfolge kann zwisch 0 und 2^31 (~2 Mrd) Zeichen enthalten.
Gruß
Rudi
Anzeige
Da hab nicht mehr vorher aktualisiert ;-) ...oT
02.07.2022 17:36:03
{Boris}
VG, Boris
AW: @Ralf_b (und auch für andere)
02.07.2022 17:37:16
Oberschlumpf
Hi Rudi,
und danke :-)
Nun denn, so hab ich auch InsertLines kennengelernt
Ciao
Thorsten
Nur zu einem einzigen Punkt...
02.07.2022 17:35:12
{Boris}
Hi Thorsten,
"Sorgen" machte mir die String-Var, denn, so weit ich mich erinner, haben String-Vars eine Grenze, wieviele Zeichen sie er/enthalten können.
Ich kenn die Grenze nicht, wenn aber z Bsp bei 1000 Zeichen Schluss ist, bekomm ich in so eine Variable nicht wirklich viel Code hinein, der ja nach obiger Vorgehensweise (siehe Details im Link) "in einem Rutsch" zur Verfügung stehen muss.

Da bist Du auf dem Holzweg ;-) - Stringvariablen sind extrem mächtig :-)
Teste mal:

Sub test()
Dim s As String, x As Long
For x = 1 To 10000
s = s & "abcabcabcabcabcabcabcabcabcabcabcabc"
Next x
MsgBox "Der String aus der Variable s enthält " & Len(s) & " Zeichen"
End Sub
VG, Boris
Anzeige
AW: Nur zu einem einzigen Punkt...
02.07.2022 17:38:29
Oberschlumpf
Hi Boris,
ich kann auch entweder antworten...oder aktualisieren ;-)
Egal!
Ich danke auch dir und glaube dir....auch ohne Test :-)
Ciao
Thorsten
AW: @Ralf_b (und auch für andere)
02.07.2022 18:11:49
onur
Nix für Ungut, aber mir fällt auch bei grösster Anstrengung kein einziger Fall ein, wo man eine Userform samt Controls unbedingt während der Laufzeit erstellen müsste.
AW: @Ralf_b (und auch für andere)
02.07.2022 18:13:48
Oberschlumpf
die selbe Frage stellte ich mir auch schon^^ - ohne eine Antwort für alle gefunden zu haben
Antwort für mich: ich hab wieder was dazu gelernt
AW: @Ralf_b (und auch für andere)
02.07.2022 18:18:18
onur
Solche Bedürfnisse haben meiner Erfahrungen fast nur Anfänger, die schon Probleme bei "normalen" Userformen haben. :)
Anzeige
AW: @Ralf_b (und auch für andere)
02.07.2022 18:19:54
Oberschlumpf
kannst du mir das bitte noch mal mit anderen Wörtern erklären? Denn mit deiner Formulierung verstehe ich nicht, was du meinst.
AW: @Ralf_b (und auch für andere)
02.07.2022 18:25:51
onur
War keineswegs auf dich gemünzt oder so was, absolut nicht !
Ich wollte nur darauf hinweisen, dass, wenn hier so eine Frage zur "Erstellung von Userformen während der Laufzeit" oder zur "Code-Ergänzung bzw -Manipulation durch Code" auftaucht, du zu 95% davon ausgehen kannst, dass diese Frage von einem Anfänger stammt. Je kleiner die Fähigkeiten, desto grösser die Ambitionen. Wahrscheinlich glauben sie immer, dass sie es dringend brauchen, weil ihnen keine anderen Lösungsmöglichkeiten einfallen.
Anzeige
AW: @Ralf_b (und auch für andere)
02.07.2022 18:27:44
Oberschlumpf
jep...genau so hatte ich "meine Frage/Bitte um Erklärung" mittlerweile auch beantwortet - sorry für die Umstände
habs verstanden^^ hat nur was gedauert :-) owT
02.07.2022 18:25:16
Oberschlumpf
@Thorsten
02.07.2022 19:25:19
ralf_b
Hallo Thorsten,
mal abgesehen davon das sowas angeblich nur Anfänger haben wollen, zeigt die Verfügbarkeit von diversen Anleitungen im Netz, das dieses Thema irgendwann und irgendwo eine Rolle spielte. Ich bezweifele das sich die Leute, die sowas bereits früher einmal umgesetzt haben, sich von Anfängern dazu verleitet haben lassen.
Ich finde du hast da ein hübsches Stück Code gebastelt. So in etwa hatte ich mir das vorgestellt. Du bist ne echte Geheimwaffe.
Mir fällt ein Anwendungsfall ein. Die exelinterne Dateneingabemaske. Eine Userform die sich auf Basis der aktuellen Tabelle die nötigen Controls selbst erstellt plus ein Satz Standart-Navigationselemente.
gruß
rb
Anzeige
AW: @Thorsten
02.07.2022 23:38:54
Oberschlumpf
Hi Ralf,
vielen Dank! Ich freu mich, dass ich dir helfen konnte.
Und auch ich denke, dass auch nicht-Anfänger nach so etwas fragten - denn du hast recht: Es gibt wirklich viele Erklärungen zu dem Thema (ich konnt nur nich jede Erklärung auf Anhieb für mich passend umgestalten :-) )
Und vielleicht gibt es noch einen nützlichen Grund, "es so zu machen":
Ich las in einem anderen Forum, dass jemand ein größeres Projekt hatte, bei dem, abhängig davon, welches Blatt gerade aktiv war, immer ein ganz anderes Userform gezeigt werden musste - und das wollte der Hilfesuchende mit eben - nur einem - dynamischen Userform lösen, als dass er ganz viele echte Userforms in der Datei speicherte.
Aber ich hab schon für mich festgelegt: egal, wieviele UFs ich, wann auch immer, in einer Datei brauchen werde - ich werde diese immer "in echt" gestalten :-)
Ciao + n schönen Sonntag
Thorsten
Anzeige
AW: @Ralf_b (und auch für andere)
03.07.2022 10:32:33
Alwin
Hallo Thorsten,
ich habe deinen Thread erst jetzt entdeckt. Gestern war zu viel Arbeit und abends zu viel schönes Wetter.
Anbei mal der fehlende Teil deiner Datei.
https://www.herber.de/bbs/user/153740.xlsm
Den dazugehörigen Thread findest du hier:
https://www.herber.de/forum/cgi-bin/callthread.pl?index=1888338
Das Ding funktioniert mit formatierter Tabelle.
Ich hatte vor einiger Zeit mal Lust da was weitestgehend dynamisch zu machen. Es sind allerdings noch eine Userform und 4 Buttons da vorgegeben. Wenn Ferien sind bastle ich das so um, dass die Buttons auch noch dynamisch sind.
Eine Userform dynamisch zu erzeugen ist problematisch, wenn dann die Datei samt erzeugtem Userform gespeichert wurde. Falls dann diese Userform gelöscht wird, ist die Datei zumindest mit nach meinem Wissenstand im Eimer und es kann keine neue Userform mehr erzeugt werden. Tiefgründiger habe ich dieses Problem aber auch nicht untersucht.
Gruß Uwe
Anzeige
AW: @Ralf_b (und auch für andere)
03.07.2022 12:24:29
Oberschlumpf
Moin Uwe,
und danke schön.
Mir sind sowohl deine gezeigte Datei als auch der Link bekannt.
(ich weiß nach Fertigstellung meines Versuchs, wie man meinen Code hätte erweitern müssen, um z Bsp ein Userform mit Listbox, etc zu erstellen)
Beides habe ich im Erstbeitrag nicht explizit erwähnt, weil...
a) mein "Hauptziel" war, es zu zeigen, wie man grundsätzlich so etwas programmieren kann
b) ich nach Fertigstellung für "Adress-Userform" einfach keine Lust mehr hatte, ein weiteres, dynamisches Userform zu "kreieren" :-)
Info zu:
"...Eine Userform dynamisch zu erzeugen ist problematisch, wenn dann die Datei samt erzeugtem Userform gespeichert wurde..."
Zumindest meine Bsp-Datei, so lange der Code nicht geändert wird, kann nicht (zwischen)gespeichert werden, so lange das (Adress)Userform sichtbar ist.
Und direkt, nachdem das Userform mit Klick auf x, oder Tastenkombi ALT-F4, beendet wird, wird das - jetzt auch im VBE vorhandene - Userform eh automatisch gelöscht.
Mein Code ist so aufgebaut, dass direkt nach Klick auf den Adress-Button in der Tabelle ein Userform per VBA erstellt wird.
(gleiches gilt natürlich für jeden anderen Button in der Tabelle, wenn denn Code dafür vorhanden ist)
Und wenn man irgdwie doch speichern könnte, könnte der Code so angepasst werden, dass überprüft wird, ob ein mit Klick-Button zu erstellendes Userform schon im VBE enthalten ist - wenn ja, dann den Bereich "Userformerstellung durch VBA-Code" überspringen und mit Userform.Show direkt anzeigen.
Konnte ich deine indirekten Fragen beantworten?
Ciao
Thorsten
...ach soo...DAS vergaß ich in all meinen Beiträgen zu erwähnen!
Für die Nutzung von Userforms mit durch VBA erstellten Controls/Events, und natürlich auch für das Erstellen selbst solcher Programme, ist es erforderlich, dass die Option "dem VBA-Projekt muss vertraut werden" aktiviert sein muss!
Und diese aktive Option öffnet für "böse Makros" noch mehr die digitale Tür.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige