使用访问表中的条件将值从excel导入到访问

时间:2017-12-21 11:58:31

标签: vba ms-access

首先,提前感谢您的时间和帮助。这是我的情况;

我尝试将现有Excel工作簿中的某些值添加到访问数据库中的现有表中。以下是我根据自己的需要找到并稍微使用它的代码,但是当我点击按钮时,它什么也没做。没有错误消息,没有导入的值,什么都不做。

Private Sub Command39_Click()

On Error GoTo Err_Handler

Dim wbFDU As Workbook
Dim objExcelApp As Excel.Application
Dim db As Database
Dim rstWL As Recordset
Dim columnI As String
Dim columnS As String
Dim searchInC As String
Dim C As String
Dim I As String
Dim M As String
Dim S As String
Dim W As String

Dim iCounter As Integer

Set db = CurrentDb
Set rstWL = db.OpenRecordset("Select * FROM WL WHERE WLDate = Date()-1")

Set objExcelApp = New Excel.Application
objExcelApp.Workbooks.Open ("\\CDB\Shared\MNG\CIO Mng.xlsm")
Set wbFDU = objExcelApp.Workbooks(1)

If rstWL.EOF = False Then

    rstWL.MoveFirst
    Do While rstWL.EOF = False

        iCounter = 1
        C = "C" & iCounter
        I = "I" & iCounter
        M = "M" & iCounter
        S = "S" & iCounter
        W = "W" & iCounter

        Do Until wbFDU.Worksheets("Rep").Range(C).Value = ""

            searchInC = wbFDU.Worksheets("Rep").Range(C).Value

            If rstWL!CustName = searchInC Then

               columnI = wbFDU.Worksheets("Rep").Range(I).Value + wbFDU.Worksheets("Rep").Range(M).Value
               columnS = wbFDU.Worksheets("Rep").Range(S).Value + wbFDU.Worksheets("Rep").Range(W).Value

                rstWL.Edit
                rstWL.Fields("LCDCO") = columnI
                rstWL.Update
                rstWL.Fields("ECDCO") = columnS
                rstWL.Update

            End If

            iCounter = iCounter + 1
            C = "C" & iCounter
            I = "I" & iCounter
            M = "M" & iCounter
            S = "S" & iCounter
            W = "W" & iCounter
        Loop

        rstWL.MoveNext
    Loop

End If

wbFDU.Close False
Set wbFDU = Nothing

rstWL.Close
Set rstWL = Nothing
db.Close
Set db = Nothing
Exit Sub

Err_Handler:

MsgBox "The following error has occured." & vbCrLf & vbCrLf & _
    "Error Number " & Err.Number & vbCrLf & _
    "Error Description" & Err.Description & vbCrLf & _
    "Your application will close!", _
    vbCritical, "An Error has Occured"

End Sub

因为几天都无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:0)

考虑直接在MS Access中查询Excel工作簿而无需记录集循环。具体来说,每次使用临时表重新创建或清除,以便在UPDATE查询中使用 WL

但是,您的工作簿似乎不使用任何列标题,因此请在查询结果集中指定HDR=No,这将导致F1,F2,F3,....否则,请使用HDR=Yes并引用命名列。

制作表查询(首次使用删除/附加查询后续Excel更新)

SELECT *
INTO myExcelTempTable
FROM [Excel 12.0 Xml;HDR=No;Database=\\CDB\Shared\MNG\CIO Mng.xlsm].[Rep$] AS t;

更新查询

UPDATE WL 
INNER JOIN myExcelTempTable AS t
ON WL.CustomerId = t.F3           --F3  being Column C (customer id)

SET LCDCO = F9,                   --F9  being Column I
    ECDCO = F19                   --F19 being Column S

WHERE WL.WLDate = Date()-1;

不要在MS Access中使用上述查询中的注释。仅包含在此处为您提供指导。