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

Excel 如何在VBA中获取单元格的格式,excel,vba,Excel,Vba,在工作表中迭代单元格时,如何获取单元格的格式设置?因为基于此,我想构建一个SQL语句来添加单个记号或不添加到检索的值中听起来您需要这个函数变量类型(范围(“A1”)) 好的,因此您不想知道单元格的格式设置,而是想知道值是否为数字。 你能不能直接调用IsNumeric(范围(“A1”),如果False,就引用它 根据您关于某些数字在数据库中存储为文本的评论,您不会用简单的公式来解决这个问题。你不能在构建SQL语句时引用这些值吗?我认为单元格中没有任何属性可以指示单元格是否实际包含数值,尽管Va

在工作表中迭代单元格时,如何获取单元格的格式设置?因为基于此,我想构建一个SQL语句来添加单个记号或不添加到检索的值中

听起来您需要这个函数<代码>变量类型(范围(“A1”))


好的,因此您不想知道单元格的格式设置,而是想知道值是否为数字。 你能不能直接调用
IsNumeric(范围(“A1”)
,如果
False
,就引用它



根据您关于某些数字在数据库中存储为文本的评论,您不会用简单的公式来解决这个问题。你不能在构建SQL语句时引用这些值吗?

我认为单元格中没有任何属性可以指示单元格是否实际包含数值,尽管
VarType()
可能会有所帮助,但这很棘手,因为Excel允许数字格式的单元格包含字符串,和文本格式的单元格,以包含数值,而不重写
NumberFormat
属性

在任何情况下,您都可能需要一些独立的测试来确定一个单元格是否为数字(或其他条件),以及它的
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
子numFormat()
Dim cl As范围
作为字符串的Dim numFormat
作为布尔值的数字
对于范围内的每个cl(“A1”)
numFormat=cl.NumberFormat
isNumber=IsNumeric(修剪(cl.Value))
选择Case numFormat

案例“General”、“0”、“0.0”、“0.00”我认为单元格的格式并不重要。相反,它是数据库中字段的数据类型。如果您在单元格中有字符串“foobar”,并且您创建了一个INSERT-INTO-sql语句,试图将其放入一个长整型字段中,那么不管勾号是什么,它都会失败

相反,如果一个单元格包含一个需要进入VARCHAR字段的数值(如100),它将需要打勾(如“100”)


如果使用ADO,请检查Field对象的Type属性以确定数据类型。使用此列表查看类型。然后根据字段类型设置SQL语句。

尝试在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只告诉您单元格是否为数值格式。

您要检查的格式是什么?在excel中,原生的
Cell()
函数提供格式信息。这帮助我检查cells@rement的文本格式:我正在尝试这样做。如果单元格的格式为数字/十进制,则动态生成的sql语句的值周围将不会有“”,否则会有“”。例如:在遍历行时,如果单元格A1有Cat,我会在逻辑上添加“Cat”,但首先需要查看A1的格式。希望这能让你sense@Remnant:我可以使用=Cell(“format”,A1),但如何将其分配给变量?varType总是返回一个8-string.value=Trim(sht.Cells(dataStartingRow,c.Column).value)x=varType(value)我认为Cell是一个可以通过Application.worksheetfunction调用的工作表函数,但事实并非如此。非常感谢您的帮助