Registriert seit: 25.09.2014
Version(en): 2010-2013
Hallo Leute,
habe mir folgenden kleinen Code auf meiner Userform zusammengebastelt:
Dim vbobj
For Each vbobj In Me.Controls
If vbobj.Top > 150 Then
vbobj.Top = vbobj.Top + 100
End If
Next
Es werden also alle Controls die die entsprechende Bedingung erfüllen, auf meiner Userform um 100 Einheiten nach unten verschoben.
Bei der Deklaration von vbobj überlasse ich meinem Compiler die richtige Typauswahl.
Doch wie würde hier die richtige und vollständige Deklaration lauten?
Wie müßte ich deklarieren, damit mir auch die Intellisense zur Verfügung steht?
Registriert seit: 06.11.2017
Version(en): 2013
06.12.2017, 20:36
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2017, 20:36 von Bamberg.)
Huhu Wulfi,
das bekommst Du mit einem Debug.Print Typename(vbobj) meistens schon raus ...
Code:
Dim vbobj
For Each vbobj In Me.Controls
Debug.Print Typename(vbobj)
Exit For
If vbobj.Top > 150 Then
vbobj.Top = vbobj.Top + 100
End If
Next
LG Gerd
... sorry, der würde Dir ja in diesem Fall nur den Type des Control anzeigen ... also verrate ich es Dir doch :)
Dim vbobj As MSForms.Control
Folgende(r) 1 Nutzer sagt Danke an Bamberg für diesen Beitrag:1 Nutzer sagt Danke an Bamberg für diesen Beitrag 28
• Wulfi
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi,
(06.12.2017, 20:26)Wulfi schrieb: Bei der Deklaration von vbobj überlasse ich meinem Compiler die richtige Typauswahl.
damit wird meines Wissens nicht die einzig Richtige = Passende genommen, sondern es ist "Variant".
Registriert seit: 25.09.2014
Version(en): 2010-2013
Hallo Ralf,
du hast völlig recht. Und mit Variant läuft es natürlich auch.
Heißt das im Umkehrschluß eigentlich nicht, dass dem Rechner der Typ erstmal völlig egal ist. Hauptsache die
Größe der Speicherbelegung stimmt? Und da ist man mit Variant dann immer auf der sicheren Seite?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Wulfi,
(06.12.2017, 21:28)Wulfi schrieb: Heißt das im Umkehrschluß eigentlich nicht, dass dem Rechner der Typ erstmal völlig egal ist. Hauptsache die
Größe der Speicherbelegung stimmt? Und da ist man mit Variant dann immer auf der sicheren Seite?
das mag stimmen, aber Du vergibst Dir damit die
Intellisense beim Schreiben von Code.
Gruß Uwe
Registriert seit: 25.09.2014
Version(en): 2010-2013
Richtig Uwe. Die Intellisense hatte ich ja auch schon angesprochen. Aber was mindestends genauso wichtig ist, dass es bei der
richtigen Deklaration zumal wenn es sich um Objekte handelt ja auch um den Erkenntnisgewinn geht.
Deshalb jetzt meine Anschlußfrage:
Dim vbobj As MSForms.Control
Set vbobj = ???
Was muss anstelle des Fragezeichens stehen,
damit ich eine Objektzuordnung habe.
Danke schon mal im voraus für eure Mühe.
Registriert seit: 06.11.2017
Version(en): 2013
06.12.2017, 22:54
(Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2017, 22:54 von Bamberg.)
Hihi ... is ja wie ne Schnitzeljagd
Mein Vorschlag ... ein Object aus der Controls-Collection:
Code:
Set vbobj = Me.Controls(0)
... und nun mach ich das Ganze noch spannender ...
Die Control-Methode ist
überladen! Sie beinhaltet mehrere Object-Typen.
Folgende(r) 1 Nutzer sagt Danke an Bamberg für diesen Beitrag:1 Nutzer sagt Danke an Bamberg für diesen Beitrag 28
• Wulfi