在VBA中使用多种语言(英语、汉语、日语)
我需要能够在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
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。剪完后你能帮我翻译一下吗?