我必须定期对包含数百行发票数据的Excel电子表格进行排序。我有一个宏来按我需要的方式格式化数据。但是,我需要做的一件事是检查数量列是否大于或小于'1',如果找到值<>,则显示带有两个选项的MsgBox。比1。
我想要做的是使用一些vba代码检查从L2列到数据末尾的所有单元格(直到它找到一个空白单元格)。然后,如果它找到一个不为1的值,(或者是一个 - 或者+值)显示一个消息“消息数量已找到。继续”是“”否“。如果选择”是“,则允许宏继续正常格式化电子表格。如果选择“否”,则终止宏以允许修复错误。
我需要“是/否”选项的原因是,有一些情况可以保留不同的数量。因此,当我运行宏时,我可以退出并检查值是否可以保留并再次运行,这次选择“是”并继续。
感谢任何可以提供帮助并提供一些代码的人。
由于 伊恩
答案 0 :(得分:0)
您可以让电子表格完成部分工作。在可用单元格中输入公式
=COUNTIF(L2:L1000,1) <>COUNTA(L2:L1000)
范围足够大以包含所有数据。如果存在值为1的非空单元格,则此公式将返回true。您的代码只能检查此单元格的值。
另一方面,您可能想要循环,例如你想要突出显示有问题的细胞。您可以使用while循环从L2开始逐步执行L列中的单元格,并在遇到空白单元格时停止。对于每个这样的单元格,检查其值是否为&lt;&gt; 1.如果不是1 - 使用msgbox从用户那里获得输入。对于大多数初学VBA程序员来说,这是最后一步会导致最大问题,因为大多数初学者倾向于将msgbox专门用作子。
以下子说明如何将msgbox用作函数(而不是作为子函数):
Sub EarlyStop()
Dim answer As VbMsgBoxResult
answer = MsgBox("Error found, continue?", vbYesNo)
If answer = vbNo Then Exit Sub
MsgBox "Sub continuing normally"
End Sub
请注意第一个msgbox中参数的括号,但不是第二个参数周围的参数 - 这是VBA的一个怪癖。如果使用msgbox作为函数,则需要使用括号,但不能在将其用作子函数时使用。
当你运行这个子时,如果你在第一个msgbox中选择No,那么自从sub结束后没有其他事情发生。如果您选择是,那么您会看到第二个msgbox,以说明执行是如何继续正常的。在你的代码中,你应该在你的sub的顶部有声明,并且两行以&#34开头;回答&#34;如果值是&lt;&gt;则有条件地执行1