Vba 根据给定的数据类型验证输入的单元格值
我使用Excel宏创建新的工作簿,其中包含给定csv文件的数据。其中一列可供用户输入某些属性值。这些值必须适合另一个处理系统接受的数据类型和特定格式,以下是一些示例:Vba 根据给定的数据类型验证输入的单元格值,vba,excel,excel-2007,Vba,Excel,Excel 2007,我使用Excel宏创建新的工作簿,其中包含给定csv文件的数据。其中一列可供用户输入某些属性值。这些值必须适合另一个处理系统接受的数据类型和特定格式,以下是一些示例: 值A:格式为“@”的字符串值 值B:整数值格式为“#” 值C:浮点值格式为“#.##0,0###” 值D:格式为“#.##0,0”的十进制值 现在,我想添加一个验证,以检查键入的输入值是否可以处理或必须更改,例如: 不能在十进制字段中输入字符串值 并非所有数字格式字段都接受负值 如何设置此验证?我对VBA(而不是舒尔)是个
- 值A:格式为“@”的字符串值
- 值B:整数值格式为“#”
- 值C:浮点值格式为“#.##0,0###”
- 值D:格式为“#.##0,0”的十进制值
- 不能在十进制字段中输入字符串值
- 并非所有数字格式字段都接受负值
那么,最好的方法是什么呢?在没有VBA的情况下,您可以在工作簿端进行大量的数据验证。例如,对于值C,您可以将格式(浮点值格式为“#.###0,0####”)设置为该单元格的自定义数字格式,然后应用数据验证以确保只在您想要的范围内输入数字。您可以在工作簿端进行大量数据验证,而无需VBA。例如,对于值C,您可以将格式(浮点值格式为“#.####0,0####”)放入该单元格的自定义数字格式中,然后应用数据验证以确保仅在您想要的范围内输入数字。使用Worksheet.range.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将为您提供一个插值
然后稍后打开模板并将CV导入其中:
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
使用工作表.Range.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将为您提供一个插值
然后稍后打开模板并将CV导入其中:
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
正则表达式?大概但我不认识任何正则表达式…正则表达式?大概但我不知道任何正则表达式对我来说都很好,我不得不添加一个附加的工作簿\u SheetSelectionChange函数,带有某种信号量来存储原始单元格值,如果它无效,则替换它。谢谢此外:必须通过CStr()转换目标值以进行比较!对我来说效果很好,我不得不添加一个附加的带有某种信号量的工作簿\u SheetSelectionChange函数来存储原始单元格值,以便在无效时替换它。谢谢此外:必须通过CStr()转换目标值以进行比较!