tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル「引数を省略できません。」というエラーの対処を教えてください。
記事No11562
投稿日: 2008/02/28(Thu) 15:10
投稿者tea
初歩的なことで申し訳ありませんが、質問させてください。

クラス内に

Call TimeOutAddTopic

というコードを記述して、同じクラス内の下記コードを呼び出したいのですが、

Public Function TimeOutAddTopic(ByVal bbTimeOutTopic As bbTopicType)
    With mp
        '追加するトピックの各項目'
        .Parent.Journal.AddTopic .Parent.Quarter, .Parent.TimeOnQuarter,_
         .TeamIndex, .TeamChar, "", bbTimeOutTopic, "", ""
    End With
End Function

「引数を省略できません。」というエラーが出ます。
Call TimeOutAddTopicの後に(ByVal bbTimeOutTopic As bbTopicType)と記述し
すると、今度はasの部分が反転表示されてコンパイルエラーとなります・・・。

基本的な事柄で申し訳ありませんが、どうか教えてください。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: 「引数を省略できません。」というエラーの対処を教えてください。
記事No11564
投稿日: 2008/02/28(Thu) 15:41
投稿者よねKEN
#不明点があるので想像ですが

mpというのは何のオブジェクトでしょうか?
出てきている単語(AddTopic、TeamIndexなど)を見る限り、
VB標準のオブジェクトではないように思えます。また、Googleで検索しても
それらしいコンポーネントも見つかりません。

何かの外部コンポーネントかあるいは自作コンポーネントを使われているのでは?
と予想するのですが、その辺を明確にしていただいた方がよいと思います。

> Public Function TimeOutAddTopic(ByVal bbTimeOutTopic As bbTopicType)
>     With mp
>         '追加するトピックの各項目'
>         .Parent.Journal.AddTopic .Parent.Quarter, .Parent.TimeOnQuarter,_
>          .TeamIndex, .TeamChar, "", bbTimeOutTopic, "", ""
>     End With
> End Function
>
> 「引数を省略できません。」というエラーが出ます。

mp(不明)のParentプロパティ(何のオブジェクトを返すのか不明)の
Journalプロパティ(何のオブジェクトを返すのか不明)のAddTopicメソッドの
引数の仕様についてマニュアル等を調べてみてください。

[ツリー表示へ]
タイトルRe^2: 「引数を省略できません。」というエラーの対処を教えてください。
記事No11566
投稿日: 2008/02/28(Thu) 16:33
投稿者tea
よねKENさん、回答ありがとうございます。

また、下手な質問で申し訳ありませんでした。

mpはTeamクラス内で

Option Explicit
'ユーザー定義型変数を宣言'
Private Type UTeam
    Parent As Game
    IsDirty As Boolean
    TeamIndex As Long
    TeamChar As String
    
    Name As String
    Coach As Player
    ACoach As Player
        
    Playeries As Collection
    GameMembers(1 To 5) As Player
    
    TimeOutted(bbTimeOutMin To bbTimeOutMax) As Integer
    QuarterScore(bbQuarterMin To bbQuarterMax) As Long
    QuarterFoulCount(bbQuarterMin To bbQuarterMax) As Long
End Type
Private mp As UTeam

と宣言しています。

.Parentは作って(改良)いるソフトはゲームでA,Bチームのことを指します。

Public Property Get Parent() As Game
    'オブジェクト変数にオブジェクトを格納'
    Set Parent = mp.Parent
End Property

.Journalはソフトを動作させた場合に起こったイベントを記録していくものです。

.AddTopicはJournalクラスに以下のように記述されています。

Public Sub AddTopic(ByVal Quarter As Long, _
                    ByVal TimeOnQuarter As Date, _
                    ByVal TeamIndex As Long, _
                    ByVal TeamChar As String, _
                    ByVal PlayerUniformNumber As Long, _
                    ByVal TopicType As bbTopicType, _
                    ByVal TopicParam1 As Variant, _
                    ByVal TopicParam2 As Variant)
    'ローカル変数を宣言'
    Dim oJT As JournalTopic
    
    With mp
        '' ジャーナル記録。
        Set oJT = New JournalTopic
        With oJT
            .Init Me
            .TimeOnQuarter = TimeOnQuarter
            .TeamIndex = TeamIndex
            .TeamChar = TeamChar
            .PlayerUniformNumber = PlayerUniformNumber
            .TopicType = TopicType
            .TopicParam1 = TopicParam1
            .TopicParam2 = TopicParam2
            
        End With
        'コレクションにジャーナル記録を追加'
        .QuarterJournal(Quarter).Add oJT
        
        '' 結果記録。
        With .Parent.Team(TeamIndex)
            With getPlayerOrCoach(TeamIndex, PlayerUniformNumber)
                .TopicCount(TopicType) = .TopicCount(TopicType) + 1
                Select Case TopicType
                    Case bbFoulTopic:       .FoulType(.FoulCount) = TopicParam1
                    Case bbPlayInTopic:     .IsPlayIn = True
                    Case bbPlayOutTopic:    .IsPlayIn = False
                    '---ジャーナル用タイムアウト---
                    'Case bbTimeOutTopic:    .ChargedTimeOut
                End Select
            End With
            
            '' チーム。
            Select Case TopicType
                Case bb2PShotTopic
                    .QuarterScore(Quarter) = .QuarterScore(Quarter) + 2
                Case bb3PShotTopic
                    .QuarterScore(Quarter) = .QuarterScore(Quarter) + 3
                Case bbFreeThrowTopic
                    .QuarterScore(Quarter) = .QuarterScore(Quarter) + 1
                Case bbFoulTopic:
                    .QuarterFoulCount(Quarter) = .QuarterFoulCount(Quarter) + 1
            End Select
        End With
        
        
        
        .IsDirty = True
        'トピックの追加後に、追加したトピックを知らせる。'
        .Parent.RaiseJournalAfterInsert Quarter, .QuarterJournal(Quarter).Count
    End With
End Sub

質問した.Parent.Journal.AddTopic .Parent.Quarter, .Parent.TimeOnQuarter, .TeamIndex,
.TeamChar, "", bbTimeOutTopic, "", ""は
.Parent.Journal.AddTopic
.Parent.Quarter(1から4のどのクォーターか?),
.Parent.TimeOnQuarter(クォーターの時間は?),
.TeamIndex(0がAチーム、1がBチーム),

.TeamChar,はクラス内で下記のようにに宣言しています。
Public Property Get TeamChar() As String
    TeamChar = mp.TeamChar
End Property

""(背番号が入りますが、ここでは空白)
, bbTimeOutTopic("チャージドタイムアウト"の文字が入ります。),
""(ここも空白です。)
, ""(ここも空白です。)

参考にしたコードは以下のコードで、これを真似てコードを書き換えてみた
ものの「引数を省略できません」とエラーが出るんです。

Public Function AddTopic(ByVal PlayerUniformNumber As Long, _
                    ByVal TopicType As bbTopicType, _
                    ByVal TopicParam1 As Variant, _
                    ByVal TopicParam2 As Variant)
    With mp
        '追加するトピックの各項目'
        .Parent.Journal.AddTopic .Parent.Quarter, .Parent.TimeOnQuarter,
     .TeamIndex, .TeamChar, PlayerUniformNumber, TopicType,
       TopicParam1, TopicParam2
    End With
End Function

わかりづらい文章になって申し訳ありませんが、引数をどう書けば解決するの
か教えてください。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: 「引数を省略できません。」というエラーの対処を教えてください。
記事No11565
投稿日: 2008/02/28(Thu) 15:50
投稿者
> Public Function TimeOutAddTopic(ByVal bbTimeOutTopic As bbTopicType)

と宣言されているので、
TimeOutAddTopicをCallする際にはbbTopicType型の変数(オブジェクト?)を
引数として渡してあげる必要があります。

「引数を省略できません」

というメッセージが表示されるのは
本来渡されるべき引数が渡されていないからですね。

[ツリー表示へ]
タイトルRe^2: 「引数を省略できません。」というエラーの対処を教えてください。
記事No11567
投稿日: 2008/02/28(Thu) 17:22
投稿者tea
琴さん、回答ありがとうございます。
bbTopicTypeは標準モジュールで宣言しています。
標準モジュール内では

Public Enum bbTopicType
    '2ポイントシュートを打った場合は"1"を宣言します。'
    bb2PShotTTopic = 1
    '2ポイントシュートを成功した場合は"2"を宣言します。'
    bb2PShotTopic = 2
    '3ポイントシュートを打った場合は"3"を宣言します。'
    bb3PShotTTopic = 3
    '3ポイントシュートを成功した場合は"4"を宣言します。'
    bb3PShotTopic = 4
    'フリースローシュートを打った場合には"5"を宣言します。'
    bbFreeThrowTTopic = 5
    'フリースローシュートを成功した場合には"6"を宣言します。'
    bbFreeThrowTopic = 6
    'オフェンスリバウンドの獲得に成功した場合には"7"を宣言します。'
    bbOffReboundTopic = 7
    'ディフェンスリバウンドの獲得に成功した場合には"8"を宣言します。'
    bbDefReboundTopic = 8
    'アシストを成功した場合には"9"を宣言します。'
    bbAssistTopic = 9
    'スティールに成功した場合には"10"を宣言します。'
    bbSteelTopic = 10
    'ターンオーバーを犯した場合には"11"を宣言します。'
    bbTurnOvertopic = 11
    'ブロックショットが成功した場合には"12"を宣言します。'
    bbBlockshotTopic = 12
    'ファウルを犯した場合は"13"を宣言します。'
    bbFoulTopic = 13
    
    'プレイヤーがゲームに入った場合は"13"を宣言します。'
    bbPlayInTopic = 14
    'プレイヤーがゲームから退いた場合は"14"を宣言します。'
    bbPlayOutTopic = 15
    '---タイムアウト取得の場合(ジャーナル)----
    bbTimeOutTopic = 16
End Enum

Call TimeOutAddTopicの後に「(」を入れてみるとインテリセンスで以下のよう
な表示が出てきたのでに書き換えてみましたが、コードが赤色になり「as」の部
分が反転表示となり再びエラーで、「修正候補:区切り記号または)」とでます。
わかりません・・・。
引数を教えてください。
よろしくお願いします。

Call TimeOutAddTopic(byval bbtimeouttopic as bbTopicType)

Public Function TimeOutAddTopic(ByVal PlayerUniformNumber As Long, _
                                ByVal bbTimeOutTopic As bbTopicType, _
                                ByVal TopicParam1 As Variant, _
                                ByVal TopicParam2 As Variant)
    With mp
        '追加するトピックの各項目'
        .Parent.Journal.AddTopic .Parent.Quarter,.Parent.TimeOnQuarter,.TeamIndex, .TeamChar, "", bbTimeOutTopic, "", ""
    End With
End Function

> > Public Function TimeOutAddTopic(ByVal bbTimeOutTopic As bbTopicType)
>
> と宣言されているので、
> TimeOutAddTopicをCallする際にはbbTopicType型の変数(オブジェクト?)を
> 引数として渡してあげる必要があります。
>
> 「引数を省略できません」
>
> というメッセージが表示されるのは
> 本来渡されるべき引数が渡されていないからですね。

[ツリー表示へ]
タイトルRe^3: 「引数を省略できません。」というエラーの対処を教えてください。
記事No11571
投稿日: 2008/02/28(Thu) 19:03
投稿者
> Call TimeOutAddTopicの後に「(」を入れてみるとインテリセンスで以下のよう
> な表示が出てきたのでに書き換えてみましたが、コードが赤色になり「as」の部
> 分が反転表示となり再びエラーで、「修正候補:区切り記号または)」とでます。
> わかりません・・・。
> 引数を教えてください。
> よろしくお願いします。
>
> Call TimeOutAddTopic(byval bbtimeouttopic as bbTopicType)

インテリセンスは「こういう定義になってますよー」と表示するだけですから
そのまま書いてもNGですね。
bbTopicTypeは列挙型なんで該当する値でも渡してあげればいいかな?

例えば
  Call TimeOutAddTopic(13)
もしくは
  Call TimeOutAddTopic(数値型変数)
みたいな感じで。

> Public Function TimeOutAddTopic(ByVal PlayerUniformNumber As Long, _
>                                 ByVal bbTimeOutTopic As bbTopicType, _
>                                 ByVal TopicParam1 As Variant, _
>                                 ByVal TopicParam2 As Variant)
>     With mp
>         '追加するトピックの各項目'
>         .Parent.Journal.AddTopic .Parent.Quarter,.Parent.TimeOnQuarter,.TeamIndex, .TeamChar, "", bbTimeOutTopic, "", ""
>     End With
> End Function

引数増えてる!?Σ(゜□゜;
既存のコードを真似て作ったのであれば、呼び出し方も同じ様に真似れば良いような気が。

[ツリー表示へ]
タイトルRe^4: 「引数を省略できません。」というエラーの対処を教えてください。
記事No11572
投稿日: 2008/02/28(Thu) 19:49
投稿者よねKEN
> bbTopicTypeは列挙型なんで該当する値でも渡してあげればいいかな?
>
> 例えば
>   Call TimeOutAddTopic(13)
> もしくは
>   Call TimeOutAddTopic(数値型変数)
> みたいな感じで。

それを言うなら、以下のような方がよいかと。

Call TimeOutAddTopic(bbTopicType.bbFoulTopic)
もしくは
Call TimeOutAddTopic(bbTopicType型変数)

[ツリー表示へ]
タイトル解決しました。
記事No11573
投稿日: 2008/02/28(Thu) 20:23
投稿者tea
琴さん、よねKENさん、回答ありがとうございます。

手当たり次第試してみた結果、以下のようなコードの記述で一応希望の動作が可能
となりました。

Call TimeOutAddTopic(PlayerUniformNumber, bbTimeOutTopic, TopicParam1, TopicParam2)

Public Function TimeOutAddTopic(ByVal PlayerUniformNumber As Long, _
                                ByVal bbTimeOutTopic As bbTopicType, _
                                ByVal TopicParam1 As Variant, _
                                ByVal TopicParam2 As Variant)
    
    TimeOutAddTopic = bbTimeOutTopic
    With mp
        .Parent.Journal.AddTopic .Parent.Quarter, .Parent.TimeOnQuarter, _
            .TeamIndex, .TeamChar, PlayerUniformNumber, _
            TimeOutAddTopic, TopicParam1, TopicParam2
    End With
End Function

[ツリー表示へ]