Excel 动态计算最后一行并在VBA中的宏中重用它

Excel 动态计算最后一行并在VBA中的宏中重用它,excel,vba,count,dynamically-generated,Excel,Vba,Count,Dynamically Generated,在我的宏中,每当我重复一个循环,表就会变大。 我必须动态计算最后一行的值(它随着循环的每次重复而变化)。有人知道这是怎么回事吗 这是我想去的最后一排 LastRowITR = .Cells(Rows.Count, 2).End(xlUp).Row 这是我代码的主要部分 'first row number where you need to paste values in Tabelle3' With Worksheets("Tabelle3") j = .Cells(.Rows.Cou

在我的宏中,每当我重复一个循环,表就会变大。 我必须动态计算最后一行的值(它随着循环的每次重复而变化)。有人知道这是怎么回事吗

这是我想去的最后一排

LastRowITR = .Cells(Rows.Count, 2).End(xlUp).Row 
这是我代码的主要部分

'first row number where you need to paste values in Tabelle3'
With Worksheets("Tabelle3")
   j = .Cells(.Rows.Count, 2).End(xlUp).Row
End With

'Remove any pre-existing outlining on worksheet, or you're gonna have 99 problems and an outline ain't 1'
Cells.ClearOutline

For i = 1 To LastRow
   With Worksheets("BalanceSheet")
      If .Cells(i, 1).Value = "" Then
         MsgBox "finished"
      Else
         .Range("B" & i).Copy Destination:=Worksheets("Tabelle3").Range("B" & j)
         'Kopiert Zeile aus altem Sheet ins neue'

         'Immer ganzes Blatt sollte noch durch Range ersetzt werden'
         X = HypRetrieve(Tabelle3)

         'Zoomt auf alle Level in neue Zeile'
         X = HypZoomIn(Tabelle3, Range("B" & j), 1, False)

         'LastRowITR ist das letzte eingefügte Level'
         StartRowITR = j
         LastRowITR = .Cells(Rows.Count, 2).End(xlUp).Row

         With Worksheets("Tabelle3")

            For a = StartRowITR To LastRowITR
               Rows(a).Select
               Level = Cells(a, 2).IndentLevel

               For b = 1 To Level - 1
                  Selection.Rows.Group 
               Next b
            Next a

            j = LastRowITR + 1          
         End With     
      End If
   End With
Next i

End Sub

这是我计算最后一行的方式,第一次它工作得非常好。但不要在宏中重复更改值。

每次最后一行更改位置后,应立即更新最后一行

一个简短而明确的例子:

With Sheet1
    LRow = .Cells(.Rows.Count, "B").End(xlUp).Row

    For i = 1 To 1000
        If Left(.Cells(i,"A"), 1) = "T" Then
            .Cells(LRow, "B").Value = .Cells(i, "A").Value
            LRow = .Cells(.Rows.Count, "B").End(xlUp).Row

            ''Or in case the last row always moves one position down:
            ''LRow = LRow + 1
        End If
    Next i
End With

应在每次最后一行更改位置后立即更新最后一行

一个简短而明确的例子:

With Sheet1
    LRow = .Cells(.Rows.Count, "B").End(xlUp).Row

    For i = 1 To 1000
        If Left(.Cells(i,"A"), 1) = "T" Then
            .Cells(LRow, "B").Value = .Cells(i, "A").Value
            LRow = .Cells(.Rows.Count, "B").End(xlUp).Row

            ''Or in case the last row always moves one position down:
            ''LRow = LRow + 1
        End If
    Next i
End With

嘿伙计们我发现问题了

蒂姆·斯塔克的回答让我想到了这个主意。 问题是我的代码在错误的工作表上计算行数,所以我所要做的就是在我的行数代码周围添加这个

With Worksheets("Tabelle3")
End with

嘿伙计们我发现问题了

蒂姆·斯塔克的回答让我想到了这个主意。 问题是我的代码在错误的工作表上计算行数,所以我所要做的就是在我的行数代码周围添加这个

With Worksheets("Tabelle3")
End with

有了这么多代码,我们只能猜测宏中发生了什么。你能提供一个吗?把这行放在循环中,它应该得到最新的行值完成,这行在一个循环中,这就是我需要帮助的原因:(@kingradi)你可能会从阅读中受益。并引用你所有的
范围
单元格
etw和一张工作表!比如
工作表(“SheetName”).Range()
或确保他们以点
开始.Range
以确保他们使用
with
语句。实际上,你的最后一个
与工作表(“表3”)一起使用
完全不使用usless,因为里面的语句都不是以点开头的
,所以根本不用
with
。有了这么多的代码,我们只能猜测宏中发生了什么。你能提供一个吗?把这行放在循环中,它应该得到最新的行值Done,这行在循环中,这就是我需要帮助的原因:(@kingradi)你可能会从阅读中受益。并用一张工作表引用你所有的
范围
单元格
!比如
工作表(“SheetName”).Range()
或确保它们以点
开始。Range
确保它们使用
with
语句。•实际上,你最后的
工作表(“Tabelle3”)
是完全不用的,因为里面的语句都不是以点开头的,所以根本不使用带的