用于检查列的VBA代码仅包含公式

时间:2019-01-28 16:07:06

标签: excel vba

我有一个模板电子表格,用户可以在其中填充数据并发送给我。其中一列是公式,除其他输入错误外,公式还会粘贴值。我已经使用VBA“保存前”代码处理了所有其他错误,但是无法弄清楚该代码让excel检查列中的每个单元格以查看是否为公式,如果有则抛出一个消息框。

我发现这篇文章非常有帮助:https://docs.microsoft.com/en-us/office/vba/api/excel.range.hasformula,并且在一定程度上有效-我不想提示选择范围,因此我尝试使用1个单元格或设置的范围EG,L12:L3000 (用户可以发送不同数量的行的输入,但是3000可能会覆盖所有行。如果我可以将end(xldown)语法合并到其中,那将是更理想的选择!)

如果我选择一个单元格作为范围,则可以抛出该消息框,并且它是一个值,但不能一次显示多个单元格,即使它们中有一个值也是如此。尽管尝试了一段时间,我还是个新手,无法弄清楚Looping!

任何帮助将不胜感激!

使用一个单元格作为范围,使用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列中的任何地方都有一个值,它将遍历并找到它。然后将弹出询问您要保存的确认,或者只是弹出警告公式已粘贴并取消保存。

1 个答案:

答案 0 :(得分: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

enter image description here