Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access VBA函数在特定情况下添加尾随零_Ms Access - Fatal编程技术网

Ms access VBA函数在特定情况下添加尾随零

Ms access VBA函数在特定情况下添加尾随零,ms-access,Ms Access,我试图创建一个函数,通过一个字符串部分给出一个数字的值。我尝试过的各种版本都没有计划好,我在上面找到了一段代码片段 我试图从中提取值的字符串如下所示: A11、A21A23、A25、A23A21等 在一些特殊情况下,字符串为: A23 D0、A23 D1、A23A21 D0等。 由于某些原因,在包含D的实例中,代码会为D后面的任何数量添加一个零。因此A23 D0返回:23,应该是A23 D1,但是返回230a23d3返回23000,依此类推 我对VBA是相当陌生的,我不知道是什么原因导致字母D加

我试图创建一个函数,通过一个字符串部分给出一个数字的值。我尝试过的各种版本都没有计划好,我在上面找到了一段代码片段

我试图从中提取值的字符串如下所示:
A11、A21A23、A25、A23A21等
在一些特殊情况下,字符串为:
A23 D0、A23 D1、A23A21 D0等。

由于某些原因,在包含D的实例中,代码会为D后面的任何数量添加一个零。因此
A23 D0
返回:
23
,应该是
A23 D1
,但是返回
230
a23d3
返回
23000
,依此类推

我对VBA是相当陌生的,我不知道是什么原因导致字母D加上尾随的零,而其他字母代替了D却没有同样的效果

VBA脚本如下所示:

Public Function GetNumFromStringFloating(strText As String, Optional intPos As Integer = 1) As String
'? GetNumFromStringFloating("12*TLG AUTVTG18871890AAUG")    = 12
'? GetNumFromStringFloating("12*TLG AUTVTG18871890AAUG",3)  = 12
'? GetNumFromStringFloating("12*TLG AUTVTG18871890AAUG",14) = 18871890
'? GetNumFromStringFloating("12*TLG AUTVTG18871890AAUG",-1) = 18871890  (Reverse Search)
Dim X As Integer
If intPos > 0 Then
    For X = intPos To Len(strText)
        If IsNumeric(Mid(strText, X, 1)) Then
            GetNumFromStringFloating = val(Mid(strText, X) & "")
            Exit For
        End If
    Next X
Else
    For X = Len(strText) To Abs(intPos) Step -1
        If IsNumeric(Mid(strText, X, 1)) Then
            GetNumFromStringFloating = val(Mid(strText, X) & "")
        Else
            If GetNumFromStringFloating <> "" Then Exit For
        End If
    Next X
End If
End Function
公共函数GetNumFromStringFloating(strText作为字符串,可选intPos作为整数=1)作为字符串
'? GetNumFromStringFloating(“12*TLG AUTG18871890AAUG”)=12
'? GetNumFromStringFloating(“12*TLG AUTG18871890AAUG”,3)=12
'? GetNumFromStringFloating(“12*TLG AUTG18871890AAUG”,14)=18871890
'? GetNumFromStringFloating(“12*TLG AUTG18871890AAUG”,-1)=18871890(反向搜索)
作为整数的Dim X
如果intPos>0,则
对于X=intPos到Len(strText)
如果是数字(Mid(strText,X,1)),则
GetNumFromStringFloating=val(中间(strText,X)和“”)
退出
如果结束
下一个X
其他的
对于X=Len(strText)至Abs(intPos)步骤-1
如果是数字(Mid(strText,X,1)),则
GetNumFromStringFloating=val(中间(strText,X)和“”)
其他的
如果GetNumFromStringFloating“”,则退出
如果结束
下一个X
如果结束
端函数

类似的东西可能适合:

Function getnum(sText)
''A11, A21A23, A25, A23A21
Dim sNum As String

''Skip the first letter
For i = 2 To Len(sText)
    If IsNumeric(Mid(sText, i, 1)) Then
        sNum = sNum & Mid(sText, i, 1)
    Else
        Exit For
    End If
Next

getnum = sNum
End Function

你的商业规则到底是什么?你想要什么样的输入和输出?对Val()有一定程度的误解