アプリ版:「スタンプのみでお礼する」機能のリリースについて

マイクロソフトのAccess2000でVBAプログラミングを行なっておりますが、
基本的なことを教えてください。

「標準モジュール」と「クラスモジュール」の違いはなんですか?
例えば、どこからでも使えるプロシージャ

Public Function getSum( i1 as integer, i2 as interger )

getSum = i1 + i2

End Function


を定義したとして、標準モジュール内に書くのとクラスモジュール内に
書くのとでは、何が違ってきますか?その他とにかく「標準モジュール」
とクラスモジュールの違いを教えてください。

A 回答 (1件)

Public Function getSum( i1 as integer, i2 as interger )


getSum = i1 + i2
End Function

のような関数なら、標準モジュールに書いた方がいい(使い勝手がいい)です。
クラスモジュールに書くと、
Set c1 = New ClassName1
c1.getSum(1, 2)
のように、オブジェクト ( c1 ) を作ってからメソッド ( getSum() ) を呼び出さなければなりません。
クラス/オブジェクトを使用すると、今までの中央集権的なプログラムが独立分散型のプログラムになります。要は、細かいことはなるべくおのおののオブジェクトにさせるということです。

簡単なクラス/オブジェクトの例ですが、

'-----------------------------------
'CRectangle.cls
'Class:CRectangle ( 長方形 )
'-----------------------------------
Public Width As Integer
Public Height As Integer

Public Function GetArea() As Long
GetArea = CLng(Width) * CLng(Height)
End Function
'-----------------------------------

'-----------------------------------
'フォームなど、どこか適当なところ
'-----------------------------------
Private Sub コマンド1_Click()
  Dim c1 As CRectangle
  Dim c2 As CRectangle

  Set c1 = New CRectangle
  c1.Height = 100
  c1.Width = 200

  Set c2 = New CRectangle
  c2.Height = 150
  c2.Width = 250

  '面積の計算は各オブジェクトがやってくれる。
  Debug.Print c1.GetArea
  Debug.Print c2.GetArea

End Sub

↑これだけでは、あまりクラス/オブジェクトの恩恵が得られていませんが、とりあえず、こんな感じです。

クラスについて、ここで全てを語ることはできませんので、詳しいことは書籍などを参考にされた方がいいと思います。クラス/オブジェクトの根本的なことについては、Visual Basic でも Excel VBA でも Access VBA でも同じだと思いますので、クラスについて取り扱っているなら、Excel VBA の書籍でも構わないと思います。
ただ、VB/VBA のクラスは、C++ や Java のクラスとは全然違うというか、かなりチャチなので、C++ や Java の書籍は、「 VB/VBA のクラスがいかにチャチなのかを知る」にはいいと思いますが、VBA のクラスを勉強するには適さないと思います。最初はやはり VB/VBA 用のものを参考にされた方がよいでしょう。
    • good
    • 0
この回答へのお礼

お礼が遅くなりましたがありがとうございました。元々手続き型であるVBが無理やりオブジェクト指向になろうとしたのがVBにおけるクラスモジュールということでしょうか。また勉強します。

お礼日時:2004/04/14 11:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A