Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中使用多种语言(英语、汉语、日语)_Vba_Excel_Unicode - Fatal编程技术网

在VBA中使用多种语言(英语、汉语、日语)

在VBA中使用多种语言(英语、汉语、日语),vba,excel,unicode,Vba,Excel,Unicode,我需要能够在VBA中使用多种语言(英语、汉语和日语)的字符串。仅当存在一种语言时,更改计算机的区域/语言环境设置才有效。有人能帮忙吗 示例代码 dim x as string dim y as string dim z as string x = "English text" y = "尊敬的" z = "こんにちは" 除了ashleedawg的建议,还有一个简单的替代方案: 使用ByteArray而不是字符串来声明字符串。这样,VBA IDE可以独立于区域设置存储数据 我使用以下函数在VBA

我需要能够在VBA中使用多种语言(英语、汉语和日语)的字符串。仅当存在一种语言时,更改计算机的区域/语言环境设置才有效。有人能帮忙吗

示例代码

dim x as string
dim y as string
dim z as string
x = "English text"
y = "尊敬的"
z = "こんにちは"

除了ashleedawg的建议,还有一个简单的替代方案:

使用ByteArray而不是字符串来声明字符串。这样,VBA IDE可以独立于区域设置存储数据

我使用以下函数在VBA中声明ByteArray(注意:如果传递的不是字节,则会出现错误):

如果您有此功能,可以执行以下操作:

dim x as string
dim y as string
dim z as string
x = "English text" 
'Or: x = ByteArray(&H45,&H0,&H6E,&H0,&H67,&H0,&H6C,&H0,&H69,&H0,&H73,&H0,&H68,&H0,&H20,&H0,&H74,&H0,&H65,&H0,&H78,&H0,&H74,&H0)
y = ByteArray(&HA,&H5C,&H6C,&H65,&H84,&H76)
z = ByteArray(&H53,&H30,&H93,&H30,&H6B,&H30,&H61,&H30,&H6F,&H30)
要获取这些ByteArray,我使用以下工作表函数:

Public Function UnicodeToByteArray(str As String) As String
    If Len(str) = 0 Then Exit Function
    Dim bytes() As Byte
    bytes = str
    Dim l As Long
    For l = 0 To UBound(bytes) - 1
        UnicodeToByteArray = UnicodeToByteArray & "&H" & Hex(bytes(l)) & ","
    Next
    UnicodeToByteArray = UnicodeToByteArray & "&H" & Hex(bytes(UBound(bytes)))
End Function
您可以在工作表中使用此选项(例如,
=UnicodeToByteArray(A1)
,其中A1包含字符串),然后将结果复制粘贴到VBA

您可以直接将字符串指定给ByteArray和reversed


请注意,整个VBA对unicode的支持各不相同。例如,
MsgBox z
将产生问号,而
单元格(1,1).Value=z
将A1设置为所需字符串。

除了ashleedawg的建议,还有一个简单的替代方案:

使用ByteArray而不是字符串来声明字符串。这样,VBA IDE可以独立于区域设置存储数据

我使用以下函数在VBA中声明ByteArray(注意:如果传递的不是字节,则会出现错误):

如果您有此功能,可以执行以下操作:

dim x as string
dim y as string
dim z as string
x = "English text" 
'Or: x = ByteArray(&H45,&H0,&H6E,&H0,&H67,&H0,&H6C,&H0,&H69,&H0,&H73,&H0,&H68,&H0,&H20,&H0,&H74,&H0,&H65,&H0,&H78,&H0,&H74,&H0)
y = ByteArray(&HA,&H5C,&H6C,&H65,&H84,&H76)
z = ByteArray(&H53,&H30,&H93,&H30,&H6B,&H30,&H61,&H30,&H6F,&H30)
要获取这些ByteArray,我使用以下工作表函数:

Public Function UnicodeToByteArray(str As String) As String
    If Len(str) = 0 Then Exit Function
    Dim bytes() As Byte
    bytes = str
    Dim l As Long
    For l = 0 To UBound(bytes) - 1
        UnicodeToByteArray = UnicodeToByteArray & "&H" & Hex(bytes(l)) & ","
    Next
    UnicodeToByteArray = UnicodeToByteArray & "&H" & Hex(bytes(UBound(bytes)))
End Function
您可以在工作表中使用此选项(例如,
=UnicodeToByteArray(A1)
,其中A1包含字符串),然后将结果复制粘贴到VBA

您可以直接将字符串指定给ByteArray和reversed


请注意,整个VBA对unicode的支持各不相同。例如,
MsgBox z
将产生问号,而
单元格(1,1)。Value=z
将A1设置为所需字符串。

这可能会引起兴趣:“vbagettext是Visual Basic for Applications模块和类的集合,这些模块和类实现了VBA项目的基本I18N和L10N功能。您可以将这些组件导入到自己的VBA项目中。“Excel可以使用这些字符中的任何一个;只是您无法在VBA编辑器中硬编码像示例一样的值或任何Unicode字符(即ASCII 255以上)。您可以将值存储在工作表中(必要时隐藏)然后将它们从VBA加载到字符串中,或者使用
CHRW
等“长路”生成字符串。这可能会引起兴趣:“vbagettext是Visual Basic for Applications模块和类的集合,这些模块和类为VBA项目实现基本的I18N和L10N功能。您可以将这些组件导入到自己的VBA项目中。“Excel可以使用这些字符中的任何一个;只是您无法在VBA编辑器中硬编码像示例一样的值或任何Unicode字符(即ASCII 255以上)。您可以将值存储在工作表中(必要时隐藏)然后从VBA将它们加载到字符串中,或者使用
CHRW
etc生成“长路径”字符串“.这个很好用!!非常感谢。非常感谢!!完美的非常感谢你的分享。我是VBA的新手。您的函数可以帮助我将JPese翻译成bytearray。我使用它来查找和剪切字符串中的JPese。你能帮我剪完后怎么翻译回来吗?这个很好用!!非常感谢。非常感谢!!完美的非常感谢你的分享。我是VBA的新手。您的函数可以帮助我将JPese翻译成bytearray。我使用它来查找和剪切字符串中的JPese。剪完后你能帮我翻译一下吗?