直到循环停转

时间:2020-07-15 00:09:50

标签: excel vba do-while

我正在尝试使用“直到”循环从列表中获取值(下拉字段工作表,从单元格B19开始),并更新另一个Excel工作表的单元格值(特别是数据收集工作表,单元格C1) 。一旦使它起作用,我将添加已经起作用的代码以根据数据收集工作表中C1中的值保存文件。

我正在测试代码,但是在提取第一个值后一直卡住。基本上,它直到列表结束才真正遍历列表。

我认为这与归类为活动细胞的细胞有关。我认为,当我粘贴更改活动单元格的值时。我试图通过再次重申活动单元来纠正此问题。但这可能会创建一个无限循环。

有什么我可以做的调整吗?预先感谢您查看此内容以及可能收到的任何回复!我基于https://docs.microsoft.com/en-us/office/troubleshoot/excel/loop-through-data-using-macro

上的文档结构

以下代码:

   Sub Test2()
    ' Select cell to start loop, *first line of data*.
      Worksheets("Drop-down fields").Activate
      Range("B19").Select
      Worksheets("Drop-down fields").Range("B19").Copy
      ' Set Do loop to stop when an empty cell is reached.
      Do Until IsEmpty(ActiveCell)
      Worksheets("Data Collection").Range("C1").PasteSpecial Paste:=xlPasteValues
      Worksheets("Drop-down fields").Activate
      Range("B19").Select
         ' Step down 1 row from present location.
         ActiveCell.Offset(1, 0).Select
      Loop
   End Sub

1 个答案:

答案 0 :(得分:0)

塞缪尔,

在这里,您的代码经过了重构,以删除所有激活和选择,并在B列中逐一递增并复制到C列。

  Sub Test2()
   
      Dim wksSrc  as Worksheet
      Dim wksDst  as Worksheet
      Dim lSrcRow as Long
      Dim lDstRow as Long
      
      Set wksSrc = Worksheets("Drop-down fields")
      Set wksDst = Worksheets("Data Collection")
      lSrcRow = 19
      lDstRow = 1
      
      Do 
        wksSrc.cells(lSrcRow,2).Copy
        wksDst.Cells(lDstRow,3).PasteSpecial Paste:=xlPasteValues
        lSrcRow = lSrcRow + 1
        lDstRow = lDstRow + 1
      Loop Until wksSrc.cells(lSrcRow,lSrcCol) = ""
      
   End Sub 'Test2

注意:代码未经测试,但我认为所有引用都正确。 HTH