如何解决使用 Do While 优化 VBA 宏
我有一个包含大量工作表的 excel 文件,我想运行一个宏,该宏将根据该范围顶部的值隐藏一系列行。 我的宏可以工作,但由于我有大量工作表,因此运行需要很长时间...
有人能帮我优化一下吗,因为我可能做了一些不正常的事情...
Sub MasquerPrix()
Dim RowNum As Long
Dim StartRow As Long
Dim ColNum As Long
Columns("D:H").Select
Range("F1").Activate
Selection.EntireColumn.Hidden = False
Columns("E:F").Select
Selection.EntireColumn.Hidden = True
Range("A1").Select
StartRow = 1
RowNum = 1
ColNum = 2
Do While Cells(RowNum,ColNum).Value <> "Prix Total (Public HT)"
If Cells(RowNum,ColNum).Value <> "Prix Total (Public HT)" Then
Rows(RowNum).Resize(12).EntireRow.Hidden = True
Rows(StartRow & ":" & (RowNum)).EntireRow.Hidden = False
End If
RowNum = RowNum + 1
Loop
End Sub
感谢一百万!
解决方法
没有原始数据且不了解其处理逻辑,使用 Application.Match()
而不是 Do ... Loop
草拟了一个程序版本
Sub MasquerPrix() 'processes ActiveSheet
Const STR_TO_MATCH = "Prix Total (Public HT)",COL_NUM = 2
Dim RowNum As Long,StartRow As Long
Application.ScreenUpdating = False
Columns("D:H").Hidden = False
Columns("E:F").Hidden = True
StartRow = 1
RowNum = Application.Match(STR_TO_MATCH,Columns(COL_NUM),0)
If IsNumeric(RowNum) Then
Rows(RowNum).Resize(12).EntireRow.Hidden = True
Rows(StartRow & ":" & RowNum).EntireRow.Hidden = False
End If
Application.ScreenUpdating = True
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。