我和我的团队创建了一个合并器工具,用于合并使用按钮上传的工作表中的数据。但是,我们的潜在客户希望增加一个增强功能。
我不知道在VBA中是否可能,但是他们想要的是一个按钮,该按钮可以检查并突出显示“垃圾数据”(例如:First Name
列是否包含空白,或者是否包含{{1} }或类似的名称),它会提示用户并询问他们是否要删除它。
我们已经有了合并器工具的代码(并且运行正常),但是,此功能令人头痛,因为我不知道是否可能。我真的想问一些建议,因为我真的是VBA和编程新手。
也许,我会启发我应该采取的下一步。
答案 0 :(得分:2)
让我们看看人们如何验证这一点
他会看着ajsajdj
这个名字,并认为“我以前从未见过这个名字,所以它一定是胡扯的数据”。但他可能会失败,因为他从未来过这个名字这一事实并不意味着它不是一个已有的名字(有时父母可以发挥创造力)。
因此,人类实际上所做的就是将ajsajdj
与一个名字列表进行比较(他之所以考虑到这一点,是因为他的生活经历)。
现在程序可以执行相同的操作
您可以编写将ajsajdj
与有效名称列表进行比较的代码。但是,在这里,人类也可能会失败。该列表永远不会完整,因为明天父母会发明一个新名字(您在该列表中没有这个名字)。
结论
除非为有效或无效数据定义规则,否则无法编码此任务。有些程序看起来像可以做魔术,但实际上只有根据您赋予它们的规则,它才能起作用。
答案 1 :(得分:0)
我会自动进行这种类型的自动审核,因此我会这样处理;
您的“审核宏”基本上是具有许多质量检查的迭代器-是“名称” =“”,依此类推。您也可以运行此自动宏。
第一个最易于使用,并且工作方式如下:
同样,您可以通过在合并完全完成时运行审核来解决此问题;在这种情况下,您需要删除或跟踪如果用户选择不保留的行可能会删除的行。
我喜欢这种方法,因为它是非阻塞的。用户可以让您的合并器在没有监督的情况下运行,然后在方便时处理异常。另外,您可以编写/编辑任意数量的测试,而根本无需根本更改合并器。然后,您还可以开始计算例如每次导入的每个问题的数量,并将其放入报告中以进行持续改进...有扩展选项。
在伪代码方面,它是一个充满if-else块的迭代器,带有一个“存在问题”标志,如果标志为1,则该行将被视为问题;
For rowCount = startRow to endRow
' startRow and endRow correspond to lines of data you just imported
'Test 1
if (Some condition e.g. cells(rowCount ,2).value = "") then
issueFlag = 1
End if
'Test n...
if (Some condition e.g. cells(startRow,2).value = "") then
issueFlag = 1
End if
next rowCount
if issueFlag = 1 then
'CODE TO PASTE DATA
'Set some flag/variable which then triggers a Error Message at the end of the whole consolidation or audit
End if
您可以在IF块的末尾放置 Exit For (退出),这样,如果触发了issueFlag,您将立即退出并跳过所有进一步的测试。