达米安(Damian)的解决方案有效,但没有人知道为什么On Error Goto
不会超过屏幕截图中的每种错误,而是通过#DIV/0!
而不是其他任何错误。
我正在为清理修剪工作簿中的所有单元格编写代码。幸运的是,我可以使用以下代码来做到这一点。
On Error GoTo c
For Each ws In wb.Worksheets
Set rng = ActiveSheet.UsedRange
For Each cl In rng
Debug.Print cl.Address
cl.Value = WorksheetFunction.Clean(Trim(cl.Value))
GoTo l
c:
counter = counter + 1
l:
Next
Next
但是,当任何单元格包含错误值(如下面的屏幕快照)时,就会出现问题。
VBA的On Error Goto
能够克服#DIV/0!
错误并将其值分配给计数器,但不能为其他错误分配值。它卡在那些细胞上。
答案 0 :(得分:1)
这应该可以解决您的问题:
On Error GoTo c
For Each ws In wb.Worksheets
Set Rng = ws.UsedRange 'activesheet will always be the sheet you are using clicking the macro button
For Each cl In Rng
Debug.Print cl.Address
If Not IsError(cl) Then cl = WorksheetFunction.Clean(Trim(cl)) 'check first if the value is an error, if it's not then trim
GoTo l
c:
counter = counter + 1
l:
Next
Next
使用UsedRange
的想法将循环遍历所有单元格,即使它们为空,但曾经使用过一次。当心。