Excel VBA DoCmd.TransferSpreadsheet不将数值/日期值传输到Access

时间:2014-01-18 18:26:54

标签: vba ms-access excel-vba excel

我编写了一个将工作表传输到Access数据库的宏,但它不会分别在存储电话号码和日期的列中添加值。

问题1(忽略):在Access中,PhoneNumber字段数据类型是一个数字。当我将DataType更改为短文本时,电话号码成功传输到Access数据库。我认为Excel中的PhoneNumber列将数据存储为字符串而不是数字,因此我添加了一些代码将其转换为数字,但这没有帮助。 编辑:我现在将电话号码存储为短文本数据类型。

问题2:另一个不会传输值的列是“DateProcessed”列,它反映了添加的日期。我已经仔细检查过格式和值都存储为Date。 编辑:我是一个白痴,并没有导入位于R列的Date Processed列。

将电话号码转换为数字的代码

Dim lastRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).Row

Range("C2:C" & lastRow).Select    

On Error Resume Next
For Each xCell In Selection
    xCell.Value = CDec(xCell.Value)
    xCell.NumberFormat = "0"
Next xCell
On Error GoTo 0

将电子表格转移到访问的代码

Dim acc As New Access.Application

acc.OpenCurrentDatabase "C:\Users\Benjamin\Documents\Database1.accdb"    '
acc.DoCmd.TransferSpreadsheet _
        acImport, _
        acSpreadsheetTypeExcel12Xml, _
        "CallLog", _
        Application.ActiveWorkbook.FullName, _
        True, _
        "A1:Q" & lastRow
acc.CloseCurrentDatabase
acc.Quit
Set acc = Nothing

1 个答案:

答案 0 :(得分:0)

使用转换代码,您将每个单元格的值设置为数字,但Excel可能仍将单元格格式化为文本,这可能会导致问题。尝试将xCell.NumberFormat = "0"添加到For循环中。这将确保每个单元格的格式设置为数字。