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

如果满足条件,则访问带有循环和连接文本的VBA嵌套IF语句,vba,ms-access,concatenation,Vba,Ms Access,Concatenation,我们有一个大的数据转储。我需要连接[Long Text]字段,这样用户可以更轻松地操作该字段。我知道我遗漏了一个行计数器计算,但我认为我使它变得更加复杂和/或不够。有人能帮我检查一下这个代码并清理一下吗?我已经搜索了这个,并将我能找到的合并成一个代码。谢谢 Private Sub Command22_Click() Dim rs As DAO.Recordset Dim db As Database Dim strLongText As String 'Ensuring the order

我们有一个大的数据转储。我需要连接[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

好的,我不知道你想做什么,但是你已经错了很多

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 [condition 1} Then
   If  [condition 2} Then
这永远不会结束。这是一个永久循环,因为您没有测试变量

While True
Wend
此外,尽管/Wend有效,但它已经贬值超过20年。Do/Loop是替代品


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

您确实没有解释您的确切目标是什么,当前代码可能不是您想要的,您面临的问题是什么,示例数据/输出等等。