[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/08/03(Fri) 16:51
投稿者名:tea
Eメール:
URL :
タイトル:
コンボボックスで"連番"とした場合にMSFlexGridに4から順に番号をつけたいのですが
また質問させていただきます。
コンボボックスで"連番"を意味する"連"を選択した場合に選手氏名欄に
記載してある人数分だけMSFlexGridのeGridUniformnumberという列に自
動的に最初の番号を4にして以降は順に番号をつけたいのです。
選手の最低人数は5名、最大人数は18名ですがいつも18名とは限り
ません。
下記に自分で書いてみたコードを乗せますが、
fghPlayers(TeamIndex).Target.TextMatrix(ixPlayer, eGridUniformnumber) = 4 + m
でエラーが出て「オブジェクト変数またはWithブロック変数が設定されて
いません。」と出ます・・・。

教えてください。
どうかよろしくお願いします。

Private Sub UserControl_Initialize()
    'ローカル変数宣言'
    Dim ixTeam As Long
    Dim ixPlayer As Long
    Dim i As Long
  '連番作業の為に追加---    
    Dim TeamIndex As Long
    Dim m As Integer
    m = 0
  '---------------------
    '' 本来は、UserMode でしか動かさないコードもある。
    '' しかし、なぜか UserControl.Ambient.UserMode が機能しないのでエラー無視で対処している。
    '' UserControl_Terminate も同様。
      
    '' 未来を指定できないように。
    dtpTournamentDate.MaxDate = Now
    
    '' ヘルパーの実行開始。
    Set fghPlayers0 = New FlexGridHelper
    Set fghPlayers1 = New FlexGridHelper
    For ixTeam = 0 To 1
        With teamControl("cboEditor", ixTeam)
            '"連番"という意味の"連"を先頭に加える。---
            .AddItem "連"
            .ListIndex = 0
            
            'もしcboEditorで一番先頭の選手が連番の"連"を選択した場合には選手
      '氏名欄にある人数分だけMSFlexGridの先頭番号を4からはじめて以降は
            '順に番号をつける。
            '最大選手人数はA&Bチームともに18名だが、いつも18名とは限らない。
            If .ListIndex = 0 Then
                '選手氏名を1番から最大人数まで
                For ixPlayer = 1 To bbPlayerMax
                    'はじめの4に+1を加算していく
                    For m = 0 To 18
                        With Game.Team(TeamIndex).Player(ixPlayer)
                            '背番号'
                            fghPlayers(TeamIndex).Target.TextMatrix(ixPlayer, eGridUniformnumber) = 4 + m
                        End With
                    Next
                Next
            End If
            '-----------------------------------------
            '繰り返し処理:1から99
            For i = 1 To 99
                '追加'
                .AddItem CStr(i)
            Next
        End With
          
        With fghPlayers(ixTeam)
            '初期化'
            .Init teamControl("grdPlayers", ixTeam), teamControl("txtEditor", ixTeam)
            'ユニフォームナンバー'
            .SetEditorFromControl eGridUniformnumber, teamControl("cboEditor", ixTeam)
            'キャプテン選択
            .SetColStatuses eGridCaption, Array(sPiCaptainMark, "")
            'スタメン選択
            .SetColStatuses eGridSM, Array(sPiSMMark, "")
            .NextDirectionToRight = False
            '
            grdPlayers_Design .Target
        End With
    Next
    
    '' スターティングメンバーのクリック順を、現在のものを適用。
    On Error Resume Next
    For ixTeam = 0 To 1
        'コレクション型のインスタンスが生成されてオブジェクトに格納'
        Set nPiSMClickOrder(ixTeam) = New Collection
        With Game.Team(ixTeam)
            '繰り返し処理:1から最大人数'
            For ixPlayer = 1 To bbPlayerMax
                'もし、選手がスタメンの場合'
                If .Player(ixPlayer).IsStartingMember Then
                    '追加'
                    nPiSMClickOrder_Add ixTeam, ixPlayer
                    i = i + 1
                End If
            Next
        End With
    Next
End Sub

投稿時間:2007/08/03(Fri) 17:46
投稿者名:KG
Eメール:
URL :
タイトル:
Re: コンボボックスで"連番"とした場合にMSFlexGridに4から順に番号をつけたいのですが
そのオブジェクトが宣言されてはいるが、インスタンスがない場合によく見るエラーですね。

fghPlayers

は見たところどこにも宣言されていないようですが、
どこで宣言して、どこでインスタンスを作成しているのでしょうか?

投稿時間:2007/08/03(Fri) 18:28
投稿者名:tea
Eメール:
URL :
タイトル:
Re^2: コンボボックスで"連番"とした場合にMSFlexGridに4から順に番号をつけたいのですが
KGさん、回答本当にありがとうございます。
インスタンスは下記で作成してると思うんですが・・・
独学でやってきましたが、いまだに初心者に毛が生えたようなレベルなので
詳しくご教授してください。
どうか、よろしくお願いします。

Private Property Get fghPlayers(ByVal TeamIndex As Long) As FlexGridHelper
    'もし、0の場合'
    If TeamIndex = 0 Then
        'fghPlayers0クラスにfghPlayersインスタンスを格納'
        Set fghPlayers = fghPlayers0
    Else
        'fghPlayers1クラスにfghPlayersインスタンスを格納'
        Set fghPlayers = fghPlayers1
    End If
End Property


> そのオブジェクトが宣言されてはいるが、インスタンスがない場合によく見るエラーですね。
>
> fghPlayers
>
> は見たところどこにも宣言されていないようですが、
> どこで宣言して、どこでインスタンスを作成しているのでしょうか?

投稿時間:2007/08/03(Fri) 21:54
投稿者名:tea
Eメール:
URL :
タイトル:
再考してみます。
> KGさん、回答本当にありがとうございます。

どうもコードを書いている位置にも問題があるようなので
しばらく再考してみたいと思います。

ありがとうございました。