【问题标题】:VBA functions not working, returns errorVBA 函数不工作,返回错误
【发布时间】:2011-10-11 14:07:16
【问题描述】:

几天来我一直在尝试使用 MS Access 和 VBA 函数解决一个问题。

首先我有一个如下表

名称 = 团队

字段大多是基于文本的,除非另有说明 ID(自动编号主键) 非 预产期 地点 TeamID(通过连接 Nom、Prenom 和 Location 字段创建)

在我的表单中,我想提取在 Nom、Prenom 和 Location 字段中输入的部分详细信息。然后将其传回数据库以输入个人的 TeamID 字段。

提取应采用以下形式 TeamID = mid(Location,0,4) & mid(Prenom,0,2) & mid(Nom,0,2à)

但是我意识到我不能将它放入任何字段属性的“控制源”部分。

所以经过大量搜索后,我决定我应该在一个单独的模块中使用一个函数(我经常这样做连接以在我的大量表上创建“合理”索引值,我发现自动编号主键不是很用户友好,或不言自明。

所以我在我的数据库文件中创建了一个带有公共函数的模块(称为 getInfo)

Public Function getID() As String
Dim r As String
Dim i As String
i = "Twenty"

以下是我尝试过的一些选项....

'r = VBA.Strings.UCase$(String:=i) 'turning the value of i to uppercase

getID = r 'returns "TWENTY" as expected

'r = VBA.Strings.Mid$("TWENTY", 0, 2)
getID = r 'error and highlights above line?

'r = StrReverse(i)
getID= r 'again error and highlights above line

getID = VBA.Strings.Mid$(String:="TWENTY", Start:=0, Length:=2)
End Function

然后我打开“执行”窗口并运行该函数。

我似乎只能将值转换为大写或小写,对字符串的任何搜索或操作只会给我一个带有以下错误的消息弓

执行错误“5” 参数或过程调用不正确

(请耐心等待我正在使用法语终端,因此我对这个错误的翻译可能不是很准确)。

但是,当我键入它们时,所有函数都会正确显示,传递的参数也是如此。当我在网上搜索时,信息也是一样的 http://www.techonthenet.com/excel/formulas/index_vba.php

所以我不知道哪里出错了。

我想我没有正确声明变量的值,但我不明白为什么。 这段代码在其他地方(其他终端)也不起作用,所以我确定这一定是我的错误!

但它是什么。

我觉得这是一个非常基本的问题,但是在操作字符串时无法使函数工作。

我是否只需要从 sub 调用此函数,而不是直接调用,这在我的表单页面上是否相同?

如果需要,我可以只使用此代码创建一个小型数据库。

【问题讨论】:

  • 这是什么VBA.Strings 东西。当然,我的 VBA 已经在 Word 和 Excel 中,但您只需输入类似 getID = mid(i,1,2) 的内容。
  • 你笑得对,字符串不是零索引的!我知道这将是愚蠢的。而 VBA.Strings 的东西是我试图调试它为什么不工作,所以使用完全限定的命名空间(以防万一!)

标签: ms-access vba


【解决方案1】:

您不应该需要 VBA.String 命名空间前缀,并且 ArgName:= 语法是可选的,只要您遵循可选参数的相同顺序规则。

Mid$("TWENTY", 0, 2) 失败,因为在 VBA 中字符串从索引 1 开始,所以 Mid$("TWENTY", 1, 2) 将返回 TW

【讨论】:

  • 我怎么错过了,为什么不早点找到!
猜你喜欢
  • 1970-01-01
  • 2014-10-23
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 2014-11-23
  • 2018-06-12
相关资源
最近更新 更多