1

久しぶりの潜伏者、初めてのポスター。教師が自分のクラスを選択できるバインドされていないコンボボックスに基づいて、コンピューターラボの座席表を更新するための非常に単純なデータベースにアクセスできます。

私が今持っているのは:

Private Sub Combo29_AfterUpdate()
If DCount("[StudentName]", "SelectedClass", "[StudentNumber]=1") <> 1 Then Me!Computer1.Caption = "" Else Me!Computer1.Caption = DLookup("[StudentName]", "SelectedClass", "[StudentNumber] = 1")

技術的には問題なく動作しますが、25 台のコンピューターすべてに対して同じ行を繰り返したり、番号 1 を番号 2 に変更したりするのではなく、次のような効果を持たせたいと考えています。

Private Sub Combo29_AfterUpdate()
Dim PCnumber as Integer
PCnumber = 0
NextPC:
PCnumber = PCnumber + 1
If DCount("[StudentName]", "SelectedClass", "[StudentNumber]=PCnumber") <> 1 Then Me!Computer & PCnumber & .Caption = "" Else Me!Computer & PCnumber & .Caption = DLookup("[StudentName]", "SelectedClass", "[StudentNumber] = PCnumber")
If PCNumber = 25 Then End Else goto NextPC
End Sub

いくつかのボードを閲覧しましたが、フォーム上のラベルへの参照の一部として変数 PCnumber を連結する構文が正しくないようです。現在、私はそれを「長い道のり」で行っており、コンピューターごとに行全体を繰り返しています。しかし、私のこの欠点が私にとってより多くの仕事をもたらしたのはこれが初めてではなく、この問題のためだけでなく、将来の生活を楽にするためにそれを学びたいと思っています.

Access 2007 を使用していますが、Visual Basic では 6.5 と表示されます。

ありがとう、

チャック

4

2 に答える 2

3

私は Access 2007 を使用していませんが、これはおそらく次の代替として機能しMe!Computer & PCnumber & .Captionます。

Me.Controls("Computer" & PCnumber).Caption

DCount関数を次のように変更することもできます。

DLookup("[StudentName]", "SelectedClass", "[StudentNumber] = " & PCnumber)

...しかし、どちらの方法でもあまり使用しないので、うまくいくかもしれません。

余談ですがGoTo、コード内での代わりに次のループ構造を使用できます。

For PCnumber = 1 to 25 Step 1
    ' code
Next PCnumber
于 2012-04-04T21:02:30.587 に答える
1

エラー処理以外の目的で GoTo ステートメントを使用することは、一般に悪い考えと見なされます。適切に形成されたループを使用するか、別のサブ/関数を作成して、GoTo ステートメントの下に置いたタスクを処理する方がはるかに優れています (後者はあなたの場合には当てはまりません)。

このようなコードを書きます。

Private Sub Combo29_AfterUpdate()
    Dim PCnumber as Integer 'Instantiates as 0
    Do Until PCNumber = 25
        If DCount("[StudentName]", "SelectedClass", "[StudentNumber]=" & PCnumber) <> 1 Then 
            Me.Controls(Me!Computer & PCnumber).Caption = ""
        Else
            Me.Controls(Me!Computer & PCnumber).Caption = DLookup("[StudentName]", "SelectedClass", "[StudentNumber] = " & PCnumber)
        End If      
        PCNumber = PCNumber + 1
    Loop
End Sub
于 2012-04-05T18:28:24.143 に答える