使用记录集从Microsoft Access(VBA)导出数据,而不将其附加到以前的文档

时间:2016-09-28 12:10:12

标签: excel vba excel-vba ms-access

我正在学校开展一个小组项目,并且需要能够将Access表中的数据导出到使用特定标题格式化的Excel文档(用于Sage导入)。我在使用“exportItems”函数时遇到了问题。

每次运行我的代码时,它都会在excel中创建重复的行。例如:在导出时,它会导出客户订购的1个项目。如果我再次将其导出到不同的文件名和位置,则该项将被复制,并且excel文档包含2个实例。然后,如果我重复这些步骤,则变为3,然后是4。

任何帮助将不胜感激。我觉得在我的SQL插入语句中某处出现了错误。

Private Sub cmdConfirmExport_Click()


If Not IsNull(txtInputFile.Value) Or txtInputFile.Value = "" Then
    Dim exportID As Integer
    Dim insertOESQL, insertOEDSQL, FileName, DeleteSQL, nameInput, rsSQL As String
    exportID = Form_QuoteDetail.QuotesID
    nameInput = txtInputFile.Value

    exportOrders (exportID)

    ' To insert the order details and be able to get the line number,
    ' create a function similar to exportCommentsOE that will use a recordset to get the values for
    'ORDUNIQ(QuotesID FK), ITEM(Vendor Item Num), DESC(Item Description), QTYORDERED(Quantity), QTYBACKORD(Quantity),
    'UNITPRICE(Unit Price), UNITCOST(Unit Cost)
    ' Then with While (Not .EOF), Insert individual item records using rs.Fields([FieldName]). LINENUM
    ' will be added as a value from a counter that goes up by 32 until it reaches the end of the recordset.

    exportItems (exportID)
    exportCommentsOE (exportID)


    FileName = FolderSelection & "\" & "OE_" & nameInput & "_" & Format(Date, "yyyyMMdd") & ".xlsx"

    'FileName = CurrentProject.Path & "\" & "OE_" & nameInput & "_" & Format(Date, "yyyyMMdd") & ".xlsx"

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Orders", FileName, True
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Order_Details", FileName, True
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Order_Detail_Lot_Numbers", FileName, True
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Order_Detail_Serial_Numbers", FileName, True
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Order_Payment_Schedules", FileName, True
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Order_Comments_Instructions", FileName, True
    MsgBox "Export Complete", vbOKOnly, "Success"

    DeleteSQL = "DELETE * FROM Orders WHERE NOT ORDUNIQ = " & exportID

    CurrentDb.Execute DeleteSQL
    DoCmd.Close

Else
    MsgBox "You must input a file name.", vbOKOnly, "Invalid Input"
End If

End Sub



Function exportItems(itemQuoteID As Integer)
On Error GoTo exportError
Dim rsSQL, rsINSERTSQL As String
Dim rs As DAO.Recordset
Dim rslineCount As Integer
Dim rsORDUNIQ, rsQTYO, rsQTYBO As Integer
Dim rsUP, rsUC As Currency
Dim rsDesc, rsITEM, rsHC As String
Set rs = Nothing
rslineCount = 32
rsSQL = "SELECT [QuotesID FK], [Vendor Item Num], [Item Description], [Quantity], [Unit Price], [Unit Cost], [HASCOMMENT] FROM [Quote Detail]" _
        & "WHERE [QuotesID FK] = " & itemQuoteID

Set rs = CurrentDb.OpenRecordset(rsSQL)

With rs
    .MoveLast
    .MoveFirst

    While (Not .EOF)
    rsORDUNIQ = .Fields("[QuotesID FK]")
    rsITEM = .Fields("[Vendor Item Num]")
    rsDesc = .Fields("[Item Description]")
    rsQTYO = .Fields("[Quantity]")
    rsQTYBO = .Fields("[Quantity]")
    rsUP = .Fields("[Unit Price]")
    rsUC = .Fields("[Unit Cost]")
    rsHC = .Fields("[HASCOMMENT]")

    rsINSERTSQL = "INSERT INTO Order_Details(ORDUNIQ, [LINENUM], [ITEM], [DESC], [QTYORDERED], [QTYBACKORD], [UNITPRICE], [UNITCOST], [COMMINST])" _
                    & "VALUES (" & rsORDUNIQ & "," & rslineCount & ", '" & rsITEM & "', '" & rsDesc & "'," & rsQTYO & "," & rsQTYBO & "," & rsUP & "," & rsUC _
                    & ", '" & rsHC & "')"
    CurrentDb.Execute rsINSERTSQL
    rslineCount = rslineCount + 32
    .MoveNext

    Wend
    .Close
End With
    Set rs = Nothing
ExitFunction:
    Set rs = Nothing
    Exit Function
exportError:
    MsgBox "An error has occured during export of items."
    Resume ExitFunction
End Function

1 个答案:

答案 0 :(得分:0)

弄清楚原因。实际的SQL Insert语句继续在DB中创建条目。这将全部导出到Excel电子表格,使其看起来像是“附加”到上一个文档。

解决方案只是制作表格(Orders将有一个名为Orders_Export的并行表作为示例)并将其用作中间人。 INSERT命令会将数据插入到两个表中,导出只会从Orders_Export表中导出数据。然后清除Orders_Export表,但所有数据都保留在Orders表中。这是我实施的工作。感谢所有帮助!