为什么我的 Do Until Loop 只打印循环中的最后一个值? Excel VBA

Why is my Do Until Loop only printing the last value in the loop? Excel VBA

我正在为提交表单编写 Excel VBA 宏。我的目标是点击提交按钮并将输入的信息发送到数据库 sheet“shTaskDB”。该列表有 15 行可用,但很可能不会填写所有这些行。 我创建了一个 Do Until Loop 来传输输入的数据,直到 Description 字段为空。 这是有效的,但问题是代码只返回提交表单中的最后一项,而不是每个行项目。 任何有关如何将每行条目传输到数据库或如何清理代码的帮助都将不胜感激。 Image of code and form

代码: 'Begin code for Task Recording' Dim shTaskDB 作为工作sheet 设置 shTaskDB = ThisWorkbook.Sheets("任务数据库")

Dim TaskCurrentRow As Integer
TaskCurrentRow = shTaskDB.Range("A" & Application.Rows.Count).End(xlUp).row + 1

使用 shTaskDB

  shPMPlan.Range("L4").Select
  ' Set Do loop to stop when an empty cell is reached.
  'Do Until IsEmpty(ActiveCell) = True
  Do Until ActiveCell = ""
     .Cells(TaskCurrentRow, 1) = shPMPlan.Range("C4")
     .Cells(TaskCurrentRow, 2) = shPMPlan.Cells(ActiveCell.row,"K")
     .Cells(TaskCurrentRow, 3) = shPMPlan.Cells(ActiveCell.row,"L")
     .Cells(TaskCurrentRow, 4) = shPMPlan.Cells(ActiveCell.row,"M")
     .Cells(TaskCurrentRow, 5) = shPMPlan.Cells(ActiveCell.row,"N")
     .Cells(TaskCurrentRow, 6) = shPMPlan.Cells(ActiveCell.row,"O")
     .Cells(TaskCurrentRow, 7) = shPMPlan.Cells(ActiveCell.row,"P")
    
    ActiveCell.Offset(1, 0).Select
  Loop

结尾为

MsgBox“项目计划已记录”

您的代码从 shPMPlan 逐行读取,但只写入 sheet shTaskDB 中的一行 TaskCurrentRow。所以你的循环工作正常,但只有 shPMPlan 的最后一个值被保留,因为每次迭代都会覆盖前一个。

考虑如下所示的模式。

Do Until ActiveCell = ""
   
    'Write to TaskCurrentRow + a row offset that we will increment each loop
    .Cells(TaskCurrentRow + TaskCurrentRowOffset, 1) = shPMPlan.Range("C4")
    .Cells(TaskCurrentRow + TaskCurrentRowOffset, 2) = shPMPlan.Cells(ActiveCell.row,"K")
    .Cells(TaskCurrentRow + TaskCurrentRowOffset, 3) = shPMPlan.Cells(ActiveCell.row,"L")
    .Cells(TaskCurrentRow + TaskCurrentRowOffset, 4) = shPMPlan.Cells(ActiveCell.row,"M")
    .Cells(TaskCurrentRow + TaskCurrentRowOffset, 5) = shPMPlan.Cells(ActiveCell.row,"N")
    .Cells(TaskCurrentRow + TaskCurrentRowOffset, 6) = shPMPlan.Cells(ActiveCell.row,"O")
    .Cells(TaskCurrentRow + TaskCurrentRowOffset, 7) = shPMPlan.Cells(ActiveCell.row,"P")

    ActiveCell.Offset(1, 0).Select
    
    'Increment the target row offset for next iteration
    TaskCurrentRowOffset = 1 + TaskCurrentRowOffset
Loop