在我的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
线。这段代码有什么问题,如何获取组合框的当前值? 提前谢谢。
答案 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
就在该表单上。
因此,当您的表单运行时,它看起来像这样
现在让我们假设你有一个OnChange甚至是那个组合框
请注意,当您键入cbTable
时,它会出现在intellisense(ctrl + space)中。这告诉您在此范围内可以访问您的对象。
现在,如果您在另一个模块中,该变量超出范围,则在尝试编译时会出现此错误。
因为Module1
不知道cbTable
是什么。但是,只要它完全合格,您就可以引用任何内容。因此,如果我们在您的表单打开的情况下运行此测试,并选择“订单”,则所有这3行都是等效的
Forms("Form1").cbTable
Form_Form1!cbTable
Forms("Form1").Controls("cbTable")
请注意我所有模块的顶部是Option Explicit
。这会强制您的代码在运行之前基本上检查语法/范围有效性。工具>选项