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

时间:2012-07-05 22:49:35

标签: ms-access

我试图创建一个函数,它可以通过字符串给出数字的值。我尝试过的各种版本的工作效果并不如计划好,我在http://www.utteraccess.com/forum/Find-number-string-Ins-t1746052.html找到了一个代码段。

我试图从中提取值的字符串如下:
A11, A21A23, A25, A23A21, etc.
有一些特殊情况下的字符串是:
A23 D0, A23 D1, A23A21 D0, etc.

由于某些原因,在包含D的实例中,代码会为D后面的任何数量添加零。所以A23 D0返回23,因为它应该A23 D1,但是,返回230A23 D3会返回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

1 个答案:

答案 0 :(得分:1)

这样的事可能适合:

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