gpt4 book ai didi

excel - 结合标准/宏VBA

转载 作者:行者123 更新时间:2023-12-04 22:18:10 25 4
gpt4 key购买 nike

Sub Macro_1()
Dim RowIndex, x As Integer
Dim RowArr() As String
RowIndex = "8,9,11,12,13,14,15,16,17"
RowArr = Split(RowIndex, ",")
Application.ScreenUpdating = False

Sheets("Test").Select

For x = 0 To UBound(RowArr)
ActiveSheet.Rows().AutoFilter Field:=CInt(RowArr(x))
Next
ActiveSheet.Rows().AutoFilter Field:=10, Criteria1:="<>"
Sheets("Test").Select
Call SetClassFields("1")
Call Macro_Filter
Application.ScreenUpdating = True

End Sub
Sub Macro_2()
Dim RowIndex, x As Integer
Dim RowArr() As String
RowIndex = "8,9,10,12,13,14,15,16,17"
RowArr = Split(RowIndex, ",")
Application.ScreenUpdating = False

Sheets("Test").Select

For x = 0 To UBound(RowArr)
ActiveSheet.Rows().AutoFilter Field:=CInt(RowArr(x))
Next
ActiveSheet.Rows().AutoFilter Field:=11, Criteria1:="<>"
Sheets("Test").Select
Call SetClassFields("2")
Call Macro_Filter
Application.ScreenUpdating = True

End Sub
您好,我有一个包含多个标准的表格。到目前为止,一次只需要过滤一个标准。现在应该过滤几个包含 X 的列。现在我正在考虑如何结合这两个宏,因为我还是一个初学者。谢谢你。此致

最佳答案

好吧,即使你是初学者,你也应该知道你的代码是做什么的。看起来你放东西,并不真正知道它们做什么。例如,以下内容绝对没有任何作用。

For x = 0 To UBound(RowArr)
ActiveSheet.Rows().AutoFilter Field:=CInt(RowArr(x))
Next
它可以安全地移除。
这意味着 x , RowIndexRowArr也可以删除,因为您不会在其他地方使用它们。
此外,无需使用 .Select ,因为可以引用任何工作表或范围而无需实际选择它。在您的代码中,我们可以看到 Sheets("Test").Select两次。第二个绝对什么都不做。建议删除第一个。删除时,在以下行中而不是 ActiveSheet您可以使用 Sheets("Test")这是相同的引用,但没有不必要的 Sheets("Test").Select .
您的固定宏可能如下所示:
Sub Macro_1()
Application.ScreenUpdating = False

Sheets("Test").Rows().AutoFilter Field:=10, Criteria1:="<>"
Call SetClassFields("1")
Call Macro_Filter

Application.ScreenUpdating = True
End Sub

Sub Macro_2()
Application.ScreenUpdating = False

Sheets("Test").Rows().AutoFilter Field:=11, Criteria1:="<>"
Call SetClassFields("2")
Call Macro_Filter

Application.ScreenUpdating = True
End Sub
我希望我是正确的,因为您可能出于示例目的缩短了代码...
现在,回答你的问题。我假设您一个接一个地运行您的脚本。所以主要代码部分可能只是放在一个脚本中,如下所示:
Sub Macro_3()
Application.ScreenUpdating = False

Sheets("Test").Rows().AutoFilter Field:=10, Criteria1:="<>"
Call SetClassFields("1")
Call Macro_Filter
Sheets("Test").Rows().AutoFilter Field:=11, Criteria1:="<>"
Call SetClassFields("2")
Call Macro_Filter

Application.ScreenUpdating = True
End Sub

如果您希望能够选择要走的路径(OR 条件),则需要给函数一个参数(让我们调用参数 i )。
Sub caller()
Call Macro_x(1)
End Sub

Private Sub Macro_x(i As Integer)
Application.ScreenUpdating = False

If i = 1 Then
Sheets("Test").Rows().AutoFilter Field:=10, Criteria1:="<>"
ElseIf i = 2 Then
Sheets("Test").Rows().AutoFilter Field:=11, Criteria1:="<>"
Else
MsgBox "parameter i was not defined"
Exit Sub
End If
Call SetClassFields(CStr(i))
Call Macro_Filter

Application.ScreenUpdating = True
End Sub
在这段代码中,您可以看到主函数( caller )和另一个( Marcro_x ),它在 caller 内部调用.调用 Macro_x 时必须在括号中提供参数- 12 .根据提供的参数,sub 会做一些稍微不同的事情。

关于excel - 结合标准/宏VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66806143/

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