VBA-äquivalent zur C# verwenden oder VB.NET Importe / Aliase anlegen
Basis-Referenz: Zehn Code-Konvertierungen für VBA, Visual Basic .NET und C#
Hinweis: habe ich bereits erstellt und importiert *.dll
diese Frage ist über Aliase.
Sagen wir, der programmatische name einer Test
Klasse TestNameSpace.Test
[ProgId("TestNamespace.Test")]
public class Test ...
Nun, sagen wir eine C# - Lösung wurde versiegelt und kompiliert in einen *.dll
und ich bin auf Sie verweisen in der Excel-VBE. Hinweis: an dieser Stelle kann ich nicht ändern Sie den programmatischen Namen wie, wenn die *.dll
war nicht von mir geschrieben.
Dies ist in VBA
: Anstelle der Deklaration einer Variablen wie diese:
Dim myTest As TestNameSpace.Test
Set myTest = new TestNameSpace.Test
Ich würde es vorziehen, nennen es (immer noch in VBE)
Dim myTest As Test
Set myText = new Test
In C# würde man normalerweise sagen
using newNameForTest = TestNamespace.Test;
newNameForTest myTest = new NewNameForTest;
Hinweis: Angenommen, es gibt keine namespace-Konflikte in der VBA
Projekt
Frage: gibt es einen entsprechenden Aufruf in VBA
zu C#
using
oder VB.NET
imports
Aliase?
InformationsquelleAutor | 2013-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Interessante Frage (ständig über Sie, aber nie gedacht, über Ihre genaue Bedeutung). Die definition des
Importiert
- Anweisung (gleich fürusing
) ist ziemlich klar: seine einzige Funktion ist die Verkürzung der Verweise, die durch entfernen der entsprechenden namespaces. So, die erste Frage ist: hat VBA so eine Sache (namespaces)? Und die Antwort ist Nein, wie man Lesen kann aus mehreren Quellen; Beispiele: Link 1 Link 2In der Zusammenfassung, nachdem Sie nicht gefunden haben, eine einzige Referenz für VBA-Anweisung etwas ähnliches zu
Imports
/using
und bestätigt haben, dass VBA nicht der Ansicht, die "Struktur" die Rechtfertigung Ihrer Verwendung (namespaces), ich denke, dass ich in der Lage bin zu sagen: Nein, es gibt nicht so etwas in VBA.Darüber hinaus sollten Sie im Hinterkopf behalten, dass es nicht eine wirkliche Geltung. Zum Beispiel: bei der Umwandlung eines VB.NET code, wo
Imports
verwendet werden könnten, wie:würde der code komplett geändert, so dass der resultierende string wird nicht so lange:
Ich denke, dass dies eine gute grafische Grund zu erklären, warum VBA nicht brauchen, um diese Art der Dinge: VB.NET Konten für eine Breite Vielfalt von Realitäten, die werden richtig klassifiziert (namespaces); VBA-Konten, die für eine viel kleinere Anzahl von Situationen und damit kann es sich leisten, keine so systematische, lang -, namens-Klassifikation.
-------------------------- KLÄRUNG
Imports
/using
ist ein bloßer name, Verkürzung, das heißt, statt schreiben, was auch immer.whatever2.whatever3 jedes mal, wenn Sie ein Objekt von der angegebenen namespace in einerModule
/Class
fügen Sie einImports
/using
Anweisung an den start, die im Grunde bedeutet: "für alle Mitglieder der namespace X, nur vergessen, die überschrift bla, bla".Ich sage nicht, dass man nicht emulieren diese Art von Verhalten; nur hervorheben, dass ein in-built Funktionen, um kurze Namen, die Sinn macht VB.NET, wo die Namen können sich wirklich lange, aber nicht so viel in VBA.
In einem der links, die ich angegeben habe, der Kerl schlägt eine Art und Weise zu emulieren namespaces. Ich sage nicht, dass Sie nicht kommen können mit etwas; ich sage, es hätte nicht gemacht viel zu viel Sinn, die Umsetzung einer integrierten Funktionalität zu kurzen Namen, wenn der längste name, den Sie haben, besteht aus nur zwei Worten.
oh, vielleicht war ich unklar, mit meinem Kommentar. Bemerken Sie eine hidden built-in-Funktion im VBE, der Ihnen erlaubt zu sagen
("Sheet1")
stattApplication.ThisWorkbook.Sheets("Sheet1")
. Jetzt überlegen Sie, wie jedes element auf der rechten Seite der Punkt) müssen Erben von der übergeordneten Klasse(linke Seite). Da dies eine eingebaute Funktion, es ist versiegelt und daher erstellen Sie Ihre eigenen Klassen und die Mitglieder werden nicht jemals zulassen, Sie zu nennen, in einer ähnlichen Weise. Sie haben immer einen vollständigen Pfad angeben, um Ihre Klassen Class1.Class2.ClassNm,VBE wird nicht erstellen Sie einen namespace für Sie. hilft es zu verstehen, mein 1. Kommentar?Ja. Auf der anderen Seite, meine Annahme (ohne dass dachte viel darüber) ist, dass die Emulation etwas wie Vererbung kann wirklich schwierig (oder unmöglich). Aber emuliert einen Kurzschluss aufrufen von Verfahren möglich sein könnten (wie zum Beispiel, Verwendung von benannten Bereichen bei verweisen in Excel-Zellen). Eh... sagen, dass die (logische) Erklärung, um nicht mit einer integrierten Art und Weise zu verkürzen, die Aufrufe in VBA ist nicht mit zu langen Pfaden, klingt ziemlich vernünftig zu mir. Vor allem, wenn es keine wahre Unmöglichkeit, für eine solche Umsetzung (warum es nicht erlaubt Sie zu verwenden "Wort" statt "zu Wort.Anwendung"?).
PS: VBA hat auch die gleiche Funktionalität finden Sie im VBE. Sie können call range("A1") und die Arbeitsmappe und Arbeitsblatt sind implizit. Dies ist im Grunde das, was Importiert hat. VBA implementiert diese option unter diesen Bedingungen, denn die Wege können lang werden. Es nicht umzusetzen, es in der Regel, weil alle anderen Wege sind kurz genug.
InformationsquelleAutor varocarbas
Die Antwort ist Nein: es ist ein built-in-VBE-Funktion, erkennt die Verweise zum Projekt Hinzugefügt und die Aliase erstellt zur Laufzeit(VBE der Laufzeit), wenn es keine Kollisionen mit Namen, die
Im Fall von Namenskonflikten in Ihrer registry alle
.
Punkte werden ersetzt mit_
unterstreicht.»
ProgId
's (Programmatic Identifier)In der COM, es ist nur im late-Bindung. Es ist, wie Sie einen Anruf tätigen, ein neues Objekt zu erstellen
»
EarlyBinding
undLateBinding
In der frühen Bindung, die Sie angeben, den Typ des Objekts, die Sie erstellen mithilfe der
new
Schlüsselwort. Die Namen von Ihnen-Objekt sollte pop-up mit der VBA intellisense. Es hat nichts zu tun mit derProgId
. Zum abrufen der aktuellen Namensraum für Ihr Objekt-Typ - openObject Explorer
F2 und suchen Sie dortDieser Artikel erklären, Woher die Namen kommen von der in die Frühe Bindung Abschnitt
verwenden Sie die gleichen link für , Wenn Sie späten Bindung verwenden
für MSDN-Program-IDS Abschnitt finden Sie diese
InformationsquelleAutor