如何处理excel VBA中的小数

时间:2016-01-12 12:36:11

标签: excel-vba ms-access-2007 excel-2007 vba excel

我有一个关于网站数据的Excel工作表,并尝试将其传输到Access数据库中的Site_Table(Office 2007)。除了作为站点地理坐标的两列之外,我可以传输所有内容。

第一个示例在循环工作表行的情况下正常工作;

For i = 2 To numSheetRows
strSearchMatch = ws.Cells(i, n).Value

If Len(strSearchMatch) <> 0 Then

intSearchMatch = CLng(strSearchMatch)

  With adoRecSet
  .Open "Select UPRN, Site_Name, Site_Address, Site_Category, Site_VMB,   
  Site_Retain_WAN " & _
  "FROM Site_Table WHERE Site_Id = " & intSearchMatch & ";", _
     connDB, adOpenKeyset, adLockOptimistic
   .Fields("UPRN").Value = ws.Cells(i, 1).Value
   .Fields("Site_Name").Value = ws.Cells(i, 16).Value
   .Fields("Site_Address").Value = ws.Cells(i, 17).Value
   .Fields("Site_Category").Value = ws.Cells(i, 15).Value
   .Fields("Site_VMB").Value = ws.Cells(i, 2).Value
   .Fields("Site_Retain_WAN").Value = ws.Cells(i, 11).Value
   .Update
   .Close
  End With
 End If
Next i

但我需要包含X和Y坐标的列。令我困惑的是,相关列的格式设置为&#34; General&#34;,但下图中突出显示的单元格在公式栏中的值为245946.693280609。

enter image description here

我尝试将值转换为小数,其中包含&#34; CDec&#34;并使用变体。在数据库中,我将字段设置为十进制到4位小数,但是当我尝试输入xcoord值时,如下例所示,我收到错误&#34;十进制值的缩放导致数据截断&#34;。我可以将数据库字段更改为文本并且它可以工作,但基本上我如何以电子表格中显示的方式将工作表中的值提供给数据库?

For i = 2 To numSheetRows
strSearchMatch = ws.Cells(i, n).Value

If Len(strSearchMatch) <> 0 Then

intSearchMatch = CLng(strSearchMatch)

  With adoRecSet
  .Open "Select UPRN, Site_Name, Site_Address, Site_Category, Site_VMB,   
  Site_Retain_WAN, Site_X_Coord " & _
  "FROM Site_Table WHERE Site_Id = " & intSearchMatch & ";", _
     connDB, adOpenKeyset, adLockOptimistic
   .Fields("UPRN").Value = ws.Cells(i, 1).Value
   .Fields("Site_Name").Value = ws.Cells(i, 16).Value
   .Fields("Site_Address").Value = ws.Cells(i, 17).Value
   .Fields("Site_Category").Value = ws.Cells(i, 15).Value
   .Fields("Site_VMB").Value = ws.Cells(i, 2).Value
   .Fields("Site_Retain_WAN").Value = ws.Cells(i, 11).Value
   .Fields("Site_X_Coord").Value = ws.Cells(i, 23).Value
   .Update
   .Close
  End With
 End If
Next i

1 个答案:

答案 0 :(得分:0)

AJF,

如果你使用ws.Cells(i,23)。文字而不是Cell(i.23).Value。

例如: A1 = 100/33(3,0303030303030303030303 ......)

范围(&#34; A1&#34;)。NumberFormat =&#34; 0.0000&#34; MsgBox&#34;价值是&#34; &安培;单元格(2,4)。文本

Msgbox with formatted value