重复宏,直到满足条件

时间:2016-06-28 00:53:39

标签: excel vba macros

我正在研究一个宏来为我做一个重复的任务。为了给你一个清晰的视图,我准备了下面的初始宏(vba)代码以及它想要做的流程图:

这里是宏的叙述性描述:

  1. 检查K列中的所有单元格是否包含单词" MERGED"
  2. 如果宏找到单词" Merged",则会调用另一个宏(Macro_X)
  3. 调用宏后,它会再次检查K列中的所有单元格是否仍然包含" MERGED"
  4. 如果宏仍然找到单词" Merged",它将再次调用Macro_X。
  5. 条件只会停止,直到K列不包含单词" Merged&#34 ;.
  6. 如果宏没有找到任何"合并"在K列中的单词,它现在将调用Macro_Z。

    Last = Cells(Rows.Count, "K").End(xlUp).Row
    For i = Last To 1 Step -1
        If (Cells(i, "K").Value) = "Merged" Then
    
            Call macro_x
    
        End If
    Next I
    
  7. enter image description here

    列K的屏幕截图

    enter image description here

    我已经拥有上面的代码,但它无效。不知道为什么。你能帮忙指出错误或建议更好的代码吗?

3 个答案:

答案 0 :(得分:1)

你可以添加简单的布尔变量来检查单词" MERGED"被发现了。

Dim Word_Found as Boolean

Last = Cells(Rows.Count, "K").End(xlUp).Row
For i = Last To 1 Step -1
    If (Cells(i, "K").Value) = "Merged" Then
        Call macro_x

        Word_Found = True
        i = LAST

    End If
Next I

If Not(Word_Found) Then Call macro_z

以上代码可以从您的代码中修改。

下面的代码是看你的流程图。

While Not (Columns("K").Find("Merged") Is Nothing)
    Call macro_x
Wend
Call macro_z

答案 1 :(得分:1)

您可以在Macro_X的末尾调用初始宏。 对于初始宏:

Sub checker()
Last = Cells(Rows.Count, "K").End(xlUp).Row
For i = 1 To Last Step -1
    If (Cells(i, "K").Value) = "Merged" Then

        Call macro_x

    End If
Next I
Call macro_z
End Sub

for macro_x:

Sub macro_x()
'DO SOMETHING HERE

Call checker
End Sub

编辑:

For i = 1 To Last Step -1

答案 2 :(得分:1)

我看到的第一件事是你的单元格中的“合并”不是以大写字母开头,而是在你的代码中。

所以请改为此。

Last = Cells(Rows.Count, "K").End(xlUp).Row
For i = Last To 1 Step -1
    If (Cells(i, "K").Value) = "merged" Then

        Call macro_x

    End If
Next I