1

我使用 Excel 宏来创建填充给定 csv 文件数据的新工作簿。一列对用户输入某些属性值是开放的。这些值必须适合数据类型和特定格式才能被另一个处理系统接受,这里有一些示例:

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

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

  • 不能在小数字段中输入字符串值
  • 所有数字格式的字段都不接受负值

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

  1. 通过 Worksheet.Range.Validation 添加验证,但我不知道如何设置 Formula1 以检查正确的值。

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

那么最好的方法是什么?

4

2 回答 2

1

无需 VBA,您可以在工作簿方面进行大量数据验证。例如,对于值 C,您可以在该单元格的自定义数字格式中输入格式(浮点值格式为“#.##0,0###”),然后应用数据验证以确保仅输入数字在你想要的范围内。

于 2013-08-23T13:39:35.627 回答
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

如果您使用此方法,请确保所有单元格都设置为文本格式。否则 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
于 2013-08-25T19:20:33.403 回答