根据给定的数据类型验证输入的单元格值

时间:2013-08-23 13:26:36

标签: excel vba excel-vba excel-2007

我使用Excel宏来创建填充了给定csv文件数据的新工作簿。一列对用户输入某些属性值是开放的。这些值必须符合数据类型和某个格式以供其他处理系统接受,以下是一些示例:

  • 值A:字符串值格式为“@”
  • 值B:整数值格式化为“#”
  • 值C:格式为“#。## 0,0 ###”
  • 的浮点值
  • 值D:格式为“#。## 0,0#”
  • 的十进制值

现在我想添加一个验证,以检查输入的输入值是否可以处理或必须更改,例如:

  • 不能在十进制字段中输入字符串值
  • 所有数字格式字段均不接受负值

如何设置此验证?我对VBA很陌生,不知道最好的方式。到目前为止我找到的可能性:

  1. 通过Worksheet.Range.Validation添加验证,但我没有任何线索如何设置Formula1来检查正确的值。

  2. 通过Worksheet_Change,这里的问题是我创建了新的工作簿,显然不包含我在程序代码中编写的Worksheet_Change,因为它是一个新的工作簿。

  3. 那么最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

在没有VBA的情况下,您可以在工作簿端进行相当多的数据验证。例如,对于值C,您可以以该单元格的自定义数字格式输入格式( Float值格式化为“#。## 0,0 ###”),然后应用数据验证确保只在您想要的范围内输入数字。

答案 1 :(得分:0)

使用 Worksheet.Range.Validation 并不是很节省,因为如果用户从剪贴板粘贴数据,则不会触发它。

转到Workbook_SheetChange。在那里实现验证并将工作簿保存为模板。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Debug.Assert (Format(Target.Value, "#.##0,0#") = Target.Value)
End Sub

如果您使用此approch,请确保将所有单元格格式化为文本。否则Target.Value会给你一个插值。

然后打开模板并将cvs导入其中:

wb = Application.Workbooks.Add("path-to-template.xslm")
Application.EnableEvents = false ' You don't want to trigger change events during import
myimport(wb)
Application.EnableEvents = true