下面的我的宏检查一行中的25行左右 行中有一个名为start的代码,然后检查每个单元格 “0”如果找到“0”则该行被隐藏。此代码有效,但需要更长时间 我想要。我正在寻找一种加速宏的方法
您可以在此处找到我的电子表单的示例 https://drive.google.com/file/d/0B6lproNRrpS3UDMyUlNmN0d6SDQ/view?usp=sharing
Sub Button16_Click()
Application.ScreenUpdating = False
ActiveWorkbook.PrecisionAsDisplayed = False
Application.Goto Reference:="start"
Do While Not "end" = wwActiveCellName2
If Selection = "0" Then
Selection.EntireRow.Hidden = True
End If
Selection.Offset(1, 0).Select
Loop
End Sub
Function wwActiveCellName2() As String
On Error GoTo e1
wwActiveCellName2 = ActiveCell.Name.Name
Exit Function
e1:
wwActiveCellName2 = ""
End Function
答案 0 :(得分:2)
批量操作几乎总是比循环和比较单个单元更快。您为AutoFilter Method提供了一个不错的开始和结束。
CREATE TRIGGER loadprefix
ON Items
FOR INSERT
AS
BEGIN
UPDATE Items
SET ItemNumber = 'ITEM-' + CONVERT(VARCHAR, (SELECT Number FROM inserted))
WHERE Number = (SELECT Number
FROM inserted)
END
AutoFilter需要列标题单元格。如果 start 不是标题标签,并且应包含在零检查的条件范围内,请使用偏移版本(假设 start 尚未在第一行中)。
答案 1 :(得分:0)
不要使用选择。选择机制很慢。 使用变量来存储正在扫描的当前单元格
相反尝试这个
Sub Button16_Click()
Application.ScreenUpdating = False
ActiveWorkbook.PrecisionAsDisplayed = False
Application.Goto Reference:="start"
Dim curs As Range
Set curs = ActiveCell
do while wwActiveCellName2(curs) <> "end"
if curs.Value = "0" then
curs.EntireRow.Hidden = True
end if
set curs = curs.offset(1,0)
loop
end sub
Function wwActiveCellName2(curs As Range) As String
On Error GoTo e1
wwActiveCellName2 = curs.Name.Name
Exit Function
e1:
wwActiveCellName2 = ""
End Function