如何使用别名引用访问中的表/查询/报告?

时间:2016-06-03 15:42:19

标签: vba ms-access

在我的Access数据库中,我的表格的命名约为" t_customers"或者" t_orders"。我有一个组合框,让我从这些选项中选择。为了更好看,我希望在没有" t _"的组合框中有选项,因此其中一个选项只是" customers"。然后在VBA中,我可以访问组合框的"客户"然后将其作为参数传递给我的函数,该函数将导出相关表的内容" t_customers"到excel文件。

这可能吗?我可以考虑使用select case语句,并为每个组合框值手动分配相关的表值,但必须有更好的方法。在没有编码的情况下使用关系或类似功能在Access中是否存在某种快捷方式?或者有更简单的方法来编码吗?

编辑: 我也试图在名为" cbTable"的组合框中获取当前项目的值。我没有附加到组合框的宏。我有一个按钮,当按下它时会运行一个调用我的VBA功能的宏。在函数中我有这段代码:

Dim cbValue As String
cbValue = cbTable.Value
MsgBox (cbValue)

我收到此错误:

  

运行时错误' 424'

     

需要对象

错误在

cbValue = cbTable.Value

线。这段代码有什么问题,如何获取组合框的当前值? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以将组合框的RowSource设置为

SELECT MSysObjects.Name, Replace(MSysObjects.Name,"t_","") AS Expr1
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0));

然后将Column Count设置为2,将Column Widths设置为0;2(第二个数字只需要是任意正数),Bound Column设置为1。

现在当你去调用你的函数时,组合框的值将是表的真实姓名t-customers,但你在表单上看到的是customers

至于访问该组合框,需要做一些事情。

假设您有一个表单Form1,您的组合框cbTable就在该表单上。 enter image description here

因此,当您的表单运行时,它看起来像这样

enter image description here

现在让我们假设你有一个OnChange甚至是那个组合框

enter image description here

请注意,当您键入cbTable时,它会出现在intellisense(ctrl + space)中。这告诉您在此范围内可以访问您的对象。

现在,如果您在另一个模块中,该变量超出范围,则在尝试编译时会出现此错误。

enter image description here

因为Module1不知道cbTable是什么。但是,只要它完全合格,您就可以引用任何内容。因此,如果我们在您的表单打开的情况下运行此测试,并选择“订单”,则所有这3行都是等效的

Forms("Form1").cbTable
Form_Form1!cbTable
Forms("Form1").Controls("cbTable")

enter image description here

请注意我所有模块的顶部是Option Explicit。这会强制您的代码在运行之前基本上检查语法/范围有效性。工具>选项

enter image description here