我收到一条错误消息,无法调试

时间:2019-09-10 11:02:50

标签: excel vba

运行宏时出现错误代码:

  

运行时错误450:参数数量错误或属性分配无效

基本上,我只需要过滤3个文本XBKKXBKFXMAI,而下面的代码则无法过滤。

Dim OrigLines, LiveData As Long
Dim FirstRow As Integer

OrigLines = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
FirstRow = 1

    Sheets("Paste_SDR").Select
    Range("$A$1:$FB" & OrigLines).Copy
    Sheets("SDR - working").Select
    Range("A1").Select
    Selection.PasteSpecial
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$FB" & OrigLines).AutoFilter Field:=126, Criteria1:= _
        "<>*XBKK*", Operator:=xlAnd, Criteria2:="<>*XMAI*", Operator:=xlAnd, Criteria2:="<>*XBKF*"

    If Range("A" & Rows.Count).End(xlUp).Row > FirstRow Then
    Range("$A$2:$FB" & OrigLines).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
    End If

2 个答案:

答案 0 :(得分:1)

抛出该错误是因为您不能多次传递相同的参数。无论如何,以您尝试的方式向自动过滤器传递两个以上的条件是不可能的。

如果您有要用作过滤器的值列表,请将它们作为数组传递:

ActiveSheet.Range("$A$1:$FB" & OrigLines).AutoFilter Field:=126, _
    Criteria1:=Array("XBKK", "XBKF", "XMAI"), Operator:=xlFilterValues

更新
OP希望删除不符合这三个值的所有行。由于没有命令SpecialCells(xlCellTypeInvisible),我看到以下可能性

  • 遍历所有行并检查它们是否可见,并将不可见的行收集到一个范围变量中。例如,请参见https://stackoverflow.com/a/39104356/7599798。使用此范围进行删除。
  • 在Excel工作表中创建一个帮助程序列,该公式的公式为TRUE或FALSE,这取决于您是否要保留该行。使用类似=OR($DV$2="XBKK", DV$2="XBKF", DV$2="XMAI")之类的内容并将您的过滤器设置为此帮助列

答案 1 :(得分:0)

我正在提供代码以删除不需要的行。我不使用$(document).ready(function() { $('.dropdownlabostaffs:first').on('change', function() { if(this.value != '') { var isReadOnly = $('.dropdownlabostaffs, .statusorder'); var domElements = $('.dropdownlabostaffs, .statusorder'); $(domElements).not(":first").prop('readonly', isReadOnly); $(domElements).not(":first").toggleClass('.dropdownlabostaffs', isReadOnly); $(domElements).not(":first").find('option').prop('hidden', isReadOnly); var labostaffs_new = $('.dropdownlabostaffs').val(); console.log('new_labostaffs :'+labostaffs_new); $('.dropdownlabostaffs').not(':first').val(labostaffs_new); $('.statusorder').prop('selectedIndex',3); } else if(this.value == '') { $('.statusorder').prop('selectedIndex',2); } }) }) 方法,但是它会快速,准确且易于阅读。

简而言之,此代码检查每个单元格是否符合指定条件。如果发现与指定条件不匹配的值,则将其放在范围对象中。检查完所有单元格后,将将放置在范围对象中的那些单元格的行删除。

AutoFilter