Wie deklariere ich richtig?
#1
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?
Top
#2
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:
  • Wulfi
Top
#3
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".
Top
#4
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?
Top
#5
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
Top
#6
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.
Top
#7
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:
  • Wulfi
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste