我有以下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] 删除。
我来说两句