gpt4 book ai didi

VBA - 循环多个工作表并应用过滤器

转载 作者:行者123 更新时间:2023-12-02 15:00:43 25 4
gpt4 key购买 nike

我需要对同一工作簿中的所有工作表应用相同的过滤器。

所有工作表的第一行都有标题,但应用过滤器的标题名称并不总是位于同一列,即工作表 1 中的标题位于工作表 2 的 H 列中它位于 A 列,在工作表 3 中,它位于 L 列,依此类推...

此外,某些 header 不会与条件完全匹配 - 即,有些 header 将“STATUS”作为 header ,有些 header 为“前缀_Status”,其他 header 为“CurrentStatus”等等..所以我需要使用 Instr 功能(除非有更好的选择),但我似乎不知道在哪里或如何使用它..

这是我到目前为止的代码:

Sub WorksheetLoop()

Dim WS_Count As Integer
Dim I As Integer

' Set WS_Count equal to the number of worksheets in the active
' workbook.
WS_Count = ActiveWorkbook.Worksheets.count

' Begin the loop.
For I = 1 To WS_Count

Dim count As Integer, rngData As Range
Set rngData = Range("A1").CurrentRegion

count = Application.WorksheetFunction.Match("STATUS", Range("A1:AZ1"), 0)

rngData.autofilter Field:=count, Criteria1:="INACTIVE"

Next I

End Sub

此代码仅将过滤器应用于一张工作表。

最佳答案

只要您未在代码中显式指定工作表,您就始终引用 ActiveSheet。因此,在 Range() 中,您必须像这样引用工作表:

来自:

Set rngData = Range("A1").CurrentRegion
count = Application.WorksheetFunction.Match("STATUS", Range("A1:AZ1"), 0)

更改为:

With Worksheets(I)
Set rngData = .Range("A1").CurrentRegion
count = Application.WorksheetFunction.Match("STATUS", .Range("A1:AZ1"), 0)
End With

代码中 With Worksheets(I) - End With 之间的点是造成差异的原因:

enter image description here

<小时/>

关于Application.WorksheetFunction.Match,它仅匹配完全包含单词“STATUS”的单元格。如果前面有空格或后面有符号之类的东西,那么这样的东西是个好主意:

count = Application.Match("*STATUS*", Worksheets(1).Range("A1:AZ1"), 0)

那么仍然需要检查。像这样:

If Not IsError(count) Then
rngData.autofilter Field:=count, Criteria1:="INACTIVE"
End If
<小时/>

关于问题的第二部分,请在 Match 函数中的值周围使用 *:

Public Sub TestMe()    
Range("E1") = "5teSt34"
Debug.Print Application.WorksheetFunction.Match("*Test*", Range("A1:H1"), 0)
End Sub

将始终返回 5

关于VBA - 循环多个工作表并应用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49531902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com