自动填充直到最后一行才会填充

autofill won't fill until last row

我有一个代码可以在模块的某行插入公式

然后我添加一个新模块以根据 C 列自动填充公式(如果 C 15 数据则自动向下填充 15)

自动填充按照我的预期手动工作,但是当我为 Workbook_Open 设置 Private Sub 时,自动填充不会填充最后一行(如果有 15 个数据,宏只填充到第 14 行)

下面是我的自动填充代码

Sub AutoFill()

lr = Cells.Find("*", Cells(1, 1), xlFormulas, xlPart, xlByRows, xlPrevious, False).Row

ThisWorkbook.Sheets(1).Range("A6:B6").AutoFill Destination:=ThisWorkbook.Sheets(1).Range("A6:B" & lr), Type:=xlFillDefault
ThisWorkbook.Sheets(1).Range("D6:S6").AutoFill Destination:=ThisWorkbook.Sheets(1).Range("D6:S" & lr), Type:=xlFillDefault


End Sub

当我将其设置为 Private Sub 时,如何使此代码 运行 直到最后一行?

Range.AutoFill

  • 重要的区别在于,在此解决方案中,.Cells 是合格的 ws.Cells,即 ThisWorkbook.Sheets(1).CellsThisWorkbook.Sheets(1).Cells(1, 1),以确保搜索到正确的工作表。您可以使用变量来缩短行。
Option Explicit

Sub AutoFill()

    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim ws As Worksheet: Set ws = wb.Worksheets(1)
    
    Dim lrCell As Range
    Set lrCell = ws.Cells.Find("*", , xlFormulas, , xlByRows, xlPrevious)
    If lrCell Is Nothing Then Exit Sub ' empty worksheet
    
    Dim lr As Long: lr = lrCell.Row
    If lr < 7 Then Exit Sub ' no data below
    
    ws.Range("A6:B6").AutoFill Destination:=ws.Range("A6:B" & lr), Type:=xlFillDefault
    ws.Range("D6:S6").AutoFill Destination:=ws.Range("D6:S" & lr), Type:=xlFillDefault

End Sub