Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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?
Antworten 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
Antworten Top
#3
Hi,

(06.12.2017, 19: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".
Antworten 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?
Antworten Top
#5
Hallo Wulfi,

(06.12.2017, 20: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
Antworten 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.
Antworten 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
Antworten Top


Gehe zu:


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