我有以下VBA代码,当我仅为特定区域(圣地亚哥)执行它时需要很长时间。
所有其他地区的代码运行顺畅。
Sub Test()
Range("A8:AQ1800").Clear
Application.ScreenUpdating = False
If Sheet4.Range("C1795").Value = False And Sheet4.Range("C1796").Value = True And Sheet4.Range("C1797").Value = True Then
Sheet1.Activate
Range("F1").Select
ActiveSheet.Range("$A$1:$AR$1818").AutoFilter Field:=5, Criteria1:=Array( _
"Clinic", "Medical Group", "Outpatient Surgi Center", "Owner Subsidiary", "="), _
Operator:=xlFilterValues
Range("B1").Select
ActiveSheet.Range("$A$1:$AR$1818").AutoFilter Field:=6, Criteria1:= _
Sheet2.Range("B1").Value
Range("A2:D2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheet2.Activate
ActiveSheet.Select
Range("B8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A8").Select
Selection.End(xlToLeft).Select
Range("D8").Select
Selection.End(xlDown).Select
Selection.End(xlUp).Select
Range("A8").Select
Selection.End(xlUp).Select
Sheet1.Activate
ActiveSheet.Range("G2:AR2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheet2.Activate
ActiveSheet.Select
Range("F8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F8").Select
Selection.End(xlToLeft).Select
Range("H8").Select
Selection.End(xlDown).Select
Selection.End(xlUp).Select
Range("B8").Select
Selection.End(xlUp).Select
End If
sheet2 的前端如下所示。旁边的复选框 医院 ASC 其他 对应于代码中的TRUE / FALSE选项
If Sheet4.Range("C1795").Value = True And Sheet4.Range("C1796").Value = False And Sheet4.Range("C1797").Value = False Then
Sheet1 的前端如下所示。
只有当我取消一个位置(加利福尼亚州圣地亚哥)医院(False-True-True组合)旁边的框时,代码才需要很长时间才能运行。
我不明白这是否是优化问题,因为任何其他地区都不会发生这种情况。
提前多多感谢。
P.S。如果我提供了足够的信息,请告诉我。
答案 0 :(得分:0)
陈述:
Range("A2:D2").Select
Range(Selection, Selection.End(xlDown)).Select
具有选择范围从“A2:D2”到“A”列的第一个非空 和 可见单元格的效果“在当前活动的工作表中(即Sheet1
)。
因此,应该结合:
ActiveSheet.Range("$A$1:$AR$1818").AutoFilter Field:=5, Criteria1:=Array( _
"Clinic", "Medical Group", "Outpatient Surgi Center", "Owner Subsidiary", "="), _
Operator:=xlFilterValues
和
ActiveSheet.Range("$A$1:$AR$1818").AutoFilter Field:=6, Criteria1:= _
Sheet2.Range("B1").Value
过滤没有行然后选择所有行到最后一行
站在上面,以下陈述:
Sheet1.Activate
....
ActiveSheet.Range("$A$1:$AR$1818").AutoFilter Field:=6, Criteria1:= _
Sheet2.Range("B1").Value
将在其"A1:AR1818"
(“地区”)列中过滤工作表Sheet1
的范围"F"
,其内容为Sheet2
单元格"B1"
。
根据您的示例,后者的当前值是“San Diego,CA”,而"F"
的列Sheet1
似乎充满了数字(例如:“83”)......
假设列Sheet1
中的其余部分(但"F"
图片中没有可见)没有任何“San Diego,CA”值,那么这些后续声明:
Range("A2:D2").Select
Range(Selection, Selection.End(xlDown)).Select
具有在列A中选择单元格的效果:D从第2行到表格中的最后一行!
我想Sheet4
包含用户在Sheet2
单元格"B1"
下拉列表中选择的值的某些编码到一些代码中
如果是这种情况则替换:
ActiveSheet.Range("$A$1:$AR$1818").AutoFilter Field:=3, Criteria1:= _
Sheet2.Range("B1").Value`
使用:
ActiveSheet.Range("$A$1:$AR$1818").AutoFilter Field:=3, Criteria1:= _
Sheet4.Range("xn").Value`
您必须将"xn"
更改为正确的Sheet4
单元格引用