# Access: Steuerelement zur Laufzeit generieren



## deusfalsus (31. Mai 2007)

Salve!

Kann man ein Steuerelement "live", also wenn das Formular geöffnet ist, generieren?

So:
	
	
	



```
Dim txt_Name As Control
Set txt_Name = CreateControl("frm_blabla", acTextBox, , , , "", "", "", "")
```
 gehts jedenfalls nicht, da man dafür im Entwurfsmodus sein muss.

Vorschläge?


----------



## SnEaKy (31. Mai 2007)

Indirekt machbar. Im eigenen Formular ist das nicht machbar, aber dafür kann man ein Formular bearbeiten, dass nicht geöffnet ist.
Andere Möglichkeiten sind mir nicht bekannt.


----------



## deusfalsus (1. Juni 2007)

laut diesen Control dynamisch laden und diesen 
Steuerelemente zur Laufzeit hinzufügen hier geht es,
aber ich kann zum einen keinen Index setzen (zumindest finde ich es nicht(Access2002,SP3)), was die zweite Variante ausbremst und zum anderen, was ich gar nicht verstehe: Mein Access kennt die methode "controls.add" nicht.

Kann ich ein Formular per Befehl in den Entwurfsmodus versetzen und wieder zurück?


----------



## SnEaKy (1. Juni 2007)

```
Private Sub Form_Load()

  ' Label deklarieren
  Dim oLabel As Label
  
  ' Label der Form1 hinzufügen
  Set oLabel = Form1.Controls.Add("VB.Label", "Name_des_Labels")
  ' Position bestimmen
  oLabel.Move 0, 0, 1000, 225
  ' Label "sichtbar" machen
  oLabel.Visible = True
  ' da ein Label die gleiche Farbe wie eine Form hat
  ' bietet es sich an, die Hintergrundfarbe zu ändern :-)
  oLabel.BackColor = vbRed
  ' dann noch etwas Text drauf
  oLabel.Caption = "vb@rchiv"

End Sub
```
Der Code wird aber auch ausgeführt, bevor das Formular sichtbar ist. Das ist auch nicht wirklich in der Laufzeit.


----------



## deusfalsus (1. Juni 2007)

Mann! Darum gehts doch grad gar nicht. Erstens kann ich den Aufruf auch an andere Ereignisse binden, z.B. btn_Click.
Zweitens habe ich konkrete Fragen gestellt, die Du geflissentlich übergehst.
Durch die hier nun schon stattgefundene Konversation, klicken möglicherweise potentielle "Lösungswisser" nicht mehr auf den thread, obwohl Du nur unnütze Kommentare abgegeben hast, die mich zur Antwort zwingen.

Bitte antworte nur noch, wenn Du wirklich weiterhelfen kannst!

Ansonsten an alle, die aufmerksam lesen: meine Fragen sind noch unbeantwortet!

1: Mein Access (2003) bzw VB kennt zwar "Controls" aber kein ".Add" dazu.
2: Wie verpasse ich einem Textfeld einen Index, um evtl. die Load-Methode anzuwenden?
3: Kann ich ein Formular per Befehl in den Entwurfsmodus versetzen und wieder zurück?


----------



## luec (21. April 2010)

Zwar extrem spät ... aber falls der Nächste über Google diesen Thread findet:

Index zuweisen einfach in den Eigenschaften. Hier gibt es den Punkt Index.

Vorsicht wenn man dann eine Schleife benutzt diese bei 1 beginnen lassen, da man den Index 0 schon vergeben hat.


----------



## miriki (16. Juni 2010)

Moinsens, allerseits!

Ich bin einer von denen, die über Google hier gelandet sind... ;-) Und eine konkrete Frage von deusfalsus stellt sich mir ebenfalls und ist hier in der Tat geflissentlich übergangen worden:

*: 1: Mein Access (2003) bzw VB kennt zwar "Controls" aber kein ".Add" dazu.

Und mit meinem Access 2000 habe ich das gleiche Problem. Alle Lösungsvorschläge, die ich bisher per Google aufgesucht habe, weisen immer wieder auf

* Set MyLabel = Me.Controls.Add("VB.Label", "LabelNeu", Me)

hin, aber genau diese Zeile verursacht bei mir die Fehlermeldung

* Fehler beim Kompilieren - Methode oder Datenobjekt nicht gefunden.

In der Onlinehilfe gibt es zu "Controls" auch gleich gar keine Methoden, nur 4 Eigenschaften: Application, Count, Item und Parent.

Also: Was machen die ganzen Lösungsgeber anders als deusfalsus oder ich, so daß es bei denen zu funktionieren scheint?

Gruß, Michael


----------



## accessbeginner (13. Januar 2011)

Hallo,

ich habe das gleiche Problem wie schon oben beschrieben. Ich möchte Steuerelemente dynamisch hinzufügen.
Mein Access (2003) + VBA 6.5 kennt kein Controls.Add

Bei z.B. Textfeldern, die ich selber einfüge gibt es die Eigenschaft ("Index") nicht.

Hat jemand ein Lösung dafür?


----------

