Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Werkzeug
BildScreenshot zu Werkzeug Werkzeug-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen

DTPicker zur Laufzeit erzeugen | Herbers Excel-Forum


Betrifft: DTPicker zur Laufzeit erzeugen von: {Boris}
Geschrieben am: 11.11.2009 10:38:12

Hi Leute,

ich erzeuge zur Laufzeit 2 DTPicker und platziere sie innerhalb 2 vorgegebener Frames.
Beim Aufruf des Userforms wird der erste Picker aber vom Frame überlagert. Das habe bis dato nur dadurch umgehen können, dass ich den Frame aus- und wieder einblende. Das muss doch auch anders gehen - wenn ja: Wie?

Zusatzfrage: Warum benötige ich bei der Erzeugung der Picker zur Laufzeit eigentlich keinen Verweis auf die Windows Common Controls (das ist der einzige Grund, warum ich sie zur Laufzeit erzeuge)?

Private Sub UserForm_Initialize()
Dim objDTPicker As Object
On Error GoTo Err_Handler
Set objDTPicker = Me.Controls.Add("MSComCtl2.DTPicker.2")
With objDTPicker
   .Height = 16
   .Name = "DTPicker1"
   .Left = 30
   .Top = 24
   .Width = 120
End With
Set objDTPicker = Me.Controls.Add("MSComCtl2.DTPicker.2")
With objDTPicker
   .Height = 16
   .Name = "DTPicker2"
   .Left = 30
   .Top = 66
   .Width = 120
End With
'###Das ist meine Krücke, um den ersten Picker sichtbar zu machen
With Me.Frame1
   .Visible = False
   .Visible = True
End With
Err_Handler:
End Sub
Grüße Boris

  

Betrifft: Keine Lösung nur ein Tipp. von: Tino
Geschrieben am: 11.11.2009 10:48:08

Hallo,
warum so kompliziert?
Erstelle diese normal und die Eigenschaft Visible auf False und blende diese bei Bedarf ein.

Zu der Zusatzfrage:
Die Verweise sind schon vorhanden, sonst könntest Du diese in der Werkzeugsammlung nicht finden.


Gruß Tino


  

Betrifft: AW: Keine Lösung nur ein Tipp. von: {Boris}
Geschrieben am: 11.11.2009 11:00:12

Hi Tino,

warum so kompliziert?
Erstelle diese normal und die Eigenschaft Visible auf False und blende diese bei Bedarf ein.


Die Frames sollen IMMER sichtbar sein - darin eingebettet halt nur die Picker. Und der erste Frame "überlagert" anscheinend den 1. Picker. Daher die Aus-/Einblendaktion, von der ich glaube, dass sie suboptimal ist.

Zu der Zusatzfrage:
Die Verweise sind schon vorhanden, sonst könntest Du diese in der Werkzeugsammlung nicht finden.


Ja - ich habe sie in der Werkzeugsammlung, da ich den Verweis manuell auf die MSCOMCT2.OCX gesetzt habe. Aber alle Kollegen, die mit der Datei arbeiten sollen, haben das nicht. Und ich habe keine Lust, dass mehr als 100 mal manuell bei jedem zu erledigen. Daher erzeuge ich die Picker lieber zur Laufzeit und stell mir halt die Frage, warum ich bei dieser Variante keinen Verweis benötige. Ich will ja gerne dazulernen :-)

Danke und Grüße

Boris


  

Betrifft: mich würde es schon sehr wundern von: Tino
Geschrieben am: 11.11.2009 11:30:45

Hallo,
wenn dieses nicht eingebunden ist, dass Du diese zur Laufzeit erstellen kannst.
Also was ich sagen will, wenn Du dieses unter weitere Steuerelemente nicht findest,
wird es zur Laufzeit mit der Erstellung so auch nicht funktionieren.



Ist es vorhanden, funktioniert es auf der Userform auch ohne diese zur Laufzeit zu erstellen.

Gruß Tino


  

Betrifft: AW: mich würde es schon sehr wundern von: Nepumuk
Geschrieben am: 11.11.2009 12:28:39

Hallo Tino,

das sind keine Verweise, sondern "nur" die registrieren Controls.

Gruß
Nepumuk


  

Betrifft: @Nepumuk von: Tino
Geschrieben am: 11.11.2009 12:46:57

Hallo,
wenn ich auf einem System wo diese MSCOMCT2.0 bei der Installation von Office nicht registriert wird, finde ich es nicht unter Weitere Steuerelemente,
dann kennt VBA MSComCtl2.DTPicker.2 nicht und ich kann es weder von Hand erstellen noch zur Laufzeit.
Also müsste ich mir die entsprechenden Dateien in einen Ordner Packen und über Extras Verweise
diese MSCOMCT2.0 laden (einbinden) dieser Verweis nennt sich
'Microsoft Windows Common Controls...', danach finde ich diesen auch unter Weitere Steuerelemente und kann diese von Hand erstellen.
(ob dies gegen Urheberrechte verstößt, weis ich jetzt auch nicht)
Dann brauch ich diese aber nicht zur Laufzeit erstellen, weil es auch so funktioniert,
ich muss eben nur die Datei samt der MSCOMCT... mitgeben.


Stimmt doch, oder?

Gruß Tino


  

Betrifft: AW: @Nepumuk von: Nepumuk
Geschrieben am: 11.11.2009 13:17:28

Hallo Tino,

ich kann jetzt nicht sagen, ob das für die MSComCtl2 auch zutrifft. Manche DLL/OCX muss nicht registriert werden. Da reicht es wenn sie im selben Ordner liegt wie die Anwendung und ein Verweis zur Laufzeit erstellt wird.

Gruß
Nepumuk


  

Betrifft: AW: @Nepumuk von: Tino
Geschrieben am: 12.11.2009 07:58:07

Hallo,
ja wenn dieser DTPicker auf der Form gezeichnet ist, findet man unter Verweise dieses
Microsoft Windows Common Controls, danach kennt VBA dieses Teil.

Wenn ich es aber zur Laufzeit zeichnen will,
aber auf diesem Rechner ist dieses Teil nicht registriert, weil die MSCOMCT2.0 nur in den Ordner kopiert wurde funktioniert dies nicht, es funktioniert nur wenn es schon auf der Form vorhanden ist,
bei mir auf der Testumgebung ist so.

Daher wird es so wie es Boris vor hat, nicht funktionieren.

Gruß Tino


  

Betrifft: AW: DTPicker zur Laufzeit erzeugen von: Nepumuk
Geschrieben am: 11.11.2009 11:06:55

Hallo Boris,

wenn du die DTPicker auf dem Frame haben willst, dann musst du sie auch in diesen einfügen.

Private Sub UserForm_Activate()
    Dim objDTPicker As Object
    On Error GoTo Err_Handler
    Set objDTPicker = Frame1.Controls.Add("MSComCtl2.DTPicker.2")
    With objDTPicker
        .Height = 16
        .Name = "DTPicker1"
        .Left = 30
        .Top = 24
        .Width = 120
    End With
    Set objDTPicker = Frame1.Controls.Add("MSComCtl2.DTPicker.2")
    With objDTPicker
        .Height = 16
        .Name = "DTPicker2"
        .Left = 30
        .Top = 66
        .Width = 120
    End With
    Err_Handler:
End Sub

Die Positionierung erfolgt natürlich relativ zur linken oberen Ecke des Frames.

LG
Max


  

Betrifft: So einfach kann das sein ;-) von: {Boris}
Geschrieben am: 11.11.2009 11:24:24

Hi Max,

besten Dank!
Kannst Du mir denn vielleicht auch noch die Zusatzfrage beantworten?

Grüße Boris


  

Betrifft: AW: So einfach kann das sein ;-) von: Nepumuk
Geschrieben am: 11.11.2009 11:31:35

Hallo Boris,

das Zauberwort heißt Late Binding. Der Verweis wird schon erzeugt, aber nicht fest eingetragen.

Gruß
Max


Beiträge aus den Excel-Beispielen zum Thema "DTPicker zur Laufzeit erzeugen"