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
来访问单元格的文本值