如果满足条件,则访问带有循环和连接文本的VBA嵌套IF语句
我们有一个大的数据转储。我需要连接[Long Text]字段,这样用户可以更轻松地操作该字段。我知道我遗漏了一个行计数器计算,但我认为我使它变得更加复杂和/或不够。有人能帮我检查一下这个代码并清理一下吗?我已经搜索了这个,并将我能找到的合并成一个代码。谢谢如果满足条件,则访问带有循环和连接文本的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
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。不知道为什么。但是更改内部循环中的记录指针也会更改外部循环中的记录指针 您确实没有解释您的确切目标是什么,当前代码可能不是您想要的,您面临的问题是什么,示例数据/输出等等。