gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:11:31 26 4
gpt4 key购买 nike

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

我在 Windows XP 上的 Excel 2007 上使用它

但是当我更改为 Windows 7 时,该函数开始返回如下内容:

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

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

最佳答案

Excel 以 Unicode 格式存储字符串。您使用的字符串似乎使用 ANSI 阿拉伯语 (Windows) 代码集。在您之前的 Windows XP 设置中,您可能已启用此语言设置,但尚未在 Windows 7 中进行设置。如果我将字符串保存到文本文件,并使用数据(导入文本)向导将其导入 Excel,将输入代码页指定为 ANSI 阿拉伯语,则它将返回:59 月 59 日(谷歌翻译的意思是:“只有五千八百四十四和五十九来改变我的”)。您可能希望将旧文本从特定代码页(疑似 ANSI 阿拉伯语)转换为更灵活的 UTF-8,以完全避免需要设置单独的代码页。

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

或者,如果您必须在代码中动态转换 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 لاغير

关于VBA 函数无法在 Excel 2007 中返回阿拉伯字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9177412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com