用于检查单元格值类型的宏

时间:2012-11-23 21:58:19

标签: excel-vba vba excel

我有以下问题。如果Excel中单元格范围内的某个单元格包含日期值(短日期,即12.3.2012)或特定单词,我想检查宏。

我将尝试使用以下示例代码解释自己:

Private Sub typedata()
Dim x, y
For x = 12 To 13
 For y = 16 To 71

 If isDate(Cells(x, y)) <> True then
    MsgBox "Please enter correct data"
    Exit Sub
 elseIF Cells(x,y) <> "certain word" Then
    MsgBox "Please enter correct data"
    Exit Sub
 End If

 Next y
Next x
End Sub

我将非常感谢您找到正确的代码。

1 个答案:

答案 0 :(得分:0)

首先,我怀疑(但不确定)你的x和你的y是错误的。 Cells函数使用参数(Row,Column),很少有一个非常短的数据范围(第12到13行),但是很宽的一个(第16到71列)。 (你的代码可能是正确的,我只是注意到这是不寻常的,你可能需要检查。)

你真正想要的是And运算符,但另外需要注意的是,某些单词测试将区分大小写。因此,我通常将两者都转换为大写。

最后,您可能想告诉用户问题究竟在哪里。

此外,我建议将变量声明为类型,以避免变量转换为整数转换成本。我总是在VBA(而不是VB.Net)中使用Longs而不是整数,因为无论如何Int都会在内部转换为long。

这很快,很脏,只是经过了轻微的测试,但应该指向正确的方向:

Private Sub typedata()
Dim x As Long, y As Long
For x = 12 To 13

    For y = 16 To 71

        If IsDate(Cells(x, y)) <> True And UCase(Cells(x, y)) <> UCase("certain word") Then
            MsgBox "Please enter correct data into cell " & Cells(x, y).Address
            Exit Sub
        End If

    Next y
Next x

End Sub