我不熟悉使用VB和Excel,我需要帮助。
我有两个访问数据库;一个有10列,有很多行(超过10个),另一个数据库有8列,行数与另一个相同。
我要做的是将两个数据库的前10行导出到Excel工作表(在单独的工作表或两个单独的Excel文件中,无论哪种方式),以便通过电子邮件发送或打印。
我一直在四处寻找有关如何做到这一点的想法,并尝试了一些方法,但没有一个方法有效。
此外,如果有人可以通过VB导出一个数据库与数据库的前10行,我会没事的。
有人可以帮助我。
谢谢, 安迪
答案 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