重复macros,直到符合条件

我正在做一个macros,为我做一个重复的任务。 为了给你一个清晰的视图,我已经准备好了下面的初始macros(vba)代码以及它想要做的stream程图:

这里是macros观的叙述性描述:

  1. 检查K列中的所有单元格是否包含单词“合并”
  2. 如果macrosfind单词“合并”,它会调用另一个macros(Macro_X)
  3. 在调用macros之后,如果它仍然包含单词“合并” ,将再次检查K列中的所有单元格
  4. 如果macros仍然find单词“合并”,它将再次调用Macro_X。
  5. 条件只会停止,直到列K不包含单词“合并”。
  6. 如果macros没有在列K中find任何“合并”字,现在将调用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 

在这里输入图像说明

K栏的屏幕截图

在这里输入图像说明

我已经有了上面的代码,但它不工作。 不知道为什么。 你能帮忙指出什么是错的或build议一个更好的代码?

您可以添加简单的布尔variables来检查是否find了单词“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 

上面的代码是可以从你的代码中修改的。

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

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

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

 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 

对于macro_x:

 Sub macro_x() 'DO SOMETHING HERE Call checker End Sub 

编辑:

 For i = 1 To Last Step -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