我有以下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
答案 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
访问单元格的文本值