【发布时间】:2015-09-23 05:07:50
【问题描述】:
我有一些数据结构如下:
sglAccNumber intDaysOld intRouterLocation intDaysInLocation
1638828663 614 Customer Service 05. - 61-90 Days
1955963013 348 Advertising 03. 16-45 Days
1198680816 1678 Accounting 09. 401-730 Days
1892708307 1860 Accounting 010. 730+ Days
1785581943 1005 Asset Management 02. 6-15 Days
1942406908 1853 Finances 09. 401-730 Days
等等...有60,000行数据。
我希望根据 intRouterLocation 名称将数据从 Access 表移动到许多不同的工作簿。我正在努力解决的问题是,在每个单独的工作簿中,还要将数据移动到名为 intDaysInLocation 的工作表中。
例如,使用上述数据,会计工作簿将生成两张工作表,一张用于 09。 401-730 天,一个用于 010。 730+ 天 并且适当的条目将填充每个。
过去几天我一直在为此苦苦挣扎,可以将数据按名称或按值进入工作簿或 intDaysInLocation,但将它们结合起来会更好我。
这是使用 VBA 可以实现的吗?
我用来整理工作表的代码(全部在一张工作表中,不考虑 intRouterLocation):
Sub exportMk2 ()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Dim strPath As String
Dim strSelectOneType As String
Dim strSelectDaysInLocation As String
' (change strPath back to what you need)
strPath = CurrentProject.Path & Chr(92) & "Pets_dataset_export_" & _
Format(Date, "yyyy-mm-dd") & ".xlsx"
strSelectDaysInLocation = "SELECT DISTINCT p.intDaysInLocation" & vbCrLf & _
"FROM Worksheet AS p;"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSelectDaysInLocation, dbOpenSnapshot)
Set rsRouters = db.OpenRecordset(strSelectDaysInLocation, dbOpenSnapshot)
For Each routerLocation In rsRouters
Do While Not rs.EOF
strSelectOneType = "SELECT p.ID, p.intDaysInLocation, p.intRouterLocation" & vbCrLf & _
"FROM Worksheet AS p" & vbCrLf & _
"WHERE p.intDaysInLocation='" & rs!intDaysInLocation.Value & "';"
Debug.Print strSelectOneType
Set qdf = db.QueryDefs("qryExportMe")
qdf.SQL = strSelectOneType
qdf.Close
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
"qryExportMe", strPath, True, "woot " & rs!intDaysInLocation.Value
rs.MoveNext
Loop
Next
rs.Close
End Sub
【问题讨论】:
-
嗯。如果你可以为一个做,你可以为两个做。试试
and和if语句? -
您好,感谢您的回复。但是,有人建议我使用 Do.. While 查找而不是 If 语句来遍历记录集。我将尝试找出另一种迭代方式。谢谢你的帮助,伊恩
-
您混淆了这两个过程。您确实需要一个
do while循环来提取数据,但是您需要一个if语句来确定将您提取的数据放在哪里......到目前为止您有什么代码? -
再次感谢您的回复。我从这里提取的最成功的代码link
-
呃,我试图过去我的代码,但它太长了