【问题标题】:VBA, excel : deleting/inserting rows , no errors, no resultVBA,excel:删除/插入行,没有错误,没有结果
【发布时间】:2020-10-12 10:45:17
【问题描述】:

谁能帮助/分析?尝试了各种语句,但未添加/删除行。 下面不是 VBA 中最有效的方法,但我必须找出为什么语句不处理而不给出错误。 我正在使用表格(列表对象),因此我不必使用使用列字母或行号的单元格/行地址。

(有excel表格,不知道怎么贴在这里)

Function TableResizeInRows(SheetName As String, TableName As String, NumberDataRows As Integer) As String
'NO ERROR BUT ALSO NO RESULT
Dim l_Tableref As ListObject
Dim l_SheetName As Worksheet
Dim l_range As Range
Dim l_ListRows As ListRows
Dim MyNewRow As ListRow
Dim c_ListRows As Long
Dim InsertIndex As Integer
Dim DeleteIndex As Integer
Dim HeaderIsOnRow As Integer
Dim StartWsRow As Integer
Dim EndWsRow As Integer
On Error GoTo ErrorHandler

If (NumberDataRows < 2) Then
    TableResizeInRows = "Row 1 not to be deleted, formulas will be deleted too!"
    Exit Function
End If

Set l_SheetName = Worksheets(SheetName)
' make goal-worksheet active (set correct context)
l_SheetName.Activate
' Define Table Object
Set l_Tableref = Sheets(SheetName).ListObjects(TableName)
' determine # rows in listobject
Set l_ListRows = l_Tableref.ListRows
c_ListRows = l_Tableref.ListRows.Count
' determine rownumber on which the table is
HeaderIsOnRow = Sheets(SheetName).ListObjects(TableName).HeaderRowRange.Row
' Now we have sheet-rows that should be deleted/inserted
If (c_ListRows > NumberDataRows) Then
                ' We have to delete rows but it should be (the last row) of the listobject (Table)
                ' EndWsRow = last row that is to be deleted (lowest row#)
    EndWsRow = (HeaderIsOnRow + NumberDataRows) + 1
                ' StartWsRow = First row that is to be deleted (highest row#)
    StartWsRow = HeaderIsOnRow + c_ListRows
    For DeleteIndex = StartWsRow To EndWsRow Step -1
'NO ERROR BUT ALSO NO RESULT
'        Set l_range = l_SheetName.Range("A" & DeleteIndex)
'        Range("A" & DeleteIndex).EntireRow.Delete
        Worksheets(SheetName).Rows(DeleteIndex).Delete
        'l_Tableref.ListRows(DeleteIndex - HeaderIsOnRow).Delete 'Based on row in table 'results in error 1004
    Next
    TableResizeInRows = "Success, rows deleted?"
    Exit Function
Else
    If (c_ListRows < NumberDataRows) Then
                ' We must insert directly below the listobject (Table)
                ' StartWsRow = Last row of table after which a row is to be inserted(so last rownumber on sheet that contains tablerow)
        StartWsRow = HeaderIsOnRow + c_ListRows
                ' EndWsRow = Last row after which one more row is to be inserted
        EndWsRow = (HeaderIsOnRow + NumberDataRows) - 1
        For InsertIndex = StartWsRow To EndWsRow Step 1
'NO ERROR BUT ALSO NO RESULT
            Worksheets(SheetName).Rows(InsertIndex).Insert Shift:=xlShiftDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Next
        TableResizeInRows = "Success, rows inserted?"
        Exit Function
    End If
End If
TableResizeInRows = "Result unknown"
Exit Function

ErrorExit:
    On Error Resume Next
    Exit Function

ErrorHandler:
' Public Function bCentralErrorHandler
' see https://stackoverflow.com/questions/19042604/vba-excel-error-handling-especially-in-functions-professional-excel-developm
    If bCentralErrorHandler(msMODULE, sSOURCE, , True) Then
        Stop
        Resume
    Else
        Resume ErrorExit
    End If
End Function

【问题讨论】:

  • 立即摆脱所有错误处理,然后找出错误实际发生在何处
  • 你怎么称呼这个?
  • snake_case 只是在这里看起来所以错了顺便说一句。
  • 从工作表调用这将不起作用。工作表 (UDF) 中作为公式调用的函数不会更改任何内容,只会更改调用它的单元格的值。它不会格式化或删除或更改任何其他单元格的值。
  • @ArnoldHatCGI。您可以删除自己的问题。问题下方应该是灰色的一些选项。 [分享编辑删除等]

标签: excel vba delete-row


【解决方案1】:

答案在 cmets 中,调用函数的方式错误,不可能在单元格内。 感谢 Scott Craner

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2018-10-23
    • 2018-01-26
    • 2016-07-16
    • 1970-01-01
    相关资源
    最近更新 更多