gpt4 book ai didi

vba - Microsoft Access,在 DataSheet 子表单中自动生成列

转载 作者:行者123 更新时间:2023-12-02 05:09:03 25 4
gpt4 key购买 nike

我想在 MS Access 2003 中创建一个表单,让用户从任何现有查询中进行选择,然后让它在表单内显示结果(作为数据 TableView 中的子表单)。然后用户将能够选择一个或多个记录并单击父表单上的按钮以根据选择执行某些操作。我希望它能够处理任何查询,限制很少,并显示查询的完整结果(所有列)。我可能有的唯一要求是它包含用于特定操作的特定字段。例如,如果我有一个“发送电子邮件”操作,查询将需要一个名为“电子邮件”或“收件人”和“主题”的字段。

在运行时更改 DataSheet 子表单的数据源不是问题,我在使用 VBA 之前已经这样做了。让显示的列发生变化是个问题。

在 .NET WinForms 应用程序中,这可以通过 GridView 控件上的“自动生成列”或直接在代码中使用 GridView.Columns 集合来完成。在 VBA 中,我看不到从 DataSheet View 中添加/删除列的方法。我也没有看到根据查询自动生成它们的方法。看起来列是由放置在窗体上的控件(在窗体 View 中)控制的,虽然可以使用 VBA 添加/删除控件,但窗体必须放置在设计 View 中并且需要独占 Access 数据库 - - 听起来很乱,我想避免独占 Access 部分。

我错过了什么吗?有没有简单的方法可以做到这一点?

最佳答案

以下是我的处理方式。在主窗体上创建一个空白子窗体控件。要更改源和列,只需将源对象留空,然后当您使用代码设置它时,列将重置为您使用的任何源。所以这样设置:

Private Sub setSource()
Me.subForm.SourceObject = "Query.myQuery"
End Sub

然后要获取所选项目,假设您知道您想要的列,您将执行如下操作:

Private Sub getSelected()
Dim rs As Recordset
Dim f As Form

Set f = Me.subForm.Form
Set rs = f.RecordsetClone

Debug.Print f.SelTop
rs.MoveLast
rs.MoveFirst

rs.Move f.SelTop - 1
Debug.Print rs!ID
End Sub

如果您不明确知道该列,您可以使用它来遍历所选项目的列并对每个名称运行一些分析,直到您确定它是您想要的列。

Dim i as Integer
For i = 0 To rs.Fields.Count - 1
Debug.Print rs.Fields(i).Name
Next

关于vba - Microsoft Access,在 DataSheet 子表单中自动生成列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com