循环记录集并根据条件将记录写入特定行



我有一个记录集循环问题,我在这里没有看到可以适应的解决方案,所以我问这个问题:

我有一个Excel模板,用于行项目列表,项目1到20,它们列在模板的第1行到第20行中。单元A1至A20具有运行数值"0";1〃;至";20〃;这一点从未改变。

我有一个SQL Server数据库表,其中包含所有专员的所有行项目。该表包含专员姓名和运行编号等信息。

最初,如果委托了10个项目,它们位于模板的第1-10行,并在数据库中具有相应的运行编号。然后发生的情况是,这10件物品中的一些被出售,从列表中删除,并被删除或存档在数据库中。

因此,作为一个例子,我最终得到了一个记录集,其运行编号为1、3、4和7。我需要的是,当我用数据库中的剩余记录填充Excel列表时;他们的";行,其中行A中的单元格值与正在运行的记录数相匹配。

我的代码在记录集中循环,只将剩下的4条记录放入第1行到第4行。

但我需要的是一个循环,它从模板的一行移动到下一行,检查a列中的单元格值,检查记录集中是否有相应的序号值,如果为true,则将记录放在该行中,然后移动到下行。

也许我必须使";行";变量取决于我的记录集中有哪些运行数值,但这感觉非常复杂,所以也许有更多经验的人有一个更简单的解决方案。

我的代码(这是一个简单的"把所有东西都打进去"的循环(看起来是这样的:

在SQL查询中选择专员;行";变量是在其他地方定义的,它只是声明要开始的行号。

Sub test()
Do While (Not rs1.EOF)
Worksheets("Tabelle1").Select
'I tried at different places (inside and outside of the Do...Loop)
'If rs1!RunningNumber.Value = ActiveSheet.Range("A" & Row).Value Then
'but that only had the effect of stopping the loop afetr the first record.

ActiveSheet.Range("B" & Row).Value = rs1!ArticleDescription.Value
ActiveSheet.Range("F" & Row).Value = rs1!Size.Value
ActiveSheet.Range("G" & Row).Value = rs1!CategoryID.Value
ActiveSheet.Range("I" & Row).Value = rs1!Price.Value
ActiveSheet.Range("L" & Row).Value = rs1!AdditionalInfo.Value

Row = Row + 1

rs1.MoveNext
Loop
End Sub

几个一般原则。(1( 尽量避免在VBA代码中使用"选择"。一些如何避免选择的示例。(2( 将所有不依赖于迭代器值的内容移出循环。

根据您的描述,听起来您应该将工作表目标行的值设置为"的值;运行编号";在数据库表中。试试这个,看看它是否适合你。

Sub test()
Dim ws as worksheet
Set ws = Worksheets("Tabelle1")
Do Until rs1.EOF

Row = rs1!RunningNumber.Value
ws.Range("B" & Row).Value = rs1!ArticleDescription.Value
ws.Range("F" & Row).Value = rs1!Size.Value
ws.Range("G" & Row).Value = rs1!CategoryID.Value
ws.Range("I" & Row).Value = rs1!Price.Value
ws.Range("L" & Row).Value = rs1!AdditionalInfo.Value

rs1.MoveNext

Loop

End Sub

最新更新