Excel VBA – 以文本forms将数字导入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等)列被格式化为文本,Access表中的字段被格式化为文本。 但是上面的代码仍然将它们作为数字导入,这会导致前导0(s)。 有没有办法强制他们导入为文本值?

谢谢!!


编辑 :我试着在列(例如:'0001234而不是0001234)的值前面的单引号,但他们仍然被导入为数字。

编辑2 :我也试过这个:

 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 

但价值依然领先于import下滑。

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 

目前,该行中的string

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

将评估为0001234:

 INSERT INTO myTable VALUES (0001234) 

由于0001234周围没有引号,因此它被SQL视为数字而不是string。 将该行代码更改为:

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

多余的引号“”是VBAstring转义序列,用于表示在求值时应将双引号放入string中,从而生成以下内容:

 INSERT INTO myTable VALUES ("0001234") 

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

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