如何在VBA中获取单元格的格式

时间:2013-03-12 21:19:29

标签: excel excel-vba vba

在迭代工作表中的单元格时,如何获取单元格上的格式设置?因为基于此,我想构建一个SQL语句,以便将单个ticks添加到retreived值

4 个答案:

答案 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仅告诉您单元格是否格式化为数值。