通过VB将访问数据库导出到Excel - 使用前10行数据库

时间:2015-03-31 19:18:49

标签: vb.net excel excel-vba ms-access vba

我不熟悉使用VB和Excel,我需要帮助。

我有两个访问数据库;一个有10列,有很多行(超过10个),另一个数据库有8列,行数与另一个相同。

我要做的是将两个数据库的前10行导出到Excel工作表(在单独的工作表或两个单独的Excel文件中,无论哪种方式),以便通过电子邮件发送或打印。

我一直在四处寻找有关如何做到这一点的想法,并尝试了一些方法,但没有一个方法有效。

此外,如果有人可以通过VB导出一个数据库与数据库的前10行,我会没事的。

有人可以帮助我。

谢谢, 安迪

1 个答案:

答案 0 :(得分:0)

假设这类似于Excel中的“导入数据”按钮,您可能希望使用ADODB连接到访问数据库,将数据选择到记录集中,然后将记录集读入数组并分配给要导入的工作表to(可选地在现有数据的末尾 - 这取决于你是否正在导入“10多行”或刷新前10行(无论这意味着什么 - 猜测你有一个查询来在Access中获取这些行)。

方法看起来像这样。哦,在我们开始之前,您需要向Microsoft ActiveX Data Objects 6.1添加引用(工具 - >参考)。

Public Sub Test()
    Dim strSQL_Query As String
    Dim oCN As ADODB.Connection
    Dim oCMD As ADODB.Command
    Dim oRecords As ADODB.Recordset
    Dim strCN As String
    Dim strDBPath As String
    Dim varValues As Variant
    Dim wksTarget As Excel.Worksheet
    Dim lngRows As Long
    Dim lngCols As Long


    '' Replace with the path to your DB. You could also use a dialog box to let the user choose a DB, if
    '' it moves around or isn't found.
    strDBPath = "C:\myFolder\myAccessFile.accdb"
    strCN = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDBPath & ";" & _
            "Persist Security Info=False;"

    '' Replace this with a query that does what you need it to
    strSQL_Query = "SELECT TOP 10 FROM [MyTable] WHERE <Conditions> ORDER BY [Column] DESC"

    Set oCN = New ADODB.Connection
    oCN.ConnectionString = strCN
    oCN.Open

    Set oCMD = New ADODB.Command
    oCMD.ActiveConnection = oCN
    oCMD.CommandText = strSQL_Query
    Set oRecords = oCMD.Execute

    If oRecords.BOF And Not oRecords.EOF Then
        varValues = oRecords.GetRows
        Set wksTarget = ThisWorkbook.Worksheets(1)

        '' You might need 0 and 1 instead of 1 and 2 - I forget
        lngCols = UBound(varValues, 1)
        lngRows = UBound(varValues, 2)
        wksTarget.Range("A1", wksTarget.Range("A1").Offset(lngRows, lngCols)) = varValues
    End If

    '' Clean up...
    Set oRecords = Nothing
    Set oCMD = Nothing
    oCN.Close
    Set oCN = Nothing

    '' Do Some more stuff...

    '' And finish by saving the workbook
    '' 1) Check if the directory exists and create it
    Dim strDir as String
    strDir = "C:\Some\Path\Here"
    If Dir(strDir, vbDirectory) = "" Then MkDir(strDir)
    ThisWorkbook.SaveAs strDir & "YourWorkbookName.xlsm", 52 '' 52 is a constant indicating a macro enabled format
End Sub