如何处理 excel VBA 中的小数

How to handle decimals in excel VBA

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

第一个示例在我循环遍历工作表行的地方运行良好;

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 坐标列。令我困惑的是,相关列的格式为 "General",但下图中突出显示的单元格在公式栏中的值是 245946.693280609。

我尝试使用 "CDec" 将值转换为小数并使用变体。在数据库中,我将该字段设置为小数点后 4 位小数,但是当我尝试输入 xcoord 值时,如下例所示,我收到错误 "Scaling of decimal value resulted in data truncation"。我可以将数据库字段更改为文本并且它可以工作,但基本上我如何按照电子表格中显示的方式将工作表中的值获取到数据库中?

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

阿杰夫,

也许这对你有用,如果你使用 ws.Cells(i, 23).Text 而不是 Cells(i.23).Value.

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

范围("A1").NumberFormat = "0.0000" MsgBox "Value is " & 单元格(2, 4).Text

Msgbox with formatted value