使用一个按钮

时间:2017-11-09 10:28:14

标签: excel vba excel-vba

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

我可以看到它贯穿所有工作表,但没有任何变化超出第一张工作表(工作正常并删除了回车。) 我在这里做错了什么建议?

如果之前已经回答道歉,我到目前为止无法找到解决方案。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  1. 据我了解,ActiveSheet是屏幕上显示的表格。 (如果我错了,请随意纠正我。)如果您仍想使用此方法,则必须先通过ws.Activate

  2. 激活它
  3. 在您的代码中,它将检查ws.name是否使用了每个单元格。它可能会拖累性能。更好的方法是首先检查名称,然后做你的东西。在您的情况下,由于您只需要查找3个工作表并且您已经知道了它们的名称,因此首先设置数组是正确的方法。

  4. ...

    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