Dim expectPoint0card(1)
Dim expectPoint1card(5)
Dim expectPoint2card(10)
Dim expectPoint3card(10)
Dim expectPoint4card(5)
Dim expectPoint5card(1)
Sub getMaxExpectPoint()
Dim i As Integer

Dim expectPoint(32) '0~5枚のカードを交換する場合のすべての選択肢の期待値の配列

getExpectPoint expectPoint
End Sub

Sub getExpectPoint(expectPoint() As Integer)
Dim i As Integer
'32通りの選択肢(0~5枚のカードを交換したとき)の期待値を配列にする
expectPoint(1) = expectPoint0card(1)
For i = 1 To 5
expectPoint(i + 1) = expectPoint1card(i)
Next i
For i = 1 To 10
expectPoint(i + 6) = expectPoint2card(i)
Next i
For i = 1 To 10
expectPoint(i + 16) = expectPoint3card(i)
Next i
For i = 1 To 5
expectPoint(i + 26) = expectPoint4card(i)
Next i
expectPoint(32) = expectPoint5card(1)
End Sub

VBAでポーカーゲームのプログラムを作っていて、不都合が出て、その原因がわからないので、その部分を抜粋しました。上記のプログラムについてなんですが、コンパイルエラーが発生する原因を教えてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

こんばんは。



Variant型を別の型に渡すことはできないと思いますので

Dim expectPoint(32) を
Dim expectPoint(32) As Integer と型宣言するか

又は、

Sub getExpectPoint(expectPoint() As Integer) を
Sub getExpectPoint(expectPoint()) とするか

型を統一してみてください

以上です。
    • good
    • 0

taocatさん、どうもです。


#4 を、確認しました。おっしゃるとおりでした。

ふだん、複数のプロシージャで同じ変数名を渡したりするのは、私の書かない書法でしたので、間違いと、決め付けてしまいました。失礼しました。
    • good
    • 0
この回答へのお礼

単にas integerを書き忘れていただけでした。今後、気をつけます。また、プログラミングの記述の仕方に関するアドバイスをいただきありがとうございました。

お礼日時:2005/04/19 00:47

ab5さん、Wendy02さん、こんばんは。



Wendy02さんの丁寧な回答、いつも参考にさせてもらっています。
そんなWendy02さんに反論するのは少しばかり戸惑いを感じるのですが、後学のため敢えて一言。(^^;;;

--------------------------------------------
●Dim expectPoint(32)をInteger型にしても、getExpectPoint 側の引数に、配列がある場合は、Integer型では受け入れられないような気がしますが。


Variant以外でもOKだと思います。
パラメータ配列の場合は、Variant型でないとダメですが。

-------------------------------------------------
●プロシージャーレベル・配列変数「expectPoint(32)」は、ローカルになっているのだから、他のモジュールで、その配列は使えませんね。モジュールレベルに昇格してください。


引数で持ってきてるので使えると思いますが。

------------------------------------------------

Wendy02さんから反論されませんように・・。(^^;;;
以上です。
    • good
    • 0

良く見ると、



Sub getMaxExpectPoint()
Dim i As Integer
Dim expectPoint(32) '←ここ(変数の宣言)
getExpectPoint expectPoint
End Sub

Sub getExpectPoint(expectPoint() As Integer)
'32通りの選択肢(0~5枚のカードを交換したとき)の期待値を配列にする
expectPoint(1) = expectPoint0card(1)
↑ここ(左辺)

プロシージャーレベル・配列変数「expectPoint(32)」は、ローカルになっているのだから、他のモジュールで、その配列は使えませんね。モジュールレベルに昇格してください。

あと、前回の#2の補足ですが、私が、配列を使う時は、ほとんど変数は、Variant 型にします。また、同じような変数名の下だけが変わる変数は、Typeステートメントにしてまとめたほうが分かりやすいです。
    • good
    • 0

掲示板で質問するときには、エラーが発生したら、その場所とメッセージも加えてください。

もちろん、実行時エラーの時は、エラーもメッセージも分からないけれども。

Sub getMaxExpectPoint()
Dim i As Integer
Dim expectPoint(32)
  getExpectPoint expectPoint
End Sub

Sub getExpectPoint(expectPoint() As Varinat) ←ここ。
確か、ここら辺りは、VBAのVersion によっても左右するそうですが、たぶん、getExpectPoint の引数の、expectPoint() は、Variant 型ではないでしょうか?

仮に、Dim expectPoint(32)をInteger型にしても、getExpectPoint 側の引数に、配列がある場合は、Integer型では受け入れられないような気がしますが。
    • good
    • 0

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


人気Q&Aランキング

おすすめ情報