Excel 将LastRow删除到LastRow

Excel 将LastRow删除到LastRow,excel,vba,Excel,Vba,我有一个工作表,用户可以输入将要使用的行数(我有代码可以扩展或减小表大小)。当用户输入的行数小于表中当前的行数时,我希望删除所有未使用的行。我现在用LastRow来做这个。我在代码的开头和结尾都有最后一行,所以我非常清楚要删除哪些行,但我无法正确地获取宏。我认为代码应该如下所示: LastRowFirst = Worksheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row LastRowNext = Worksheets(&qu

我有一个工作表,用户可以输入将要使用的行数(我有代码可以扩展或减小表大小)。当用户输入的行数小于表中当前的行数时,我希望删除所有未使用的行。我现在用LastRow来做这个。我在代码的开头和结尾都有最后一行,所以我非常清楚要删除哪些行,但我无法正确地获取宏。我认为代码应该如下所示:

LastRowFirst = Worksheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row
LastRowNext = Worksheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row

Range("B" & LastRowFirst : "AA" & LastRowNext).Delete
    LastRowFirst = Worksheets("Ent. Description").Cells(Rows.Count, 3).End(xlUp).Row

Application.AutoCorrect.AutoFillFormulasInLists = True

    Dim targetSheet As Worksheet
    Dim targetSheetName As String
    targetSheetName = "Ent. Description"
    Set targetSheet = ThisWorkbook.Worksheets(targetSheetName)
   
    Dim newTableRows As Long
    Dim newTableRowsCellAdd As String
    newTableRowsCellAdd = "A1"
    newTableRows = targetSheet.Range(newTableRowsCellAdd).Value2

    Dim targetTable As ListObject
    Dim targetTableName As String
    targetTableName = "Table1"
    Set targetTable = targetSheet.ListObjects(targetTableName)

    Dim newTableRange As Range
    Set newTableRange = targetTable.Range.Resize(newTableRows + 1, targetTable.Range.Columns.Count)
    targetTable.Resize newTableRange
    
    Dim tableCell As Range
    Dim rowWithFormulas As Long
    rowWithFormulas = 1
    For Each tableCell In targetTable.ListRows(rowWithFormulas).Range
    
        If tableCell.HasFormula Then
        
            tableCell.Copy targetTable.ListColumns(tableCell.Column).DataBodyRange
        
        End If
    
    Next tableCell

    LastRowNext = Worksheets("ent. Description").Cells(Rows.Count, 3).End(xlUp).Row
我使用的全部代码如下所示:

LastRowFirst = Worksheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row
LastRowNext = Worksheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row

Range("B" & LastRowFirst : "AA" & LastRowNext).Delete
    LastRowFirst = Worksheets("Ent. Description").Cells(Rows.Count, 3).End(xlUp).Row

Application.AutoCorrect.AutoFillFormulasInLists = True

    Dim targetSheet As Worksheet
    Dim targetSheetName As String
    targetSheetName = "Ent. Description"
    Set targetSheet = ThisWorkbook.Worksheets(targetSheetName)
   
    Dim newTableRows As Long
    Dim newTableRowsCellAdd As String
    newTableRowsCellAdd = "A1"
    newTableRows = targetSheet.Range(newTableRowsCellAdd).Value2

    Dim targetTable As ListObject
    Dim targetTableName As String
    targetTableName = "Table1"
    Set targetTable = targetSheet.ListObjects(targetTableName)

    Dim newTableRange As Range
    Set newTableRange = targetTable.Range.Resize(newTableRows + 1, targetTable.Range.Columns.Count)
    targetTable.Resize newTableRange
    
    Dim tableCell As Range
    Dim rowWithFormulas As Long
    rowWithFormulas = 1
    For Each tableCell In targetTable.ListRows(rowWithFormulas).Range
    
        If tableCell.HasFormula Then
        
            tableCell.Copy targetTable.ListColumns(tableCell.Column).DataBodyRange
        
        End If
    
    Next tableCell

    LastRowNext = Worksheets("ent. Description").Cells(Rows.Count, 3).End(xlUp).Row

如果您还有任何问题,请告诉我

我添加了清除范围内容和删除整行的代码

我建议您在模块顶部使用
选项Explicit

阅读代码注释并选择其中一种方法(清除或删除),这两种方法都不需要


编辑:刚刚用
.clear
更改了
.clear
.clearcontents
,因此格式也被删除

Public Sub ResizeTable()
    
    Application.AutoCorrect.AutoFillFormulasInLists = True

    Dim targetSheet As Worksheet
    Dim targetSheetName As String
    targetSheetName = "Ent. Description"
    Set targetSheet = ThisWorkbook.Worksheets(targetSheetName)
   
    Dim newTableRows As Long
    Dim newTableRowsCellAdd As String
    newTableRowsCellAdd = "A1"
    newTableRows = targetSheet.Range(newTableRowsCellAdd).Value2

    Dim targetTable As ListObject
    Dim targetTableName As String
    targetTableName = "Table1"
    Set targetTable = targetSheet.ListObjects(targetTableName)
    
    ' Find the table's last row before resizing
    Dim previousLastRow As Long
    previousLastRow = targetTable.HeaderRowRange.Row + targetTable.Range.Rows.Count - 1

    Dim newTableRange As Range
    Set newTableRange = targetTable.Range.Resize(newTableRows + 1, targetTable.Range.Columns.Count)
    targetTable.Resize newTableRange
    
    ' Find the table's last row after resizing
    Dim newlastRow As Long
    newlastRow = targetTable.HeaderRowRange.Row + targetTable.Range.Rows.Count
    
    ' Clear range contents and formatting
    targetSheet.Range(targetSheet.Cells(newlastRow, targetTable.Range.Cells(1).Column).Address, targetSheet.Cells(previousLastRow, targetTable.Range.Cells(targetTable.Range.Columns.Count).Column).Address).Clear
    
    ' Delete all rows in range
    targetSheet.Range(targetSheet.Cells(newlastRow, targetTable.Range.Cells(1).Column).Address, targetSheet.Cells(previousLastRow, targetTable.Range.Cells(targetTable.Range.Columns.Count).Column).Address).EntireRow.Delete
    
    Dim tableCell As Range
    Dim rowWithFormulas As Long
    rowWithFormulas = 1
    For Each tableCell In targetTable.ListRows(rowWithFormulas).Range
    
        If tableCell.HasFormula Then
        
            tableCell.Copy targetTable.ListColumns(tableCell.Column).DataBodyRange
        
        End If
    
    Next tableCell
    
End Sub

试一试,让我知道它是否有效。

范围(“B”和LastRowFirst:“AA”和LastRowNext)如何。EntireRow.Delete?是否要删除整行或清除这些单元格中的内容?感谢Ricardo,它确实删除/清除了公式并调整了表格的大小,但它不会更改表外单元格的格式。我想清除所有/删除所有行,这样就没有格式设置,并且将滚动条最小化到表的末尾。您能帮忙吗?只是将
.clearcontents
更改为
.clear
,所以格式也被删除了。代码已更新。记住标记答案,以便其他人可以找到它。也只需从两个选项中选择一个,清除范围或删除行。很高兴它有帮助!