Excel 重复宏,直到满足条件
我正在做一个宏,为我做一个重复的任务。为了给您一个清晰的视图,我准备了下面的初始宏(vba)代码,以及它应该做什么的流程图: 下面是宏的叙述性描述:Excel 重复宏,直到满足条件,excel,vba,macros,Excel,Vba,Macros,我正在做一个宏,为我做一个重复的任务。为了给您一个清晰的视图,我准备了下面的初始宏(vba)代码,以及它应该做什么的流程图: 下面是宏的叙述性描述: 检查K列中的所有单元格是否包含单词“MERGED” 如果宏发现单词“Merged”,它将调用另一个宏(macro_X) 调用宏后,它将再次检查K列中的所有单元格是否仍然包含单词“MERGED” 如果宏仍然找到单词“Merged”,它将再次调用宏X 该条件将仅在列K不包含单词“Merged”之前停止 如果宏在K列中没有找到任何“合并”单词,它现在将调
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
我已经有了上面的代码,但它不工作。不知道为什么。您能帮我指出错误或建议一个更好的代码吗?您可以添加简单的布尔变量来检查是否找到“合并”一词
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
您可以添加简单的布尔变量来检查是否找到单词“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
您可以在宏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
对于宏_x:
Sub macro_x()
'DO SOMETHING HERE
Call checker
End Sub
编辑:
您可以在宏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
对于宏_x:
Sub macro_x()
'DO SOMETHING HERE
Call checker
End Sub
编辑:
我看到的第一件事是在你的单元格中“合并”并不是以大写字母开头,而是在你的代码中
所以请换成这个
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
我看到的第一件事是在你的单元格中“合并”并不是以大写字母开头,而是在你的代码中
所以请换成这个
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
它怎么不起作用?你收到错误代码了吗?或者它输出不正确?什么都没有。什么都没有发生。没有输出。无错误。检查单词Merged是否键入Merged(区分大小写)。由于您没有使用Sheets()函数,请确保您正在检查的工作表已激活。谢谢@MutjayLee,我对工作表以及区分大小写没有任何问题。它是如何工作的?你收到错误代码了吗?或者它输出不正确?什么都没有。什么都没有发生。没有输出。无错误。检查单词Merged是否键入Merged(区分大小写)。由于您没有使用Sheets()函数,请确保您正在检查的工作表已激活。谢谢@MutjayLee,我对工作表以及区分大小写没有问题。谢谢@9i2的回答。不幸的是,它没有起到很好的作用。没有错误,但它调用宏_z时没有执行子_检查,这使得标准或条件不满足。除了我编辑的答案。如果您的单元格包含“合并”以外的字符。。您可以使用“*Merged*”谢谢@9i2的回答。不幸的是,它没有起到很好的作用。没有错误,但它调用宏_z时没有执行子_检查,这使得标准或条件不满足。除了我编辑的答案。如果您的单元格包含“合并”以外的字符。。您可以使用“*Merged*”我已经尝试了您的代码,但它只做了2到3次检查,只留下K列仍然有K列的单词“Merged”。当我再次运行它时,我得到错误“运行时错误13类型不匹配”宏x是否将K列中的值更改为“合并”?意思是在运行宏x之后,是否需要再次检查K列?是的。您可以参考流程图。框名为“调用宏x”的部分,在执行宏x之后,它将再次返回到名为“检查列K…”的框。我编写了另一个代码,它将完全执行流程图所做的操作。看看那个助手是否工作得很好!最后一个问题,如果它不考虑病例敏感性是可能的。我的意思是,单词“merged”可以用不同的方法编写,比如“merged”、“merged”、“merged”等等。我试过你的代码,但它只做了2到3次检查,只留下K列仍然有K列,即单词“merged”。当我再次运行它时,我得到错误“运行时错误13类型不匹配”宏x是否将K列中的值更改为“合并”?意思是在运行宏x之后,是否需要再次检查K列?是的。您可以参考流程图。框名为“调用宏x”的部分,在执行宏x之后,它将再次返回到名为“检查列K…”的框。我编写了另一个代码,它将完全执行流程图所做的操作。看看那个助手是否工作得很好!最后一个问题,如果它不考虑病例敏感性是可能的。我的意思是,“合并”这个词可以用不同的方法写,比如“合并”、“合并”、“合并”等等。。