自动填充直到最后一行才会填充
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).Cells
和 ThisWorkbook.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
我有一个代码可以在模块的某行插入公式
然后我添加一个新模块以根据 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).Cells
和ThisWorkbook.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