用一个button在多个电子表格中运行VBA

新来的Excel,所以如果我解释了一些错误,很高兴在清除任何Q的评论,我的VBA很可能是可怕的,但我只被要求这样做昨天第一次。

我试图使用一个button清除所有工作表中的回车。 我已经find了一种方法来清除他们在当前的工作表,这运行良好:

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 

我已经search了几种方法来运行所有的工作表,但是没有任何工作,我现在的代码是:

 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 

我可以看到它遍历所有表单,但没有任何变化超出第一个工作表(这工作正常,并删除回车。)任何意见,我在做什么错在这里?

道歉,如果这之前已经回答,我一直无法find一个解决scheme到目前为止在线。

谢谢你的帮助!

  1. 在我的理解中, ActiveSheet是显示在屏幕上的工作表。 (如果我错了,请随时纠正我。)如果你仍然想使用这种方法,你必须先激活它ws.Activate

  2. 在你的代码中,它将检查每个使用的单元的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