1

假设我有一个如下矩阵:

     EMPID    Type Of employment
   #1 10            "T"
   #2 11            "P"
   #3 20            "P"
   #4 40            "T"
   #5 50            "T"
   #6 15            "P"
   #7 19            "T"

过滤后

    EMPID    Type Of employment
  #2 11            "P"
  #3 20            "P"
  #6 15            "P"

你们能建议我如何在 vbscript 中做到这一点吗?我知道 VBA 的语法,但在 VBScipt 中不知道如何格式化?

过滤后,如果我在第 1 列上使用 CountA,我应该得到行号3还是7?我在这里太困惑了。

更新

  objSheet2.Range("B1").AutoFilter 2, "Parent",,,False

要删除自动过滤,我使用了代码 - objSheet2.Rows("1:1").Select.AutoFilter 但出现错误Unable to get the select property of the Range Class

已更正 objSheet2.Range("B1").AutoFilter 2, "Parent",,,True objSheet2.AutoFilterMode = False

查询:一旦过滤了行,那么当循环遍历它们时,我将如何识别过滤数据行的实际行数?

回答

    For rowIndex=2 To objExcel1.Application.WorksheetFunction.CountA(ob1.Columns(1))
    If objSheet2.Rows(rowIndex).Hidden Then
        ' do nothing - row is filtered out
    Else
        MsgBox(rowIndex)
    End If
    Next 

这样我得到了过滤行的实际行号。如果你们发布任何更好的想法,请提出建议:-)

截屏

在此处输入图像描述

谢谢

4

1 回答 1

2

我认为这会让你想要你更快一点。

objSheet2.Range("B1").AutoFilter 2, "Parent",,,True 

Dim rngFilter as Range
Set rngFilter = objXL.Application.Intersect(objSheet2.UsedRange,objSheet2.UsedRange.Offset(1),objSheet2.Columns(1)).SpecialCells(xlCellTypeVisible)

msgbox "Filtered range has " & rngFilter.Rows.Count & " rows."
'do with the range as you wish.

Dim cel as objXL.Range 'or just leave this off
For each cel in rngFilter
   msgbox cel.row
Next

objSheet2.AutoFilterMode = False

这样,您只选择过滤后的可见单元格。然后,您可以将该范围加载到一个数组中,或者在您认为合适的时候循环遍历它。

于 2012-12-19T16:35:06.443 回答