3个回答
展开全部
这个问题,我花了许多时间来研究,终于有所收获,在这里分享给大家。
Excel(2007版) 的筛选对象及其属性关系图可以在这里看到:
http://hi.baidu.com/jamiechen/album/item/e620b7460cf848466963e540.html#
最大的麻烦是:Excel把同一个字段的筛选条件按三种不同的情况建立了不同的对象及属性结构(2003版的可能没有第三种情况,因为2003版最多只能设置2个条件):
1个条件:直接使用 .Criteria1 属性记录此条件;
2个条件:分别直接使用 .Criteria1、.Criteria2 属性记录这两个条件;
3个及以上条件:.Criteria1变成了1个Variant对象,在其下建立 .Criteria(n) 属性集来记录这些条件,不使用 .Criteria2;
所以,在VBA中检查一个Sheet的筛选设置情况有点麻烦,我写的样例代码如下,请参考:
Sub MyMacro1()
Dim i As Integer, j As Integer, Str
'检查是否设置了自动筛选
If ActiveSheet.FilterMode = False Then
MsgBox "没有设置自动筛选,请先设置好了再试!", vbCritical
Exit Sub
End If
'On Error Resume Next
With ActiveSheet.AutoFilter.Filters
'按所有筛选字段检查
For i = 1 To .Count
'检查该字段是否有设置筛选条件
With .Item(i)
If .On Then
Select Case .Count
Case 1 '有一个筛选条件
Str = .Criteria1
MsgBox "第 " & i & " 个字段有筛选条件:" & Str & "(1 of 1)"
Case 2 '有两个筛选条件
Str = .Criteria1
MsgBox "第 " & i & " 个字段有筛选条件:" & Str & "(1 of 2)"
Str = .Criteria2
MsgBox "第 " & i & " 个字段有筛选条件:" & Str & "(2 of 2)"
Case Else '有三个及以及筛选条件
Str = .Criteria1
For j = 1 To .Count
MsgBox "第 " & i & " 个字段有筛选条件: " & Str(j) & " (" & j & " of " & .Count & ")"
Next j
End Select
End If
End With
Next i
End With
End Sub
有疑问,请Hi我或给我发百度消息
GoodLuck!
Excel(2007版) 的筛选对象及其属性关系图可以在这里看到:
http://hi.baidu.com/jamiechen/album/item/e620b7460cf848466963e540.html#
最大的麻烦是:Excel把同一个字段的筛选条件按三种不同的情况建立了不同的对象及属性结构(2003版的可能没有第三种情况,因为2003版最多只能设置2个条件):
1个条件:直接使用 .Criteria1 属性记录此条件;
2个条件:分别直接使用 .Criteria1、.Criteria2 属性记录这两个条件;
3个及以上条件:.Criteria1变成了1个Variant对象,在其下建立 .Criteria(n) 属性集来记录这些条件,不使用 .Criteria2;
所以,在VBA中检查一个Sheet的筛选设置情况有点麻烦,我写的样例代码如下,请参考:
Sub MyMacro1()
Dim i As Integer, j As Integer, Str
'检查是否设置了自动筛选
If ActiveSheet.FilterMode = False Then
MsgBox "没有设置自动筛选,请先设置好了再试!", vbCritical
Exit Sub
End If
'On Error Resume Next
With ActiveSheet.AutoFilter.Filters
'按所有筛选字段检查
For i = 1 To .Count
'检查该字段是否有设置筛选条件
With .Item(i)
If .On Then
Select Case .Count
Case 1 '有一个筛选条件
Str = .Criteria1
MsgBox "第 " & i & " 个字段有筛选条件:" & Str & "(1 of 1)"
Case 2 '有两个筛选条件
Str = .Criteria1
MsgBox "第 " & i & " 个字段有筛选条件:" & Str & "(1 of 2)"
Str = .Criteria2
MsgBox "第 " & i & " 个字段有筛选条件:" & Str & "(2 of 2)"
Case Else '有三个及以及筛选条件
Str = .Criteria1
For j = 1 To .Count
MsgBox "第 " & i & " 个字段有筛选条件: " & Str(j) & " (" & j & " of " & .Count & ")"
Next j
End Select
End If
End With
Next i
End With
End Sub
有疑问,请Hi我或给我发百度消息
GoodLuck!
展开全部
楼主只是要用VBA来根据条件来提取数据吧?
for x=1 to ragne("A65536").end(xlup).row
if cells(x,1)=你要求的条件1 and cells(x,3)=你要求条件2 then
i=i+1
cells(x,1).resize(1,10).copy sheet2.range("A"&i).resize(1,10)
end if
next x
这样就把选出来的数据拷贝到sheet2工作表中依次往下排列了。
for x=1 to ragne("A65536").end(xlup).row
if cells(x,1)=你要求的条件1 and cells(x,3)=你要求条件2 then
i=i+1
cells(x,1).resize(1,10).copy sheet2.range("A"&i).resize(1,10)
end if
next x
这样就把选出来的数据拷贝到sheet2工作表中依次往下排列了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询