0

我在 Excel 中有一个时间表系统,其中包含 3 行(标准时间、加班时间、双倍时间)用于我们的每个(100 多名)员工,以及网站上每个成本代码的一列。这最终成为一个巨大的矩阵,其中大部分是空的。我的解决方案基本上是创建一个员工数据类型,用于存储单个成本代码的员工信息和小时数。

   Public Type Employee
     Name As String
     Trade(1 To 3) As String
     EmpNum As Long
     Comment As String
     AddOns(1 To 3) As Single
     Allowance(1 To 3) As Single
     Contract As Long
     CostCode As Long
     STHours As Single
     OTHours As Single
     DTHours As Single
     WorkDate As Date
   End Type

我可以处理电子表格并将 excel 中的信息组织为员工类型对象的数组,但我不熟悉如何将其导出到 Access,并且大多数问题都与从 excel 单元格导出到 Access 相关。我显然可以将这些对象放入另一个工作表的单元格中并这样做,但似乎应该有更好的方法。

目前我最好的猜测是这样的:

使用 VBA 将数据表单 Excel 插入 Access 2010

但随后我会为每次导出对表进行 100 多次更新。

有没有一种有效的方法可以在 VBA 中创建一个表对象,用数组信息填充它,然后在一次更新中将其附加到 Access 中我的表的末尾?

谢谢。

-肖恩

4

2 回答 2

0

感谢大家的帮助......我只是想分享我想出的解决方案。我最终构建了一个将一个对象插入数据库的函数......从互联网复制和修改。代码如下,加油!

Public Function InsertTimeRecord(EmpData As Employee) As Boolean

Dim SaveTime As Date
Dim db As DAO.Database
Dim rs As DAO.Recordset

'//Database Location
Const DB_LOCATION = "C:\access\KMP Tracker.mdb"

'//If errors occur the function will exit with a return value of false (insertion failed)
On Error GoTo ErrHandler:

'//Table has a datecreated/datemodified timestamp for each record
SaveTime = Now

'//Open Database
If db Is Nothing Then
   Set db = DAO.Workspaces(0).OpenDatabase("C:\access\KMP Tracker.mdb") 'Removed DB_LOCATION
End If

'//Open Table
If rs Is Nothing Then
    Set rs = db.OpenRecordset("Timesheet Data", dbOpenDynaset)
End If

'//Create a new record
With rs
    .AddNew
    ![EmpName] = EmpData.Name
    ![Trade1] = EmpData.Trade(1)
    ![Trade2] = EmpData.Trade(2)
    ![Trade3] = EmpData.Trade(3)
    ![EmpNum] = EmpData.EmpNum
    ![Comment] = EmpData.Comment
    ![AddOns1] = EmpData.AddOns(1)
    ![AddOns2] = EmpData.AddOns(2)
    ![AddOns3] = EmpData.AddOns(3)
    ![Allowance1] = EmpData.Allowance(1)
    ![Allowance2] = EmpData.Allowance(2)
    ![Allowance3] = EmpData.Allowance(3)
    ![Contract] = EmpData.Contract
    ![CostCode] = EmpData.CostCode
    ![STHours] = EmpData.STHours
    ![OTHours] = EmpData.OTHours
    ![DTHours] = EmpData.DTHours
    ![WorkDate] = EmpData.WorkDate
    ![DateSubmitted] = SaveTime

    '//Insert Record into Database
    .Update
    InsertMachineHoursRecord = True '//SUCCESSFUL INSERTION
End With

'//Note that we use recordset in this example, but equally effective
'//  is to create an update query command text and simply run the update query:
'//  (INSERT INTO Table (Field1, Field2) VALUES (Value1, Value2);

'//Make sure we have closed the database
My_Exit:
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
Exit Function

ErrHandler:
MsgBox Err.Description
Resume My_Exit
End Function
于 2013-04-07T17:50:05.233 回答
0

最简单的方法是在 Access 中创建表链接。表链接看起来像 Access 其余部分中的表,但数据存储在外部。数据可能在另一个 Access 数据库中,或者在 SQL Server 数据库中,或者你有什么。

特别是,数据可以在 Excel 电子表格中。在 Excel 中定义一个表格,其中包含格式适合您的 Access 应用程序的数据。然后在 Access 中构建一个表链接,链接回您在 Excel 中定义的表。

当您更新 Excel 表格时,更新的结果将在您下次在 Access 中引用表格链接时自动出现。

于 2013-04-05T15:32:33.743 回答