【发布时间】:2019-01-28 16:07:06
【问题描述】:
我有一个模板电子表格,用户用数据填充并发送给我。其中一列是一个公式,除了其他输入错误外,它们还会继续粘贴值。我已经使用 VBA“保存前”代码处理了所有其他错误,但无法弄清楚代码让 excel 检查列中的每个单元格以查看它是否是公式,如果有则抛出一个消息框。
我发现这篇文章很有帮助:https://docs.microsoft.com/en-us/office/vba/api/excel.range.hasformula 这在一定程度上起作用 - 我不想提示选择范围,所以我尝试使用 1 个单元格或设置范围,例如,L12:L3000(用户可以发送不同数量的行的输入,但 3000 可能会覆盖所有行。如果我可以将 end(xldown) 语法合并到其中,那会更理想!)
如果我选择一个单元格作为范围,我可以让它抛出消息框,它是一个值,但不是一次用于多个单元格,即使它们之间有一个值。尽管尝试了一段时间,但我还是个新手,无法弄清楚循环!
任何帮助将不胜感激!
使用一个单元格作为范围,使用 Col L 中的多个单元格作为范围。到目前为止,我的代码适用于一个单元格,但不适用于多个单元格......
If DataInput.[L12].HasFormula = False Then
a = MsgBox("CAUTION: Formula in Column L appears to have been written over. Do you want to Save anyway?", vbYesNo)
If a = vbYes Then Cancel = False
End If
预期:如果 L 列中的任何地方都有值,这将循环并找到它。然后它会弹出询问他们要保存的确认,或者只是弹出警告公式已粘贴并取消保存。
【问题讨论】:
-
为什么不使用工作表保护来锁定列,这样他们就无法粘贴公式?
-
哈是的,这比一大堆代码更容易@Tate Garringer。
-
我不想提它.. 但是如果他们用公式覆盖呢?
-
好点子 - 在某些特殊情况下,用户实际上必须在其中写入自己的值,这就是为什么我不只是锁定列并想要“警告:公式被覆盖,你呢?想继续”消息出现。虽然 CLR 提出了很好的观点!毕竟,我们只是锁定了列,如果用户有特殊要求,现在可以请求将其解锁。不过感谢大家的帮助!