【问题标题】:Access vba pass variable into code访问 vba 将变量传递到代码中
【发布时间】:2014-07-16 05:27:58
【问题描述】:

我在 Access 07 中试图将变量传递给一行代码。目的是创建一个字段名称数组,然后循环遍历该数组,对每个字段执行相同的操作。我已经简化了它以避免数组或循环的任何潜在问题。 在我熟悉的任何其他语言中,它都非常简单,但我似乎无法在 VB 中对其进行格式化。

Me.FeildName.Locked = True

将是静态代码,我认为可变代码看起来像这样:

Dim Temp as String
Temp="FieldName"
Me.[Temp].Locked = True

但它一直给我一个错误,说“找不到字段'|'在您的表达式中引用”,因此它不是读取变量的值。
如何让它读取命令中的变量?

或者,我尝试将字符串连接成一行代码:

Dim CodeLine As String
Dim TestName As String
TestName = "FieldName"
CodeLine = "Me.[" & TestName & "].Locked = True"

这会创建一个看起来像函数式代码的字符串,但我将如何运行它?

谢谢

【问题讨论】:

标签: vba ms-access-2007


【解决方案1】:

如果Me是一个表格,你需要

Temp = "FieldName"
Me.Controls(Temp).Locked = True

【讨论】:

  • "Controls()"...这就是我所需要的!我知道只有一些我不知道的命名法。我尝试过“Fields()”和其他几个我发现没有成功的方法。谢谢!
【解决方案2】:

Dick Kusleika 的回答是要走的路,但为了完整起见,您也可以这样做:

For i = LBound(strControlNames) To UBound(strControlNames)
    CallByName Forms![MyFormName].Controls(strControlNames(i)), "Locked", VbLet, "True"
Next

strControlNames 将是包含您的控件名称的数组。

【讨论】:

  • 这看起来与我的代码相似,但我想尝试不同之处,看看我是否能学到任何东西。 “VbLet”有什么作用?我在我拥有的书中找不到,甚至在网络搜索中都找不到。谢谢
  • @charles_m80:CallByName 可以运行方法或设置属性值 (msdn.microsoft.com/en-us/library/office/…)。 vbLet 是一个常数,它告诉函数我们希望将所讨论的属性 Locked 设置为 True(与 vbGet 相反,例如,它表示我们想要提取值)。如果您在 VB 或 VBA 中进行过任何类编程,Let/Get 是您设置/获取自定义类属性的方式。
猜你喜欢
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多