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

问题描述 投票:0回答:1

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

我正在尝试将现有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

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

vba ms-access
1个回答
0
投票

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

但是,似乎您的工作簿不使用任何列标题,因此请在查询结果集中指定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中的上述查询中使用注释。仅包含在这里指导您。

© www.soinside.com 2019 - 2024. All rights reserved.