Excel VBA在图纸的动态范围内运行宏

Excel VBA在图纸的动态范围内运行宏,vba,excel,Vba,Excel,作为我上一个问题的延伸,我正在尝试在所有工作表上运行一个宏,你们成功地帮助我做到了这一点。 我被告知工作表名称不能硬编码,因此我必须修改当前的解决方案 Sub RemoveCarriageReturns() Dim MyRange As Range Dim NameList() As Variant NameList = Array("OTCUEXTR", "OTFBCUDS", "OTFBCUEL") Application.ScreenUpdating = False Application

作为我上一个问题的延伸,我正在尝试在所有工作表上运行一个宏,你们成功地帮助我做到了这一点。 我被告知工作表名称不能硬编码,因此我必须修改当前的解决方案

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
Sub-RemoveCarriageReturns()
将MyRange变暗为Range
Dim NameList()作为变量
名称列表=数组(“OTCUEXTR”、“OTFBCUDS”、“OTFBCUEL”)
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
对于i=0到2
带工作表(名单(一))
对于.UsedRange中的每个MyRange
如果0
我曾尝试用一个For循环来填充数组,该循环收集每个工作表的名称。然而,我在茫然地盯着它看了两天后,我有限的VBA知识已经用光了,我被卡住了。我真的很想得到一些关于如何使该宏在数量和名称都可能发生变化的工作表范围内工作的指针

很高兴在评论中提供您需要的更多信息

Public Function GetSheetNames(ByVal wbk As workbook) As String()
    Dim names() As String
    Dim count As Integer
    Dim i As Integer

        count = wbk.Worksheets.count

        ReDim names(count - 1)
        For i = 1 To wbk.Worksheets.count
            names(i - 1) = wbk.Worksheets(i).Name
        Next

        GetSheetNames = names

    End Function
用法:
GetSheetNames(Application.ActiveWorkbook)

更新:仅适用于选定图纸:

Public Function GetActiveSheetNames(ByVal wbk As workbook) As String()
Dim names() As String
Dim count As Integer
Dim i As Integer

    count = wbk.Windows(1).SelectedSheets.count

    ReDim names(count - 1)
    For i = 1 To wbk.Windows(1).SelectedSheets.count
        names(i - 1) = wbk.Windows(1).SelectedSheets(i).Name
    Next

    GetActiveSheetNames = names

End Function
用法:
GetSheetNames(Application.ActiveWorkbook)

更新:仅适用于选定图纸:

Public Function GetActiveSheetNames(ByVal wbk As workbook) As String()
Dim names() As String
Dim count As Integer
Dim i As Integer

    count = wbk.Windows(1).SelectedSheets.count

    ReDim names(count - 1)
    For i = 1 To wbk.Windows(1).SelectedSheets.count
        names(i - 1) = wbk.Windows(1).SelectedSheets(i).Name
    Next

    GetActiveSheetNames = names

End Function
您可以这样做(或者按照原始代码的行使用索引)

Sub-RemoveCarriageReturns()
将MyRange变暗为Range
将ws设置为工作表
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
对于工作表中的每个ws
与ws
对于.UsedRange中的每个MyRange
如果0
您可以这样做(或者按照原始代码的行使用索引)

Sub-RemoveCarriageReturns()
将MyRange变暗为Range
将ws设置为工作表
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
对于工作表中的每个ws
与ws
对于.UsedRange中的每个MyRange
如果0
你是指工作簿中的所有工作表,还是选择?@sjr所有工作表。你是指工作簿中的所有工作表,还是选择?@sjr所有工作表。谢谢你的回答,我选择了另一个,因为它稍微简单一点,我必须向比我更不了解VBA的人解释。谢谢你的回答,我选择了另一个,因为它有点简单,我必须向比我更不了解VBA的人解释这一点。