VBA函数无法在excel 2007中返回阿拉伯字符串?

时间:2012-02-07 13:50:15

标签: vba excel-vba excel

我有一个返回阿拉伯字符串的VBA函数(用于将数字转换为阿拉伯语写入字符串)

我在windows xp上的excel 2007上使用它

但是当我改为Windows 7时,函数开始返回这样的东西:

ÝÞØÎãÓÉÂÇÝæãããÇããÇÆÉæÃÑÈÚÉææÃÑÈÚæäæ59áÇÛíÑ

我可以在vba编辑器中编写阿拉伯文,但无法在excel单元格中查看。

3 个答案:

答案 0 :(得分:7)

Excel以Unicode格式存储字符串。您正在使用的字符串似乎使用ANSI阿拉伯语(Windows)代码集。在以前的Windows XP安装程序中,您可能已启用此语言设置,但尚未在Windows 7中进行设置。 如果我将字符串保存到文本文件,并使用数据(导入文本)向导将其导入Excel,将输入代码页指定为ANSI阿拉伯语,则返回: فقطخمسةآلافوثمانمائةوأربعةووأربعونو59لاغير (谷歌翻译等同于:“只有五千八百四十四和五十九改变我的”)。 您可能希望将旧文本从特定代码页(疑似ANSI阿拉伯语)转换为更灵活的UTF-8,以完全避免需要设置单个代码页。

目前还不清楚你从哪里获取阿拉伯字符串。也许是您的旧VBA代码中的数据库或硬编码。理想情况下,它来自数据库,您可以在那里进行一次转换(将这些字符串转换为Unicode)。然后,您的VBA代码可以始终使用Unicode作为本机编码。

或者,如果必须在代码中动态转换ANSI阿拉伯字符串,则可以使用vba函数StrConv()使用参数指定字符串所在的编码(from this table)。 这个例程有点不友好,因为你必须先将输入字符串转换为字节数组。以下是如何进行此转换的示例:

Function convertANSIArabic2Unicode(inputStr As String) As String
Dim n As Integer
Dim i As Integer
Dim inBytes() As Byte
Dim sUnicode As String

' Convert input string to byte array
n = Len(inputStr)
ReDim inBytes(n + 1)

For i = 1 To n
    inBytes(i) = AscB(Mid(inputStr, i, 1))
Next

' Convert byte array to unicode using Arabic coding
sUnicode = StrConv(inBytes, vbUnicode, &H401)

' remove starting null
iPos = InStr(sUnicode, Chr(0))
If iPos > 0 Then sUnicode = Mid(sUnicode, iPos + 1)

convertANSIArabic2Unicode = sUnicode

End Function

这样会被称为:

Dim xStr As String
xStr = "ÝÞØ ÎãÓÉ ÂáÇÝ æ ËãÇäãÇÆÉ æ ÃÑÈÚÉ æ æÃÑÈÚæä æ 59 áÇÛíÑ"
ActiveCell = convertANSIArabic2Unicode(xStr)

会导致单元格显示:

فقط خمسة آلاف و ثمانمائة و أربعة و وأربعون و 59 لاغير

答案 1 :(得分:0)

在Window 7 OS下

STEP 1: GOTO CONTROL PANEL AND SELECT REGION AND LANGUAGE
STEP 2: SELECT ADMINISTRATIVE TAB  
        CHOOSE BUTTON SYSTEM LOCAL LANGUAGE
        COMPUTER WILL SHOW YOU A SCREEN TO SELECT ANY ARABIC LANG
STEP 3: SELECT YOUR LOCAL LANGUAGE  CLOSE ALL 
       NOW YOU GOTO VBA EDITOR PAGE YOU WILL BE HAPPY

答案 2 :(得分:0)

VB编辑器中的

: - 1-单击工具2-选择选项3-单击编辑器格式4-将字体更改为(Courier New(Arabic))5-单击确定现在您可以用英语和阿拉伯语书写我希望这样做解决你的问题