根据给定的数据typesvalidationinput的单元格值

我使用Excelmacros创build新的工作簿,其中填充了给定csv文件的数据。 一列向用户input某些属性值。 这些值必须符合数据types和特定的格式,才能被其他处理系统接受,下面是一些示例:

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

现在我想添加一个validation来检查一个input的input值是否正确的处理或必须改变,例如:

  • 一个string值可能不会被input到一个十进制字段中
  • 所有数字格式的字段都不接受负值

我如何设置这个validation? 我对VBA相当陌生,不敢确定最好的方法。 我迄今发现的可能性:

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

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

那么最好的方法是什么?

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

去Workbook_SheetChange。 在那里实现validation并将工作簿保存为模板。

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

确保所有的单元格被格式化为文本,如果你使用这种方法。 否则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 

您可以在工作簿一侧进行数据validation,而不需要VBA。 例如,对于值C,您可以将自定义数字格式的格式( 浮点格式为“#。## 0,0 ###” )格式化,然后应用数据validation以确保只input数字在你想要的范围内。