VBA中的多标准过滤器(不等于)

时间:2017-09-26 13:19:27

标签: vba excel-vba excel

我在Blue prism中使用以下代码在excel中过滤多标准。 但是我无法过滤不等于场景的多个标准。

Dim wb As Object
Dim excel as Object
Dim range as Object

Try
wb = GetWorkbook(Handle, Workbook)
excel = wb.Application
range = excel.Range(FRange)

Dim listOfValues as Array
listOfValues = Split(FCriteria,";")


wb.worksheets(Worksheet).select
range.select
range.Autofilter(FCol,listOfValues,7)



Success = True

Catch e As Exception
    Success = False
    Message = e.Message
Finally
    wb = Nothing
End Try

请帮我调整脚本

2 个答案:

答案 0 :(得分:0)

我几乎可以肯定没有过滤器选项来设置“否定列表”。您可以指定(正)值列表(这是您的代码到目前为止所执行的操作,为此您必须将7设置为第三个参数),或者您最多可以指定2个单独的条件(在Excel,选择“自定义过滤器”进行设置。

您应该直接在Excel中使用过滤器并尝试按照您的需要进行设置。一旦您满意,请清除过滤器,录制宏并重复过滤。转到VBA编辑器,看看那里有什么。将其转换为C#代码很简单。

可是:

  

无法通过Excel GUI设置无法通过代码(C#和VBA)进行任何过滤

答案 1 :(得分:0)

我会质疑你要做什么。由于您使用的是Blue Prism,因此您应该尝试访问BP Collection(VB DataTable)中的基础数据,而不是应用过滤器,这是人类可以进一步使用界面的可视化工具。机器人仍然需要对过滤后的数据做一些事情,编写代码以便在循环过程中继续处理数据要容易得多。

否则,请使用' Utilities - Collection Manipulation'的过滤器收集页面。 VBO获取过滤集合。

你也在使用VBA Split功能,你应该在VB中使用Split作为String的方法。

尝试使用'实用程序 - 收集操作'中的新页面。 VBO(未测试):

Dim NewRow As DataRow
Collection_Out = Collection_In.Clone

Dim Select_Concat As String
Select_Concat = "NOT(" & fieldName & " = '" & [String].Join("' OR " & fieldName & " = '", FCriteria.Split(";"c)) & "')"

For Each parentRow As DataRow In Collection_In.Select(Select_Concat)
    NewRow = Collection_Out.NewRow
    For Each c As DataColumn In NewRow.Table.Columns
        NewRow(c.ColumnName) = parentRow(c.ColumnName)
    Next c
    Collection_Out.Rows.Add(NewRow)
Next parentRow

NewRow = Nothing
Collection_In = Nothing

输入:Collection_In(集合),fieldName(文本),FCriteria(文本)

输出:Collection_Out(Collection)

首先需要将整个范围放入未经过滤的集合(这将是您的Collection_In到此页面,然后将过滤后的集合取出....