如果满足条件,则使用循环和连接文本访问VBA嵌套IF语句

时间:2014-08-22 15:56:54

标签: loops if-statement text access-vba concatenation

我们收到了大量数据。我需要连接[Long Text]字段,以便用户可以更轻松地操作该字段。我知道我错过了一个行计数器计算,但我认为我使它变得比它应该更复杂和/或不够。有人可以查看此代码并为我清理它吗?我已经搜索过这个并将我可以合并到一个代码中。谢谢!

Private Sub Command22_Click()

Dim rs As DAO.Recordset
Dim db As Database
Dim strLongText As String

'Ensuring the order is correct
Set rs = db.OpenRecordset("Select * from dbo_tblRouter Order By Plant, Material, GrC, UOpAc;")


'declare i for row counter
Dim i As Integer

    ' Set up IF condition to say IF Material(i) = Matertial(i+1) AND
    ' Plant(i) = Plant(i+1) AND OpAc(i) = OpAC(i+1) AND GrC(i) = GrC(i+1) THEN
    ' CONCATENATE(&) Long_Text
    ' DO this WHILE these Conditions continue to be met
    ' Then exit condition and run to the next row
    ' Stop at the EOF

If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst
    Do Until rs.EOF = True
    If dbo_tblRouter.Plant(i) = dbo_tblRouter.Plant(i) + 1 Then
        ElseIf dbo_tblRouter.Material(i) = dbo_tblRouter.Material(i) + 1 Then
            ElseIf dbo_tblRouter.GrC(i) = dbo_tblRouter.GrC(i) + 1 Then
                ElseIf dbo_tblRouter.UOpAC(i) = dbo_tblRouter.UOpAC(i) + 1 Then
                    While True
                        With rs
                            .FindFirst "RowNumber" = 0
                            strLongText = dbo_tblRouter.[Long Text]
                            rs.MoveNext
                        While Not rs.EOF
                            ' Add a soft return and concatenate with the next row
                            strLongText = strLongText & Chr(10) & dbo_tblRouter.[Long Text]
                            rs.MoveNext
                        Wend
                            ' Put the concatenated data into this empty memo field
                            .Edit
                            .Fields("LText") = strLongText
                            .Update
                        End With
                    Wend
            rs.MoveNext
    End If
rs.MoveNext
Loop
End If


End Sub

1 个答案:

答案 0 :(得分:0)

好的,不确定你要做什么,但你已经犯了很多错误。

dbo_tblRouter.Plant(i) = dbo_tblRouter.Plant(i) + 1

永远不会是真的。我想你的意思是:

dbo_tblRouter.Plant(i) = dbo_tblRouter.Plant(i + 1)

做一个:

If [condition 1} Then
   ElseIf  [condition 2} Then

不是嵌套的IF语句。第二行仅在第一行为false时执行。这是一个嵌套IF:

If [condition 1} Then
   If  [condition 2} Then

这永远不会结束。这是一个永远的循环,因为你没有测试变量。

While True
Wend

另外,尽管While/Wend有效,但它已被折旧超过20年。 Do/Loop是替代品。

您在2个不同的地方使用rs.MoveNext。不知道为什么。但是更改内部循环中的记录指针也会在外部循环中更改它。