我在处理一些以前运行良好的代码时遇到了很大的困难。在我的一个子程序中,我隐藏了一堆行(准确地说是 1599 行),然后取消隐藏我需要的行,通常约为 200 行。查看代码:
Private Sub HideUnneededRows(numberToShow As Integer)
Dim thisSheet As Worksheet
Dim allHideableRows As String, rowsToShow As String
Dim firstRow As Integer
Dim secondRow As Integer
Dim lastRow As Integer
Dim lastRowToShow As Integer
Set thisSheet = ThisWorkbook.Sheets(1)
firstRow = thisSheet.Range("mass1").row
secondRow = firstRow + 1
lastRow = firstRow - 1 + maxNumberOfRows
lastRowToShow = firstRow - 1 + numberToShow '//numberToShow is usually 200
'//THIS NEXT LINE RUNS, BUT STOPS EXECUTING AFTER THE ACTION IS PERFORMED
Range("A" + CStr(secondRow) + ":A" + CStr(lastRow)).EntireRow.Hidden = True
Range("A" + CStr(secondRow) + ":A" + CStr(lastRowToShow)).EntireRow.Hidden = False
End Sub
一切都很好,直到代码隐藏行(“Range("A"+....).Hidden”行的第一行)。它很好地执行隐藏操作,但随后不会到达下一行代码,这将取消隐藏一组不同的行。 我尝试过的事情:
- 对范围字符串进行硬编码(即
Range("A25:A1623")
而不是Range("A"+ CStr(secondRow) + ":A"+ ... .)
) - 通过
Rows
对象执行这两个隐藏操作(即Rows("25:1623").Hidden = True
) - 将这两条隐藏线提取到新模块中自己的
button_click
事件中,以查看它是否与当前所在的模块有关
所有这些都产生了完全相同的结果 - 代码在隐藏 1599 行后停止所有执行。
帮忙?!
最佳答案
感谢@PeterT,我的问题的解决方案是在运行代码之前关闭屏幕更新,然后在代码运行完成后重新打开它。新代码如下:
Private Sub HideUnneededRows(numberToShow As Integer)
Dim thisSheet As Worksheet
Dim firstRow As Integer
Dim secondRow As Integer
Dim lastRow As Integer
Dim lastRowToShow As Integer
Set thisSheet = ThisWorkbook.Sheets(1)
firstRow = thisSheet.Range("mass1").row
secondRow = firstRow + 1
lastRow = firstRow - 1 + maxNumberOfRows
lastRowToShow = firstRow - 1 + numberToShow '//numberToShow is usually 200
'//Turn off ScreenUpdating
Application.ScreenUpdating = False
'//THIS NEXT LINE WAS GIVING ME TROUBLES
Range("A" + CStr(secondRow) + ":A" + CStr(lastRow)).EntireRow.Hidden = True
Range("A" + CStr(secondRow) + ":A" + CStr(lastRowToShow)).EntireRow.Hidden = False
'//Turn ScreenUpdating back on
Application.ScreenUpdating = True
End Sub
关于隐藏行后,VBA 代码停止执行,没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35853960/