在迭代工作表中的单元格时,如何获取单元格上的格式设置?因为基于此,我想构建一个SQL语句,以便将单个ticks添加到retreived值
答案 0 :(得分:2)
听起来你需要VarType()功能。 Vartype(Range("A1"))
好的,所以不想知道单元格的格式设置,但是值是否为数字。
您可以拨打IsNumeric(Range("A1"))
并在False
时引用它吗?
根据您的注释,某些数字作为文本存储在数据库中,您不会通过一个简单的公式来解决这个问题。你不能在构建SQL语句时引用值吗?
答案 1 :(得分:0)
我认为单元格的任何属性都没有指示单元格是否实际包含数值,尽管VarType()
可能有帮助,但它会变得棘手,因为Excel会允许一个数字-formatted单元格包含字符串,文本格式的单元格包含数值,而不覆盖NumberFormat
属性。
在任何情况下,您可能需要一些独立测试来确定单元格是否为IsNumeric(或其他条件)以及其NumberFormat
是否属于您可以定义的枚举列表。
Sub numFormat()
Dim cl As Range
Dim numFormat As String
Dim isNumber As Boolean
For Each cl In Range("A1")
numFormat = cl.NumberFormat
isNumber = IsNumeric(Trim(cl.Value))
Select Case numFormat
Case "General", "0", "0.0", "0.00" ' <--- modify as needed to account for other formats, etc.
If isNumber Then
Debug.Print cl.Address & " formatted as " & numFormat
End If
Case Else
'ignore all other cases
End Select
Next
End Sub
答案 2 :(得分:0)
我不认为细胞的格式是重要的。相反,它是数据库中字段的数据类型。如果你在一个单元格中有字符串'foobar'并且你创建了一个INSERT INTO sql语句,它试图将它放入Long Integer字段,那么无论是什么标记都会失败。
相反,如果一个单元格包含需要进入VARCHAR字段的数值(如100),则需要使用标记(如'100')。
如果您正在使用ADO,请检查Field对象的Type属性以确定数据类型。使用此列表http://support.microsoft.com/kb/193947查看类型。然后根据字段类型设置SQL语句。
答案 3 :(得分:0)
尝试在VBA中使用以下内容:
Range("A1").NumberFormat = "0.00" 'Sets cell formatting to numeric with 2 decimals.
Range("A1").Formula = "=Text(6, " & """0.00""" & ")" 'Looks like a number _
' but is really text.
Debug.Print WorksheetFunction.IsNumber(Range("A1")) 'Prints False
Range("A1").Value = 6 'Puts number into the cell, which also looks like 6.00
Debug.Print WorksheetFunction.IsNumber(Range("A1")) 'Prints True
无论单元格的格式属性如何,这都应该告诉您该值是文本还是真正的数字。
关键是内部Excel IsNumber()函数比VBA函数IsNumeric更适用于此目的。 IsNumber()告诉您单元格的值是否为数字,而IsNumeric仅告诉您单元格是否格式化为数值。