【问题标题】:VBA Code for checking a column has formulas only用于检查列的 VBA 代码只有公式
【发布时间】: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 提出了很好的观点!毕竟,我们只是锁定了列,如果用户有特殊要求,现在可以请求将其解锁。不过感谢大家的帮助!

标签: excel vba


【解决方案1】:

这有帮助吗?您可以使用 SpecialCells 作为快捷方式来查找各种特定类型的单元格条目(包括公式)。

Sub x()

Dim r As Range

On Error Resume Next
Set r = Range("L1:L10").SpecialCells(xlCellTypeConstants)
On Error GoTo 0

If Not r Is Nothing Then
    MsgBox "a formula has been overwritten" & vbCr & r.Address
End If

End Sub

【讨论】:

  • 感谢 SJR!这似乎确实有效,尽管我们已经通过暂时锁定列解决了这个问题!哈哈。都一样的欢呼。问候,J
猜你喜欢
  • 2018-12-12
  • 2017-01-02
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
相关资源
最近更新 更多