0

我有以下问题。我想用宏检查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

我将不胜感激找到正确代码的任何帮助。

4

1 回答 1

1

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

您真正需要的是 And 运算符,但要注意的另一件事是特定单词 test 将区分大小写。因此,我通常通过将两者都转换为大写来进行比较。

最后,您可能想告诉用户问题到底出在哪里。

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

这是快速、肮脏且仅经过少量测试的方法,但应该为您指明正确的方向:

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
于 2012-11-23T22:39:59.653 回答