应用自动筛选器来筛选第二张表中两列上的标准记录时,出现类型不匹配错误

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

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

  1. 组合表中的列是股票、分配%
  2. PercentageSetter 表中的列是 Scrip、Min % 和 Max% 我正在尝试创建一个 VBA 宏来根据 PercentageSetter 工作表中的值自动过滤组合工作表,如下所示 标准: 合并后的工作表应仅显示 Scrip 与 PercentageSetter 中的 Scrip 匹配的记录,并且其 Allocation% 应在 Min% 和 Max% 之间(包含两者)。

下面是我的代码,但它给出了错误 Type Mismatch on line .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 types mismatch
1个回答
0
投票

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.