【发布时间】:2016-01-08 18:08:57
【问题描述】:
下面的代码在执行时处于活动状态的工作表上一遍又一遍地执行,而不是遍历所有工作表(例外除外)。
我做错了什么?
Dim wsSheet As Worksheet
For Each wsSheet In ThisWorkbook.Worksheets
Select Case wsSheet.Name
Case "Affiliates", "New Report", "Pasted Report", "New Month Or Client", "Set Up Data"
'Do nothing.
Case Else
With wsSheet
Range("B72").Select
Range("B72:L86").Sort Key1:=Range("I72"), Order1:=xlDescending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B72:L72,B74:L74,B76:L76,B78:L78,B80:L80,B82:L82,B84:L84,B86:L86").Select
Range("B86").Activate
ExecuteExcel4Macro "PATTERNS(,0,1,TRUE,2,4,0,0)"
Range("B73:L73,B75:L75,B77:L77,B79:L79,B81:L81,B83:L83,B85:L85").Select
Range("B85").Activate
ExecuteExcel4Macro "PATTERNS(,0,10,TRUE,2,4,0,0.799981688894314)"
Range("C93").Select
End With
End Select
Next wsSheet
End Sub
【问题讨论】:
-
它是循环的,但是当使用
With块时,必须在那些应该由With限定的对象/函数之前放置一个.。儿子在你所有的Ranges前面放一个.喜欢.Range(...) -
借鉴@Scott 的出色评论- 在使用
Range()、Cells()、Row()等时,您应该始终明确,尤其是在使用多个电子表格时。使用With会有所帮助,因为您只需要占位符.。只是注意到你应该总是使用它,所以你甚至可以像.Range(.cells(2,1),.Cells(.Rows.Count,2)) ... -
我在所有
Ranges前面都放了一个.,但现在我得到了 - 运行时错误'1004':对象'范围'的方法'选择'失败 -
所以请发布您更正的代码。
-
那是因为您试图在工作表上选择不是
ActiveSheet的区域。从技术上讲,您可以通过在尝试选择任何范围之前激活或选择工作表来纠正此问题,但我强烈建议避免在宏中使用Select语句:stackoverflow.com/questions/10714251/…