Excel的新手,请原谅我,如果我解释错误,很高兴澄清评论中的任何问题,我的VBA很可能很糟糕,但我昨天才第一次被要求这样做。
我正在尝试使用单个按钮清除所有工作表中的回车。 我已经找到了在当前工作表中清除它们的方法,并且运行正常:
Sub RemoveCarriageReturns()
Dim MyRange As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each MyRange In ActiveSheet.UsedRange
If 0 < InStr(MyRange, Chr(10)) Then
MyRange = Replace(MyRange, Chr(10), "")
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
我已经搜索了几种让它在所有工作表中运行的方法,但似乎没有一种方法可行,我目前的代码是:
Sub RemoveCarriageReturns()
Dim MyRange As Range
Dim ws As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each ws In Worksheets
For Each MyRange In ActiveSheet.UsedRange
Select Case UCase(ws.Name)
Case "OTCUEXTR", "OTFBCUDS", "OTFBCUEL"
With ws
If 0 < InStr(MyRange, Chr(10)) Then
MyRange = Replace(MyRange, Chr(10), "")
End If
End With
End Select
Next
Next ws
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
我可以看到它贯穿所有工作表,但没有任何变化超出第一张工作表(工作正常并删除了回车。) 我在这里做错了什么建议?
如果之前已经回答道歉,我到目前为止无法找到解决方案。
感谢您的帮助!
答案 0 :(得分:1)
据我了解,ActiveSheet
是屏幕上显示的表格。 (如果我错了,请随意纠正我。)如果您仍想使用此方法,则必须先通过ws.Activate
在您的代码中,它将检查ws.name
是否使用了每个单元格。它可能会拖累性能。更好的方法是首先检查名称,然后做你的东西。在您的情况下,由于您只需要查找3个工作表并且您已经知道了它们的名称,因此首先设置数组是正确的方法。
...
Sub RemoveCarriageReturns()
Dim MyRange As Range
Dim NameList() As Variant
NameList = Array("OTCUEXTR", "OTFBCUDS", "OTFBCUEL")
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = 0 To 2
With Worksheets(NameList(i))
For Each MyRange In .UsedRange
If 0 < InStr(MyRange, Chr(10)) Then
MyRange = Replace(MyRange, Chr(10), "")
End If
Next MyRange
End With
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub