【问题标题】:Do Until IsEmpty to loop through multiple user-defined ranges直到 IsEmpty 循环遍历多个用户定义的范围
【发布时间】:2023-03-17 22:26:02
【问题描述】:

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

在下面的代码中,excel 宏循环遍历原始文本范围,将“标记名”的所有实例替换为单元格 D2 中分配的 loopText,并将更正后的文本放入单元格 B9。然后它检查 looptext 范围是否有其他值并再次遍历原始文本以解决这些问题。一旦 looptext 单元格为空,宏就会停止并打印每个 loopText 实例的更正文本。 与替换 D2 及以后单元格中的“标记名”平行,我希望宏将“工作表名”一词替换为 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

【问题讨论】:

  • 在第二个循环开始之前检查 loopText2.Offset(k).Value 的值
  • 不明白你在做什么,但你确定要在两个循环中使用correctedText2
  • @findwindow 我相信这可能会导致问题,只执行第一个循环。但是,correctedText 是 originalText 的相同修改。我只是想通过分别用单元格范围 loopText1 和 loopText2 替换单词“tagname”和“sheetname”来修改 originalText。
  • 我还是不明白 XD 我需要看看它:/ 我也想看看@Harsh 说了什么。
  • 是的!!! @ScottHoltzman 你明白了!发现!像魔术一样工作。谢谢!

标签: vba excel


【解决方案1】:

感谢@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 循环,不如通过双重替换组合成一个循环。

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2016-01-01
    相关资源
    最近更新 更多