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")

它在技术上工作得很好,但不是重复同一行,将数字 1 更改为数字 2,等等所有 25 台计算机,我更希望有一些效果:

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 回答