Geschachtelte With-Anweisung hiearchy
Ich habe über diese ein paar mal vor kurzem und war nur neugierig, ob es einen einfacheren Weg, dies zu tun...
With Activeworkbook
'Do Stuff
With .Sheets(1)
'More stuff Done
'...
'But now I need to refer to or pass the Sheet in the last With Statement
SomeFunctionAnswer = SomeFunction Activeworkbook.Sheets(1)
End With
'Yet more stuff Done
End With
Muss es vollständig geschrieben, oder gibt es eine Möglichkeit der Notation macht es einfacher/sauberer? Vielleicht gibt es eine Art von Eigenschaft oder Methode übergeben sich nur für diese Instanz? Was ist die Bezugnahme auf eine Eigenschaft oder Methode aus der höheren Mit?
SomeFunctionAnswer = SomeFunction .Self '???
'OR
SomeFunctionAnswer = SomeFunction .Parent.Name '???
Hoffe das macht Sinn...
- Wenn ich meine eigenen Klassen habe ich oft über eine einfache
Public Property Get Self() As [WhateverTheClassIs]
und machen esSet Self = Me
spezifisch, so dass ich es verwenden können, in Aussagen wieWith New SomeClass
und Implementierung einer factory-Methode auf die default-Instanz (erfordert das Bearbeiten der exportierten module mit einerVB_PredeclaredId = True
Modul Attribut, dann re-importieren Sie diese wieder in das Projekt). Aber für den built-in Klassen, ist es "Nein". =) - Mug: Hey! Du nur mich gelehrt
VB_PredeclaredId = True
, danke, das ist ein Juwel. Ich kann jetzt laufen Klassen über das Direktfenster, wow. - Sie sind herzlich willkommen! Ich habe dieses leere
StaticClass.cls
Klasse Modul, das in meine Dokumente mit diesem Attribut festgelegtTrue
also immer wenn ich eine "statische Klasse" ich habe einfach das import Modul =) ...es ist ein zweischneidiges Schwert, obwohl; eineUserForm
Klasse hat das Attribut aufTrue
wie gut das ist, wie Sie ein Formular anzeigen, ohne die Instanziierung eines... das ist nicht best practice); die Objekte sind gedacht, um instanziiert zu werden! Ich in der Regel halten diese für factory-Methoden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort ist schlicht und einfach, Nein, Nein.
Den
With
- Klausel ermöglicht den Zugriff auf die member und Methoden von Ihrem Gegenstand, aber Sie bietet keine Einrichtung verweisen auf das Subjekt selbst. Wenn nötig, schreiben Sie den Namen des Objekts vollständig oder finden Sie es mit anderen Mitteln.Beim Zugriff auf Methoden und member eines Objekts, die Gegenstand einer äußeren
With
- Klausel, wieder, müssen Sie den Namen vollständig. Die innereWith
, und für den ganzen Umfang, komplett verdeckt den äußerenWith
.Daher, die Art, wie Sie schrieb, Ihr code ist der richtige Weg, es zu tun.
Vielleicht einfacher, Sie einfach einer variable zuordnen, aber hier ist ein Ansatz:
Activeworkbook.Sheets(.name)
die enden, die oben sogar noch länger.Konnten Sie es aus dem inneren, mit und in dem äußeren mit. Dann könnte man die drop Activeworkbook Qualifikation.