长时间潜伏,第一次海报。我有一个非常简单的数据库,可以根据未绑定的组合框更新计算机实验室座位表,教师可以选择他/她的班级。
我现在所拥有的是:
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。
谢谢,
查克
答案 0 :(得分: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
答案 1 :(得分: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