2012-11-23 42 views
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 

我会感谢所有帮助找到正确的代码。

回答

0

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

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

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

此外,我建议您将变量声明为类型以避免变量转换为整数转换成本。我总是在VBA(而不是VB.Net)中使用Long而不是整数,因为无论如何Ints都会内部转换为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 
+0

我特意设置这么短的数据范围,因为我想测试下的子只为两行,当我找到正确的代码,我将使用它来获得完整的数据范围(x = 12到69)。不幸的是,你的建议代码不起作用:(当我输入一个短日期(即2.2.2002)或单词到所需的单元格时,我仍然收到错误消息。 –

+0

我向你保证代码是可以工作的。检查2.2.2002实际上是一个关于您的区域设置的日期,并不是简单地将您识别为日期的文本,但Excel不会。也可能是一个想法,确切地说明什么是神奇的单词是因为你需要明显改变代码中的字符串表达“某些单词”到你正在使用的单词 –

+0

“某个单词”是“延迟”:) 2.2.2002肯定是一个日期,因为我为所需范围内的单元格设置日期类型。 –