使用用户定义的范围作为单元格解析的输入

时间:2015-08-13 14:06:40

标签: excel vba excel-vba parsing

我在Excel 2010中编写宏以删除列的多个单元格中的换行符。该单元需要由用户选择。在上一个post之后,我能够创建一个InputBox来让用户选择范围但是现在,我无法处理选择中的数据。
我之前没有选择范围的代码使用正则表达式解析整个列,以在单元格中的字符串中查找模式并更改其内容。 我使用For i To Rows.Count代码块执行此操作:

For i = 1 To Rows.Count

    If Not IsEmpty(Cells(i, 5).Value) Then
       varString = Sheets(ActiveSheet.Name).Cells(i, 5).Text
       Sheets(ActiveSheet.Name).Cells(i,5).Value=objRegExp.Replace(varString, "$1 ")
    End If
Next i

现在我想替换静态列,以便我只能处理用户范围。 为了达到这个目的,我尝试了这个:

Set selection = Application.InputBox(Prompt:= _
            "Please select a range to apply the remove break lines procedure.", _
                Title:="Remove Line Breaks", Type:=8)

If selection Is Nothing Then
    Exit Sub
End If

Set RowsNumber = selection.CurrentRegion -> This line gives me an error: "Object required"
Set RowsNumber = RowsNumber.Rows.Count

For i = 1 To RowsNumber
    If Not IsEmpty(Cells(i, 5).Value) Then 
       varString = Sheets(ActiveSheet.Name).Cells(i, 5).Text 
       Sheets(ActiveSheet.Name).Cells(i, 5).Value = objRegExp.Replace(varString, "$1 ") 'Replace pattern found with regular expression in the same line
    End If
Next i

如何访问InputBox返回范围内的单元格?
我也尝试使用RowsNumber更改selection.Rows.Count但是这样,虽然它没有给出错误,但是当我运行调试器时,使用的单元格中包含空字符串。我认为这是因为当范围可能较小时我尝试访问row = 5,即如果用户只选择3个单元格则为3 我尝试了For Each Next循环,但是我再次尝试访问具有selection范围的单元格。

1 个答案:

答案 0 :(得分:0)

您可以使用For Each循环遍历范围的单元格。

以下是您修改的代码。我已将变量Selection的名称更改为rng,因为Selection是Excel库内置函数,应避免使用此名称。

Sub x()
    Dim rng As Excel.Range
    Dim cell As Excel.Range


    Set rng = Application.InputBox(Prompt:= _
                "Please select a range to apply the remove break lines procedure.", _
                    Title:="Remove Line Breaks", Type:=8)

    If rng Is Nothing Then
        Exit Sub
    End If

    For Each cell In rng.Cells
        If Not IsEmpty(cell.Value) Then
           varString = cell.Text
           cell.Value = objRegExp.Replace(varString, "$1 ") 'Replace pattern found with regular expression in the same line
        End If
    Next cell

End Sub