私はvbaを学んでいますが、クラスを使い始めようとしています。そうしないと、プログラムを操作するのが難しくなり、同じようなコードを何度も何度も書いているからです。
vbaのユーザー定義オブジェクトをうまくカバーしている本をお勧めしますか?私が見つけたものはすべて、このテーマについて簡単に紹介しているだけだからです。
そのような本を探していたときに、 vb.netでたくさんの高度な本を見つけました。私が理解したように、この言語はより「強力」です(さまざまなタスクに使用できます)。
私はvbaを学んでいますが、クラスを使い始めようとしています。そうしないと、プログラムを操作するのが難しくなり、同じようなコードを何度も何度も書いているからです。
vbaのユーザー定義オブジェクトをうまくカバーしている本をお勧めしますか?私が見つけたものはすべて、このテーマについて簡単に紹介しているだけだからです。
そのような本を探していたときに、 vb.netでたくさんの高度な本を見つけました。私が理解したように、この言語はより「強力」です(さまざまなタスクに使用できます)。
VBAについて知りたい場合は、VB6のリファレンスを探してください。あなたはおそらく安いためにたくさんの参考文献や本を見つけることができます。私は自分自身がVBAが得意だと思っており、これが私が多くを学んだ方法です。最新バージョンのVBA(VBA7)でさえ、本質的にVB6のサブセットです。VB6について学べることのほとんどは、特にクラスとUDT(structs
.NETの世界のようなもの)に関して、VBAに完全に適用できます。
私自身の経験から、特定の構造体へのポインターを必要とするネイティブ関数宣言の目的で単一モジュール内でプライベートに使用する場合を除いてType
、ユーザー定義型(キーワードを使用して宣言)が役立つことはめったにありません。それらの根本的な欠点は、それらをキャストしたり、キャストしたりできないことです。これは、高度なVBAのキラーです。慣れたら、同じフィールドでクラス(com VB lingoのクラスモジュール)をすばやく作成するのはそれほど難しくありません。Variant
ポストスクリプト:これは、クラスやユーザー定義の型について学習するときに役立ちません。そのため、これをポストスクリプトとして追加します。VBScriptを検索することで、多くの優れた情報を見つけることもできます。ほとんどのVBScriptはVBAプロジェクトに直接貼り付けることができ、オブジェクトにアクセスできないなどの小さな例外を除いて、実行され Wscript
ます。MSXML (XMLファイルとインターネットの両方と対話するため)などのドキュメントの例の多くはVBScriptを示しており、このコードはすべてVBAで簡単に使用できます。
GetzとGilbertによるVBA開発者ハンドブックが私の投票になります。古くて絶版ですが、ここで電子コピーを入手できますhttps://play.google.com/store/books/details/Ken_Getz_Vba_Developer_s_Handbook?id=46toCUvklIQC&feature=null-Mike+Gilbert
ちょっとした獣ですが、素晴らしい本です
VB.NETは完全なプログラミング言語であり、Excelで実行する必要はありません。VB.netとExcelを「接続」する方法はいくつかあります。たとえば、「Com Interop」や、コードをワークブックに統合する方法です(後者は自分で行ったことがないため、ここではあいまいです)。使いやすさを実現するのは困難です。内部のExcelデータのみを操作する場合は、VBAの方が高速であるという理由だけで適しています。インターネットからデータを読み取りたい場合、データを保存/ロードしたり、独自のUIを構築したりする場合は、VBAがこれらすべてを実行できるため、vb.netの方が高速ですが、ドライバーを使用して壁に釘を打ち込むようなものです。
「私のプログラムは扱いにくい」とはどういう意味ですか?
クラスを作成しても、必ずしもツールの操作が簡単になるとは限りません...
グッドプラクティスの一般的なルール(パフォーマンス、動的、透過的)を尊重している限り、同じコードを何度も使用しても問題は発生しません。 、など...)。
クラスについて知っておくべきことは何ですか?クラスを使用すると、クラス関数( getおよびlet )を介してのみアクセスできるプライベートプロパティを含む、
標準のカプセル化されたオブジェクトを作成できます。クラスモジュールをオブジェクトインスタンスにインスタンス化し、同じクラスの複数のインスタンスを作成できます(New
キーワードを使用)。
標準モジュールではこれを行うことはできません。標準モジュール(VBA開発者が主に使用する)のプライベートプロパティを宣言できますが、この変数の「コピー」は1つしか存在しません。
比較例:
標準モジュール:
"m_Standard_Module" *
Option Explicit
Private lNumber_Test As Long
Property Get get_Number_Test() As Long
get_Number_Test = lNumber_Test
End Property
Property Let letNumber_Test(param_Number_Test As Long)
lNumber_Test = param_Number_Test
End Property
からの呼び出し:
Sub test_Standard_Module()
Dim iNumber As Integer
'--> This will produce an error, cannot be instantiated!
'Dim mdlStandard as m_Standard_Module
'Property contained by standard module is unique and cannot be copied.
m_Standard_Module.letNumber_Test = 2
iNumber = m_Standard_Module.get_Number_Test
MsgBox iNumber
End Sub
クラスモジュール:
「c_Class_Module」と呼ばれるクラス
Option Explicit
Private pNumber_Class As Long
Public Property Get number_Class() As Long
number_Class = pNumber_Class
End Property
Public Property Let number_Class(param_Number_Test As Long)
pNumber_Class = param_Number_Test
End Property
からの呼び出し:
Sub test_Class()
Dim clsClass_Module1 As c_Class_Module
Dim clsClass_Module2 As c_Class_Module
Dim lNumber1 As Long
Dim lNumber2 As Long
'Can instantiate multiple objects!
Set clsClass_Module1 = New c_Class_Module
Set clsClass_Module2 = New c_Class_Module
'property number_Class is copied for each of the class instances
clsClass_Module1.number_Class = 1
clsClass_Module2.number_Class = 2
iNumber1 = clsClass_Module1.number_Class
iNumber2 = clsClass_Module2.number_Class
MsgBox iNumber1 & ", " & iNumber2
Set clsClass_Module1 = Nothing
Set clsClass_Module2 = Nothing
End Sub
したがって、基本的に、クラスオブジェクトは、同じタイプのオブジェクト(同様のプロパティを持つ)の複数のインスタンスを作成する場合にのみ役立ちます。
ツールを作成するときはいつでも、最初にオブジェクトモデルを作成すると便利です。このモデルで、必要なオブジェクトと作成するプロパティを決定します。
VBAは継承をサポートしていないことに注意してください。つまり、あるクラスが別のクラスからプロパティを「継承」することはできません(基本的な例は、EmployeeクラスがPersonクラスから継承することです)。しかし、それは本当に私を悩ませたことはありません。