根据第二张表中的两列应用自动筛选器时出现类型不匹配错误

问题描述 投票:0回答:1

我有“Combined”和 PercentageSetter“工作表上的数据

  1. 组合表中的列是股票、分配%
  2. PercentageSetter 表中的列是 Scrip、Min % 和 Max%

我正在尝试根据 PercentageSetter 工作表中的值自动过滤组合工作表,如下标准:
合并后的工作表应仅显示 Scrip 与 PercentageSetter 中的 Scrip 匹配的记录,并且其 Allocation% 应在 Min% 和 Max% 之间(包含两者)。

我的代码出现错误

类型不匹配

上线

.AutoFilter field:=8, Criteria1:=">=" & Application.Transpose(MinPercentArray), Operator:=xlAnd, Criteria2:="<=" & Application.Transpose(MaxPercentArray)
Private Sub ApplyFilter()
 
    Dim IncludeArray() As String
    Dim MinPercentArray() As Variant
    Dim MaxPercentArray() As Variant
    Dim lastrow As Long
    Dim i As Long
    Dim wsCombined As Worksheet
    Dim wsPercentageSetter As Worksheet

    Set wsCombined = ThisWorkbook.Worksheets("Combined")
    Set wsPercentageSetter = ThisWorkbook.Worksheets("PercentageSetter")
    
    With wsPercentageSetter
        lastrow = .Cells(.Rows.count, "A").End(xlUp).Row
        ReDim IncludeArray(lastrow - 1)
        ReDim MinPercentArray(lastrow - 1)
        ReDim MaxPercentArray(lastrow - 1)
        ' assumes a header row so start in row 2
        For i = 2 To lastrow
            IncludeArray(i - 2) = .Range("A" & i).Text
            MinPercentArray(i - 2) = .Range("B" & i).value
            MaxPercentArray(i - 2) = .Range("C" & i).value
        Next i
    End With

    'Debug.Print wsCombined.Range("H2")
    'Debug.Print VarType(wsCombined.Range("H2").value)

    With wsCombined.Rows("2:" & wsCombined.Rows.count)
        .AutoFilter field:=8, Criteria1:=MinPercentArray, Operator:=xlFilterValues
        .AutoFilter field:=8, Criteria1:=">=" & Application.Transpose(MinPercentArray), Operator:=xlAnd, Criteria2:="<=" & Application.Transpose(MaxPercentArray)
    End With
End Sub

我尝试将数组更改为双倍。

excel vba
1个回答
1
投票

VBA 宏的问题可能是由于您使用 Application.Transpose 以及对数组应用 AutoFilter 的方式造成的。

您可能需要循环遍历“Combined”表中的每一行,检查其 Scrip 是否与“PercentageSetter”表中的任何 Scrip 匹配,然后验证分配百分比是否在 Min % 和 Max % 范围内。如果是,则显示该行;否则,它会被隐藏。

Private Sub ApplyFilter()
    Dim wsCombined As Worksheet, wsPercentageSetter As Worksheet
    Dim lastRowCombined As Long, lastRowPercentageSetter As Long
    Dim i As Long, j As Long
    Dim scrip As String, allocation As Double, minPerc As Double, maxPerc As Double

    Set wsCombined = ThisWorkbook.Worksheets("Combined")
    Set wsPercentageSetter = ThisWorkbook.Worksheets("PercentageSetter")

    lastRowCombined = wsCombined.Cells(wsCombined.Rows.Count, "A").End(xlUp).Row
    lastRowPercentageSetter = wsPercentageSetter.Cells(wsPercentageSetter.Rows.Count, "A").End(xlUp).Row

    Application.ScreenUpdating = False
    wsCombined.AutoFilterMode = False

    For i = 2 To lastRowCombined
        scrip = wsCombined.Cells(i, 1).Value
        allocation = wsCombined.Cells(i, 2).Value
        wsCombined.Rows(i).Hidden = True

        For j = 2 To lastRowPercentageSetter
            If wsPercentageSetter.Cells(j, 1).Value = scrip Then
                minPerc = wsPercentageSetter.Cells(j, 2).Value
                maxPerc = wsPercentageSetter.Cells(j, 3).Value

                If allocation >= minPerc And allocation <= maxPerc Then
                    wsCombined.Rows(i).Hidden = False
                    Exit For
                End If
            End If
        Next j
    Next i

    Application.ScreenUpdating = True
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.