【问题标题】:Loop the code till the cell is empty in excel循环代码直到excel中的单元格为空
【发布时间】:2021-07-16 13:11:45
【问题描述】:

我遇到了这个问题:
我有这段代码,它可以工作,但我现在很挣扎。
我希望循环整个代码,直到Table1 中的单元格D1 为空。

 Sub strule()
 
    Dim myCellRange As Range
 

   Worksheets("Table1").Select                                         

 Code = Range("D1")

   Wert = Range("E10")

    Worksheets("Table2").Select
    Worksheets("Table2").Range("A1").Select
      
      lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row                   
  Range("A" & lMaxRows).Select


    ActiveCell.Offset(1, 0).Select                                         
    ActiveCell.Value = Code
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = Wert
    
 
    Sheets("Table1").Select                                         '
    Rows("1:10").Select
    Selection.Cut
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp


End Sub

【问题讨论】:

  • sry 我不知道为什么我发布它时会这样
  • 不了解您要循环的内容 - 从 Table1 工作表复制 D1E10,在 Table2 工作表的数据底部添加 A:B 列,删除第 1 行: 10 在Table1 工作表中。最后一行删除了Table1 中的第 1:10 行,因此如果您第二次循环会发现单元格 D1 为空 - 除非第 1:10 行下方有数据,但您没有对此进行解释。
  • 发布一些示例数据,以便我们查看Table1 中的数据是什么样的。正如 Darren 所提到的,除非第 10 行下方有更多数据,否则 D1 在循环的第二次迭代中将为空。

标签: excel vba loops automation range


【解决方案1】:

我已经猜到你想要什么了……不过可能完全错了。

首先删除所有选择和激活的原始代码:

Sub strule()
    
    Dim WrkSht1 As Worksheet
    Set WrkSht1 = Worksheets("Table1")
    'Worksheets("Table1").Select

    Dim Code As String
    Code = WrkSht1.Range("D1")

    Dim Wert As String
    Wert = WrkSht1.Range("E10")

    Dim WrkSht2 As Worksheet
    Set WrkSht2 = Worksheets("Table2")
    'Worksheets("Table2").Select
    'Worksheets("Table2").Range("A1").Select
      
    Dim lMaxRows As Long
    lMaxRows = WrkSht2.Cells(Rows.Count, "A").End(xlUp).Row
    WrkSht2.Cells(lMaxRows + 1, 1) = Code 'Lastrow+1 in column A.
    WrkSht2.Cells(lMaxRows + 1, 2) = Wert 'Lastrow+1 in column B.
    'Range("A" & lMaxRows).Select
    'ActiveCell.Offset(1, 0).Select
    'ActiveCell.Value = Code
    'ActiveCell.Offset(0, 1).Select
    'ActiveCell.Value = Wert
    
    WrkSht1.Rows("1:10").Delete shift:=xlUp
    'Sheets("Table1").Select                                         '
    'Rows("1:10").Select
    'Selection.Cut
    'Application.CutCopyMode = False
    'Selection.Delete Shift:=xlUp

End Sub

现在我认为你想要什么:

Sub strule1()
    
    Dim WrkSht1 As Worksheet
    Set WrkSht1 = Worksheets("Table1")
    
    Dim WrkSht2 As Worksheet
    Set WrkSht2 = Worksheets("Table2")
    
    Dim lLastRow1 As Long
    lLastRow1 = WrkSht1.Cells(Rows.Count, "A").End(xlUp).Row
    
    Dim x As Long
    Dim lLastRow2 As Long
    Dim Code As String
    Dim Wert As String
    For x = 1 To lLastRow1 Step 10
        Code = WrkSht1.Cells(x, 4)      'Loop 1 grabs from row 1, loop 2 from row 11
        Wert = WrkSht1.Cells(x + 9, 5)  'Loop 1 grabs from row 10, loop 2 from row 20
        
        lLastRow2 = WrkSht2.Cells(Rows.Count, "A").End(xlUp).Row
        WrkSht2.Cells(lLastRow2 + 1, 1) = Code 'Lastrow+1 in column A.
        WrkSht2.Cells(lLastRow2 + 1, 2) = Wert 'Lastrow+1 in column B.
    Next x

    WrkSht1.Rows("1:" & x).Delete shift:=xlUp

End Sub

【讨论】:

  • 对不起,挑剔,但Rows.Count 在整个代码中都不合格。
  • @SamuelEverson 是的,我知道。不过,只有在 Excel 2003 和 Excel 2007+ 之间混用时才真正重要。工作簿中的所有工作表都应具有相同的行数,因此不必费心对其进行限定。
  • 我总是喜欢相信 OP 有一张 16 行的胭脂表,并且在运行他们的代码时它始终是 ActiveSheet,但是正如我评论的那样,我确实想到了你的回应。
  • 我实际上对如何制作只有 16 行的表格非常感兴趣。我发现的每个教程都只是说“删除它们”,这只是将所有内容向上移动并形成一个空白行。如何在 Excel 中实际限制工作表大小?
猜你喜欢
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多