2013-07-10 7 views
7

ベース基準の作成:Ten Code Conversions for VBA, Visual Basic .NET, and C#
VBA /別名に

注:私はすでに作成して*.dllを輸入しているが、この質問を約エイリアスです。

は、C#ソリューションを密封し、 *.dllにコンパイルされ、私はExcelのVBEでそれを参照していますされていると言う、のは Testクラスのプログラム名は、今 TestNameSpace.Test

[ProgId("TestNamespace.Test")] 
public class Test ... 

あるとしましょう。注:この時点で私は*.dllが私によって書かれていないかのようにプログラム名を変更することはできません。 C#ので

Dim myTest As TestNameSpace.Test 
Set myTest = new TestNameSpace.Test 

私は(VBEではまだ)それを呼び出すことを好むだろう

Dim myTest As Test 
Set myText = new Test 

あなたはなります

これはVBAにあります。その代わり、このような変数を宣言する通常は

using newNameForTest = TestNamespace.Test; 
newNameForTest myTest = new NewNameForTest; 

注:C#usingまたはVB.NETimports別名にVBAで同等の通話がありは、名前空間がVBAプロジェクト

質問にを競合しないがあると仮定?

答えて

2

答えはノーです:名前の場合は名前の衝突

が存在しない場合は、プロジェクトに追加の参照を認識し、実行時にエイリアスを作成し、内蔵のVBE機能(VBEのランタイム)がありますレジストリの競合はすべて.のドットが_の下線で置き換えられます。

» ProgIdさん  (Programmatic Identifiers)

COMには、それが唯一の遅延バインディングで使用されています。それはあなたが早くあなたがnewキーワードを使用して作成されたオブジェクトの種類を指定するバインディングでは、新しいオブジェクト

Dim myObj = CreateObject("TestNamespace.Test") 


» EarlyBindingLateBinding

を作成するための呼び出しを行う方法です。あなたのオブジェクトの名前は、VBAのインテリセンスでポップアップする必要があります。それはProgIdとは関係ありません。あなたのオブジェクトタイプのために使用される実際の名前空間を取得するには - オープンObject ExplorerF2と名前が遅延バインディングを使用する場合はに同じlinkを使用
アーリーバインディングのセクションではどこから来た説明が

This articleそれを見つけますMSDNプログラムによる識別子セクションの

this

3

興味深い質問(常に使用していますが、正確な意味は考えていません)。 definition of the Imports statementusingと同じ)はかなり明確です。その唯一の機能は、対応する名前空間を削除して参照を短くすることです。したがって、最初に質問するのは次のとおりです。VBAなどのもの(名前空間)はまったくありますか?あなたが複数の情報源から読むことができるように、答えはいいえです。例:要約するとLink 1Link 2

Imports/usingに似た何かをして任意のVBAのステートメントに単一の参照を発見したと、VBAはその使用(名前空間)を正当化する「構造」を考慮していないことを確認した後ではなく、私が思います私は言うべき立場にいる:いいえ、VBAにはそういうことはありません。

また、実際には適用できないことにご注意ください。同様に、Importsが使用されるかもしれないVB.NETコードを変換するとき:例えば

Dim wdApp As Word.Application ' Prefacing the library's display name. 

Imports Microsoft.Office.Interop.Word 
... 
Dim wdApp As Application 
コードは、結果の文字列があればならないであろうように、完全に変更されます私はこれがなぜVBAがこの種のものを持つ必要がないのかを説明する良いグラフィカルな理由だと思う:VB。NETは、適切に分類されなければならないさまざまな現実(ネームスペース)を考慮に入れます。 VBAは状況の数がはるかに少ないため、体系的で長い名前の分類を実行できない場合があります。

--------------------------明確化

Imports/usingではなく書面で、つまり、単なる名前の短縮であります何でも.whatever2.whatever3 Module/Classで指定された名前空間のオブジェクトを使うたびに、基本的には、最初にImports/usingという文が追加されます。「名前空間Xのすべてのメンバーにとって、すべての見出しbla、bla "

この種の動作をエミュレートすることはできません。 VBAで名前が本当に長くなるかもしれないがVB.NETでは短い名前に組み込まれた機能があることを強調しているだけです。

+0

なぜ誤解を参照してください?名前空間で継承するものは何ですか?名前空間はすべてを適切に分類する方法です。継承は、所与のオブジェクトの定義をスピードアップする(例えば、この他のオブジェクトからすべての情報を取り出す)ために使用されるアプローチである。継承は輸入とは関係ありません。 – varocarbas

+0

私が提供したリンクの1つでは、この人は名前空間をエミュレートする方法を提案しています。私はあなたが何かを考え出すことができないと言っているわけではありません。最長の名前がちょうど2つの単語で構成されている場合、ショートネームの組み込み機能を実装するのはあまり意味がありませんでした。 – varocarbas

+1

ああ、多分私は私のコメントに不明でした。 VBEには、Application.ThisWorkbook.Sheets( "Sheet1") 'の代わりに'( "Sheet1") 'と言うことができる*隠れたビルトイン機能があります。次に、すべての要素(ドットの右側)がその親クラス(左側)から継承する方法について考えてみましょう。これは組み込みの機能なので、それは封印されているため、独自のクラスを作成し、メンバでも同様の方法で呼び出すことはできません。クラスClass1.Class2.ClassNmへのフルパスを指定する必要がありますが、VBEは名前空間を作成しません。これは私の最初のコメントを理解するのに役立つのですか? –

関連する問題