1

我有以下 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),但它们仍然作为数字导入。

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
4

2 回答 2

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

于 2013-10-18T19:00:24.600 回答
0

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

于 2013-10-18T18:59:37.113 回答