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

时间:2013-10-18 18:16:18

标签: excel vba

我有以下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,1000等),列的格式为Text,Access表中的字段格式为Text。但是上面的代码仍然将它们作为数字导入,这会丢弃前导0(s)。有没有办法强制它们作为文本值导入?

谢谢!


编辑:我尝试在列中的值前面添加一个引号(例如:'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。

EDIT3 - 已解决!! 我必须在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

2 个答案:

答案 0 :(得分:1)

目前,行中的字符串

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将其视为文本字符串并正确插入。

答案 1 :(得分:0)

尝试使用CellValue = Cells(i, 1).Text访问单元格的文本值