【问题标题】:Connect Access to Excel, use Excel userform to update Access record将 Access 连接到 Excel,使用 Excel 用户表单更新 Access 记录
【发布时间】:2020-07-05 22:00:29
【问题描述】:

我知道不建议这样做,但我手头很紧,所以我现在必须使用它(作为补丁,直到我修复数据库)

我处于多用户环境中。数据在 Access 上,他们需要访问它以更新一些信息,以便其他部门可以提取报告并使用新更新的数据。

相当简单,然而,数据库没有维护超过 6 个月,基础设施从一开始就很糟糕,但我现在负担不起重构。

我在 Excel 上创建了一个用户表单,我可以在其中更新、修改工作表上的信息。我希望能够将信息从访问中提取到 Excel 工作表中,并向不同的用户显示用户表单,他们将更新他们必须更新的内容,并且在关闭用户表单后,他们正在处理的访问记录将被更新。

我还没有找到任何解决方案。我似乎在 DAO 中找到了一些东西,但我不确定。

【问题讨论】:

  • 如果您只是将用户表单放入工作表然后重新访问,那么用户表单的意义何在?
  • 方便用户输入信息,也可以控制自己改什么不改。

标签: excel vba ms-access userform


【解决方案1】:

这是一个超级粗略的例子,说明如何使用用户表单编写 sql。确保您有正确的参考资料。

Private Sub CommandButton1_Click()

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim tdf As DAO.TableDef
    Dim vAr$
    Dim arrResults(2) As String

    For Each tdf In db.TableDefs
        If Not (tdf.Name Like "MSys*" Or tdf.Name Like "~*") Then
            tdf.RefreshLink
        End If
    Next

    Set db = DBEngine.OpenDatabase("C:\Users\Ashleysaurus\Desktop" & "\" & "xyzmanu3.accdb")

    vAr = TextBox1.Value

    Set rst = db.OpenRecordset("SELECT PartName, PartNum, Quantity FROM InventoryTbl WHERE PartName='" & vAr & "';")

    i = 0
    rst.MoveFirst
    Do Until rst.EOF
        arrResults(i) = rst.Fields(0)
        arrResults(i) = rst.Fields(1)
        arrResults(i) = rst.Fields(2)
        rst.MoveNext
        i = i + 1
    Loop

    TextBox2.Value = arrResults(0)
    TextBox3.Value = arrResults(1)
    TextBox4.Value = arrResults(2)

    Set tdf = Nothing
    rst.Close
    Set rst = Nothing
    db.Close
    Set db = Nothing

End Sub

Private Sub CommandButton2_Click()

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim vAr$: vAr = TextBox1.Value
    Dim vAr2$: vAr2 = TextBox2.Value
    Dim vAr3$: vAr3 = TextBox3.Value
    Dim vAr4$: vAr4 = TextBox4.Value
    Dim vbSql$

    For Each tdf In db.TableDefs
        If Not (tdf.Name Like "MSys*" Or tdf.Name Like "~*") Then
            tdf.RefreshLink
        End If
    Next

    Set db = DBEngine.OpenDatabase("C:\Users\Ashleysaurus\Desktop" & "\" & "xyzmanu3.accdb")

    vbSql = "UPDATE InventoryTbl SET PartName='" & vAr2 & ", Quantity='" & vAr4 & " WHERE PartNum='" & vAr3 & "';"
    db.Execute vbSql

    Set tdf = Nothing
    db.Close
    Set db = Nothing

End Sub

Button1 检索数据,存储到数组中,然后将内容转储到文本框中。按钮二从文本框中获取内容,然后更新;以此为基础更新表格。

由于这不是脚本编写服务,因此您应该能够从中找到您想要的内容。

【讨论】:

  • @DrD4rk 一定要给一个人竖起大拇指和一个回答的复选标记:)
  • 非常感谢。如果你不介意我问,你怎么知道该怎么做?我知道一点 sql 并且对 excel/access vba 用户表单非常陌生……有没有一本书我可以阅读以在这方面做得更好?再次感谢您
  • @DrD4rk 老实说,大多数书籍都没有详细介绍您想要的内容。他们中的大多数实际上只是表面上,特别是如果您正在寻找更详细的东西。我学到的大部分内容都是通过试验/错误、论坛/SO trolling 和阅读 Visual Studio 中的对象浏览器(通过谷歌了解每个项目的更多信息)。我还没有看到一本教你更新表循环的书(对你所做的事情非常重要)。但其余的都来自“只是做它”的经验。
  • 如果你需要一本书,我会买 John Walkenbach 的 vba 书。 “使用 VBA 进行电源编程。”但在我看来,一旦你“掌握”了对象模型,学习和理解对象模型会教给你更多东西。
  • 感谢您的帮助。我一定会拿起这本书来了解更多。如果你不介意我再挑选你的大脑,但我使用了你给我的代码,我意识到这行不通。快速解释一下,我总共有 400 个项目的 15 个客户,每个客户都有自己的项目,由于“隐私原因”而看不到其他客户。我的客户都分散在全国各地,有的在我的网络上,有的不在,有共享文件夹的不一定有相同的数据库路径...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多