'
'功能示例:ChgStr("abc汉字123数字456",18)="abc 汉字123 数字45"
'功能:当asc字符为奇数时,后补空格,最后取定长,若最后部分是半个汉字,则舍去
'
Function ChgStr(ByVal sData As String, ByVal iMaxLen As Integer) As String
    Dim i  As Integer
    Dim iCount As Integer
    Dim iAscb As Integer
    Dim iLen As Integer
    Dim sTemp As String
    '补空格
    iLen = LenB(StrConv(sData, vbFromUnicode, 2052))'求字节长度
    For i = 1 To iLen
        iAscb = AscB(MidB(StrConv(sData, vbFromUnicode, 2052), i, 1))'求字节asc
        If iAscb < &H80 Then' not a asc char
            iCount = iCount + 1
        Else
            If iCount / 2 <> iCount \ 2 Then'奇数
                ChgStr = ChgStr + ChrB(&H20)'add a space
                iCount = 0
            End If
        End If
        ChgStr = ChgStr + ChrB(iAscb)'连接字符串
    Next
    '取定长
    iCount = 0
    iLen = LenB(StrConv(ChgStr, vbFromUnicode, 2052))
    For i = iLen To 1 Step -1
        iAscb = AscB(MidB(StrConv(sData, vbFromUnicode, 2052), i, 1))
        If iAscb > &H7F Then
            iCount = iCount + 1
        Else
            If iCount / 2 <> iCount \ 2 Then
                ChgStr = MidB(StrConv(sData, vbFromUnicode, 2052), 1, iLen - 1)
                Exit Function
            End If
        End If
    Next
End Function

解决方案 »

  1.   

    不知道对不对
    Function ChgStr(ByVal sData As String, ByVal iMaxLen As Integer) As String
        Dim i  As Integer
        Dim iCount As Integer
        Dim iAscb As Integer
        Dim iLen As Integer
        Dim sTemp As String
        Dim b As Long   '标志 0 字母 1:数字
        iLen = LenB(StrConv(sData, vbFromUnicode, 2052))
        For i = 1 To iLen
            iAscb = AscB(MidB(StrConv(sData, vbFromUnicode, 2052), i, 1))
            If b = 0 Then
                If iAscb < &H80 Then
                    iCount = iCount + 1
                    ChgStr = ChgStr & StrConv(ChrB(iAscb), vbUnicode)
                Else
                    If iCount / 2 <> iCount \ 2 Then
                        ChgStr = ChgStr & StrConv(ChrB(&H20), vbUnicode)
                        iCount = 0
                    End If
                    b = 1
                End If
            Else
                ChgStr = ChgStr & StrConv((MidB(StrConv(sData, vbFromUnicode, 2052), i - 1, 2)), vbUnicode)
                b = 0
            End If
        Next
        ChgStr = StrConv(LeftB(StrConv(ChgStr, vbFromUnicode, 2052), iMaxLen), vbUnicode)
    End Function