2013-03-12 34 views
3

在工作表中循环遍历单元格时,如何获取单元格上的格式设置?因为基于此,我想建立一个SQL语句,以添加单个滴答或不添加到价值retreived如何获得VBA中单元格的格式

+0

你想要检查什么格式?在excel中,本地'Cell()'函数提供格式化信息。 – 2013-03-12 21:23:53

回答

3

听起来像你需要VarType()函数。 Vartype(Range("A1"))


OK,所以你想知道该小区的格式设置,但值是否是数字。 你可以打电话IsNumeric(Range("A1"))并引用它,如果False


基于您的评论,有些数字都存储在数据库的文字,你是不会用一个简单的公式来解决这个问题。你不能在构建SQL语句时引用这些值吗?

+0

@Remnant:我想要做的是这个。如果一个单元格的格式为数字/小数,那么动态构建的sql语句将不会在值附近具有“',否则它会。因此,例如:在遍历行的时候,如果单元格A1有Cat,我会逻辑上添加'Cat',但首先需要看看格式化为A1的格式。希望有道理 – 2013-03-12 21:30:01

+0

@Remnant:我可以使用= Cell(“format”,A1),但是如何将它分配给一个变量? – 2013-03-12 21:51:43

+0

varType始终返回8个字符串。 – 2013-03-12 22:02:37

0

我不认为有指示电池是否真的包含数值的单元格的任何财产,虽然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 
0

我不认为单元格的格式是重要的东西。相反,它是数据库中字段的数据类型。如果在单元格中有字符串“foobar”,并且您创建了一个INSERT INTO sql语句,该语句试图将其放入长整型字段中,则无论是否使用标记,它都会失败。相反,如果一个单元格包含需要进入VARCHAR字段的数值(如100),它将需要tickmarks(如'100')。

如果您使用的是ADO,请检查Field对象的Type属性以确定数据类型。使用此列表http://support.microsoft.com/kb/193947来查看类型是什么。然后根据字段类型设置SQL语句。

相关问题