Excel VBA-将数字作为文本导入Access表

杰夫·布雷迪

我有以下Excel VBA代码,该代码读取Excel中的一列并将值导入到Access中的表中:

Dim Cn As Object
Dim strSql As String
Dim strConnection As String
Set Cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\myDatabase.accdb"
Cn.Open strConnection

For i = 2 To ActiveSheet.UsedRange.Rows.Count
    Cn.Execute "INSERT INTO myTable VALUES (" & Cells(i, 1).Value & ")"
Next i

Cn.Close
Set Cn = Nothing

问题是,即使该列中的值在技术上是数字(0001234、0123456、0001等),该列也被格式化为Text,而Access表中的字段也被格式化为Text。但是上面的代码仍将它们作为数字导入,从而删除了前导0(s)。有没有一种方法可以强制它们导入为Text值?

谢谢!!


编辑:我尝试将单引号放在列中的值前面(例如:'0001234而不是0001234),但是它们仍作为数字导入。

EDIT2:我也尝试过:

Dim Cn As Object
Dim strSql As String
Dim strConnection As String
Dim CellValue as String
Set Cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\myDatabase.accdb"
Cn.Open strConnection

For i = 2 To ActiveSheet.UsedRange.Rows.Count
    CellValue = Cells(i, 1).Value
    Cn.Execute "INSERT INTO myTable VALUES (" & CellValue & ")"
Next i

Cn.Close
Set Cn = Nothing

但是这些值在导入时仍会导致前导0掉落。

编辑3-解决了!我不得不用双引号引起来Cells(i, 1).Value现在,前0保持不变!

Dim Cn As Object
Dim strSql As String
Dim strConnection As String

Set Cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\CarrierAudit.accdb"
Cn.Open strConnection

For i = 2 To ActiveSheet.UsedRange.Rows.Count
    Cn.Execute "INSERT INTO Pinnacol_NDC VALUES (""" & Cells(i, 1).Value & """)"
Next i

Cn.Close
Set Cn = Nothing
黑鹰

目前,该行中的字符串

Cn.Execute "INSERT INTO myTable VALUES (" & CellValue & ")"

将计算为0001234:

INSERT INTO myTable VALUES (0001234)

因为0001234周围没有引号,所以SQL将其视为数字而不是字符串。将该行代码更改为:

Cn.Execute "INSERT INTO myTable VALUES (""" & CellValue & """)"

VBA字符串转义序列是多余的引号“”,表示在对字符串进行评估时应在字符串中加上双引号,并生成以下内容:

INSERT INTO myTable VALUES ("0001234")

这将导致SQL将其视为文本字符串并正确插入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章