Do Is IsEmpty循环遍历多个用户定义的范围

时间:2015-11-24 22:03:25

标签: excel vba excel-vba

这是问题Do Until IsEmpty to loop through the user-defined ranges的延续:

在下面的代码中,excel宏循环遍历原始文本范围,将所有“tagname”实例替换为单元格D2中指定的loopText,并将更正的文本放入单元格B9。然后,它检查循环文本范围是否具有其他值,并再次循环原始文本以考虑这些。一旦looptext单元格为空,宏就会停止并为每个loopText实例打印更正后的文本。 与替换单元格D2中的“标记名”并行以后,我希望宏将单词“sheetname”替换为E2及以后的单元格范围。 我创建了一个单独的Do Until IsEmpty循环,但是excel只执行第一个循环。

请帮助我在VB代码中找到错误。

谢谢。

Sub CommandButton21_Click()
Dim correctedText2 As Range
Dim OriginalText2 As Range
Dim loopText1 As Range
Dim loopText2 As Range
Dim cel As Range
Dim i As Long
Dim j As Long
Dim k As Long

Set OriginalText2 = Range("H3:H20")
Set correctedText2 = Range("B9")
Set loopText1 = Range("D2")
Set loopText2 = Range("E2")

i = 0

j = 0

Do Until IsEmpty(loopText1.Offset(j).Value)

    For Each cel In OriginalText2
        correctedText2.Offset(i).Value = Replace(cel.Value, "tagname", loopText1.Offset(j).Value)
        i = i + 1
    Next cel
    j = j + 1
Loop

k = 0

Do Until IsEmpty(loopText2.Offset(k).Value)

    For Each cel In OriginalText2
        correctedText2.Offset(i).Value = Replace(cel.Value, "sheetname", loopText2.Offset(k).Value)
        i = i + 1
    Next cel
    k = k + 1
Loop

End Sub

1 个答案:

答案 0 :(得分:0)

感谢@ScottHoltzman,这是答案!

Sub CommandButton21_Click()
Dim correctedText1 As Range
Dim correctedText2 As Range
Dim correctedText3 As Range
Dim OriginalText1 As Range
Dim OriginalText2 As Range
Dim loopText1 As Range
Dim loopText2 As Range
Dim cel As Range
Dim i As Long
Dim j As Long

Set OriginalText2 = Range("H3:H20")
Set correctedText2 = Range("B9")
Set loopText1 = Range("D2")
Set loopText2 = Range("E2")

i = 0
j = 0

Do Until IsEmpty(loopText1.Offset(j).Value)

    For Each cel In OriginalText2
        correctedText2.Offset(i).Value = Replace(Replace(cel.Value, "tagname", loopText1.Offset(j).Value), "sheetname", loopText2.Offset(j).Value)
        i = i + 1
    Next cel
    j = j + 1

Loop

End Sub

而不是创建两个Do Until IsEmpty循环,而是组合成一个带有双重替换的循环。