无法在MS excel VBA上检测阿拉伯语文本

时间:2015-07-26 06:47:29

标签: excel-vba vba excel

我正在努力从细胞中检测阿拉伯文本。

我正在编写一个程序,用于检测字母数字阿拉伯文字中的阿拉伯数字。

不幸的是,我无法得到它。

如果单元格只包含阿拉伯数字,那么我可以得到它,但如果单元格中的值是字母数字, 然后它被认为是完整的char。

该计划是:

Sub ReverseText()
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
For Each Rng In WorkRng
    xValue = Rng.Value
    xValue = "       " & xValue
    xLen = VBA.Len(xValue)
    xOut = ""
    yOut = ""
        'Trying to reverse the arabic char
        For i = 1 To xLen
        getchar = VBA.Right(xValue, 1)

            'Checking if String contain numbers or not
            If IsNumeric(getchar) Then
            xValue = VBA.Left(xValue, xLen - i)
            yOut = getchar & yOut

            'If not numers then check for decimal point
            Else
                If getchar = "." Then
                xValue = VBA.Left(xValue, xLen - i)
                yOut = getchar & yOut
                'xOut = xOut & yOut
                getchar = ""

                'If not numbers then check for char other than numbers
                Else
                    xValue = VBA.Left(xValue, xLen - i)
                    xOut = xOut & yOut
                    xOut = xOut & getchar
                    yOut = ""
                End If
            End If

        Next

        Rng.Value = xOut
    Next
End Sub

单元格中的值是:

ARABIAN COLA CAN 355ML X 20

运行程序后,输出应为:

20 X LM355 NAC ALOC NAIBARA

这是英文版,工作正常。 现在用阿拉伯语

单元格中的值为:

٦*ﻝﻣ٣٥٥ﻛﺎﻣ ﻲﺳﺑﺑ

以及该程序的输出:

ﺑﺑﺳﻲ ﻣﺎﻛ٥٥٣ﻣﻝ*٦                         

字母正确地反转,但数字也是正确的,但不应该是。

我需要输出类似于英文文本。 但该计划没有检测阿拉伯数字。

我正在使用excel2011 mac。

我也在Windows 7中尝试过,但也存在同样的问题。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

说我对阿拉伯语言一无所知(如果我说一些没有意义的事情,那就很抱歉),函数IsNumeric()仅将数字0-9识别为数字。

我的建议是开发并添加您自己的IsArabNumeric()功能。您可以首先将数字复制并粘贴到工作表的范围内,假设您将它们放在工作表A1:A10的{​​{1}}范围内。然后,函数看起来像这样:

MySheet

所以,而不是做这个检查:

Public Function IsArabNumeric(ByVal char As String) As Boolean
    For j = 1 To 10
        If Sheets("MySheet").Range("A" & j).Value = char Then
            IsArabNumeric = True
            Exit Function
        End If
    Next j
    IsArabNumeric = False
End Function

你会这样做,它应该工作:

'Checking if String contain numbers or not
 If IsNumeric(getchar) Then

请注意:可能有更多的elegants方式,例如查看集合'Checkin if String contain arabic numbers or not If IsArabNumeric(getchar) Then 阿拉伯数字的位置并循环遍历它们,而不是将这些值复制粘贴到单独的表格中(从编码的角度来看并不是很优雅)...但这是一个提示,你可以自己看看Chr collection并重新理解这个想法。