Userform dynamisch aufbauen

Hallo VB-Experten!

Folgendes Problem habe ich in VBA unter Excel: Ich möchte zu einem Userform dynamisch Elemente hinzufügen. Dies gelingt mir jedoch nicht mit allen Steuerelementen:

UserForm1.Controls.Add("Forms.CommandButton.1")

Obiger Code funktioniert einwandfrei. Ich benötige jedoch das Steuerelement „RefEdit“.

Wenn ich ein UserForm statisch aufbaue, habe ich das Element „RefEdit“ zur Auswahl. Welchen String muss ich an die Add-Methode übergeben, um dynamisch ein „RefEdit“-Element hinzuzufügen?

CU
Markus

Salü Markus

Die RTF Box ist nicht ein VB-intrinsic control, sondern ist vom Typ
„RichTextLib.RichTextBox“, dessen Type Library in der separaten
Komponente „richtx32.ocx“ definiert ist. Die VB-intrinsic controls, wie
z.B. „VB.TextBox“, sind hingegen in der VB-Runtime „msvbvm60.dll“
definiert.

Der Grund, warum Du die RTF box nicht dynamisch hinzufügen kannst, liegt vermutlich darin, dass die RTF box einen Lizenzschlüssel benötigt.
Dies ist aber nur der Fall, wenn die RTF box nicht im VB-Projekt referenziert ist. In dem Fall kann man aber den Lizenzschlüssel mit „Licenses.Add…“ dynamisch hinzufügen (falls man ihn kennt)…

Grüsse Peter

Hallo Peter!

Die RTF Box ist nicht ein VB-intrinsic control, sondern ist
vom Typ
„RichTextLib.RichTextBox“, dessen Type Library in der
separaten
Komponente „richtx32.ocx“ definiert ist. Die VB-intrinsic
controls, wie
z.B. „VB.TextBox“, sind hingegen in der VB-Runtime
„msvbvm60.dll“
definiert.

Danke für Deine Antwort, allerdings suche ich nicht nach einem RichText Feld , sondern nach einem Control " RefEdit". Kennst Du den notwendigen Parameter hierfür auch? Wo kann ich so etwas nachschlagen? In der Online-Hilfe, im MSDN und per Google bin ich nicht fündig geworden.

CU
Markus

Salü Markus

Der Name des Controls ist für das von Dir geschilderte Problem (imho) nicht relevant.

Für „externe“ Controls und dynamisches hinzufügen sind zwei Aspekte wichtig:

  1. In den Projekt Eigenschaften
    „Informationeen zu nicht verwendeten ActiveX-Steuerelementen entfernen“ ist zu deaktivieren.
  2. Bei Thirdparty Tools ggf. über die Collection „Controls“ mittels License.add die Lizenz hinzufügen.

In VB6 für das Bsp. RichText Control sähe der Code so aus:
Private Sub Command1_Click()
Form1.Controls.Add „richtext.richtextctrl.1“, „new“
With Form1.Controls!new
.Move 200, 200, 2000, 800
.Visible = True
.Text = „My new RTF Control!“
End With
End Sub

Wenn ich „Informationeen zu nicht verwendeten ActiveX-Steuerelementen entfernen“ nicht deaktiviert habe, erhalte ich einen Fehlercode „50153“.

Welchen Fehlercode liefert Dir VBA?

Grüsse Peter
PS: Da ich seit Anfang Jahr mit OpenOffice arbeite, werde ich heute Abend MS-Offcie erstmal installieren, um dann Deine Problemkonstellation durchspielen zu können - sorry :frowning:

Hallo Peter!

Der Name des Controls ist für das von Dir geschilderte Problem
(imho) nicht relevant.

Dann haben wir uns missverstanden…

  1. Bei Thirdparty Tools ggf. über die Collection „Controls“
    mittels License.add die Lizenz hinzufügen.

Damit habe ich (bisher) keinerlei Probleme.

Form1.Controls.Add „richtext.richtextctrl.1“, „new“

Welchen Fehlercode liefert Dir VBA?

Mir fehlt lediglich das passende Argument für die Add-Methode, um ein RefEdit-Control zu erzeugen.

Wenn ich einen Namen rate:

UserForm1.Controls.Add ("refedit.refeditctrl.1")

…erhalte ich

Laufzeitfehler '-2147221005 (800401f3)'
Ungültige Klassenzeichenfolge

In der Entwicklungsumgebung ist unter Extras -> Verweise
Ref Edit Control (C:\Programme\Microsoft Office\Office10\refedit.dll)
aktiviert.

CU
Markus

Salü Markus

Meine Officeinstallation läuft inzwischen.

Der name des controls hat insofern nichts damit zu tun, als das Du ein konzeptionelles (How To) Problem hast. Du hättest mit jedem anderen externen Control das gleich Problem.

Die Klassenbezeichnungen findest Du im übrigen in der Registry, unter HKEY_Classes_Root. Ich würde dort mal nach regfil suchen.

Sobald ich Erfolg haben sollte, melde ich mich wieder. Trotzdem noch einen schönen Abend :wink:.

Grüsse Peter

1 Like

Hallo Peter!

Der name des controls hat insofern nichts damit zu tun, als
das Du ein konzeptionelles (How To) Problem hast. Du hättest
mit jedem anderen externen Control das gleich Problem.

Deswegen ja meine Frage, wo ich die Klassenbezeichner nachschlagen kann.

Die Klassenbezeichnungen findest Du im übrigen in der
Registry, unter HKEY_Classes_Root. Ich würde dort mal nach
regfil suchen.

Genau das hat mir gefehlt:

UserForm1.Controls.Add ("RefEdit.Ctrl")

Damit klappt es einwandfrei.

Vielen Dank für Deine Unterstützung!

CU
Markus

Salü Markus

Hurrah - das Kind ist geboren und ein Sternlein ist aufgegangen :wink:)

Grüsse Peter
PS: manchmal merkt man einfach das die eine Hälfte meiner Abstammung aus dem schönen Kanton Bern stammt…