首页 > 解决方案 > 确定特定范围内的最后一个单元格并填充它,VBA

问题描述

所以我需要确定每个范围“修订级别”(“C82:F91”)、“修订日期”(“G82:G91”)和“修订评论或注释”(“H82”)中的第一个空单元格:R91"),并填写正确的信息。对于“revlvl”,我只需要在前一个值上加一个,即我知道如何计算的其他信息。

因此,这里需要做的是从 000 rev 级别开始,它将 001 放入 Revision 级别,将今天的日期放入 Date of revision,并将输入框的文本输入到评论和注释中。然后,如果再次运行循环,它将在第 3 行中输入 003、日期和注释。

循环中还有其他参考,因为它正在比较上面两个图表中的日期,它们可以正常工作并且不需要更改。有问题的部分被突出显示,当前位置是硬编码的。

这是我正在使用的工作表和范围

在此处输入图像描述

If Sheets("Monthly Status").Range("G82") = "" Then
'do nothing
Else

    Dim i As Integer
    Dim Revnotes As Range
    Dim RevDate As Range
    Dim revlvl As Range

    Set Revnotes = Sheets("Monthly Status").Range("H83:R83")
    Set RevDate = Sheets("Monthly Status").Range("G83")
    Set revlvl = Sheets("Monthly Status").Range("C83:F91")

    For i = 0 To 49

    cRow = i + 23

        For j = 0 To 2

                If Sheets("Monthly Status").Cells(cRow, j + 11) <> Sheets("Monthly Status").Cells(cRow, j + 37) Then
                    RevDate = Date
                    Revnotes = InputBox("You Changed dates, you must imput notes for this revison!", "Notes")
                    revlvl = Sheets("Monthly Status").Range("C83") + 1

                        Application.ScreenUpdating = False

                        Sheets("Monthly Status").Range("K23:M72").Copy
                        Sheets("Monthly Status").Range("AK23:AM72").PasteSpecial xlPasteValues

                        Application.ScreenUpdating = True

                    End
                End If
            Next j
        Next i

    End If

标签: excelvba

解决方案


要查找范围内的下一个空闲行,C82:F91请使用以下内容,因此您无需循环。

Dim rng As Range
Set rng = Worksheets("Monthly Status").Range("C82:F91")

Dim NextFreeRow As Long
With rng.Cells(rng.Rows.Count, 1)
    If .Value = vbNullString Then 'test if range is full
        NextFreeRow = .End(xlUp).Row + 1 'find next free row
    Else
        MsgBox "range is full"
        Exit Sub
    End If
End With

'add +1 to the previous value
Worksheets("Monthly Status").Cells(NextFreeRow, "C").Value = Worksheets("Monthly Status").Cells(NextFreeRow - 1, "C").Value + 1

此示例应该可以帮助您解决问题。


推荐阅读