ここから本文です

Excel2003 VBAのクラスメソッドの呼び出しについて教えてください。

iizucaさん

2008/10/3005:10:30

Excel2003 VBAのクラスメソッドの呼び出しについて教えてください。

Excel(2003)でVBAを書いていて、以下のコードで「型が一致しません」とエラーになり、途方に暮れています。
クラスから標準モジュールへ持ってくれば正常に動くのですが元々C#のコードを移植しているので
できるだけそのままの形でVBAに移したいと思っています。
ヒントなど、教えて頂ければ幸いです。

[標準モジュール]
Dim strArray1(), strArray2() as String
Dim flag1, flag2 as Boolean
~~省略(上の変数に値を入れています)~~
Dim test as tClass
test = new tClass
tClass.tProc strArray1, strArray2, flag1, flag2 <----ここでエラー

[クラスモジュール(tClass)]
Private data1, data2 as String
Public sub tProc(ByRef strArray1() as String, ByRef strArray2() as String, flag1 as Boolean, flag2 as Boolean)
~~~
End Sub

閲覧数:
3,881
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

fuyukitaprilさん

編集あり2008/10/3019:03:46

>Dim strArray1(), strArray2() as String
>Dim flag1, flag2 as Boolean


この宣言ですと、各型一番目の変数がVariant型になってしまいます。

もしかしたら、そこ?
( C系とは宣言の仕方が異なります。省略できるのは「Dim」だけ )

また、


>tClass.tProc strArray1, strArray2, flag1, flag2

引数は括弧の中にしまわなくて良いの?
( いくらVBが括弧の省略を許すと言っても・・・ )


■追記■

試してみました。

>test = new tClass

でエラーになるのでは?


こう直したところ私の作った簡単なクラスでは問題なく走りました。

Set cls = New class1


オブジェクトなので「Set」が必要。

また、宣言時にNewしてしまってもOKです。

Dim cls As New class1


あとは、VBAの場合戻り値のない関数を呼ぶ際には「Call」を
先頭につけたほうが安全です。
( なくても呼べる場合もありますが、基本はつけておく。 )


【 追伸 】

括弧ナシで引数を渡す方法ははじめて知りました。
( 少し笑えました。 )

でも、あまり・・・・・・と、いうかまったく使いたくない呼び方です。
特殊な形をわざわざ覚えるメリットはなさそうなので・・・

れがしー?

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

編集あり2008/10/3011:54:12

test = new tClass

Set test = new tClass

下の回答者、>引数は括弧の中にしまわなくて良いの?
しまったらByrefにならんよ(もしくはCall)

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。