【问题标题】:VBA Code for cell data language translation用于单元格数据语言翻译的 VBA 代码
【发布时间】:2016-05-12 13:54:50
【问题描述】:

我正在编写一个代码,将所选单元格中的数据从葡萄牙语翻译成英语,但我遇到了一个错误:

翻译后的单元格只返回“和”,无论我写什么,它都应该翻译单元格中的所有单词......有什么想法聪明的头脑吗?

这是我的代码:

Sub traducaobeta()

Dim translate As Object 'scritping.Dictionary

Set translate = CreateObject("Scripting.Dictionary")

translate("cadeira") = "chair"
translate("cadeiras") = "chairs"
translate("criado mudo") = "night stand"
translate("criado-mudo") = "night stand"
translate("mesa") = "table"
translate("mesas") = "tables"
translate(" e ") = " and "
' the list goes on...


Dim ptWords As String
Dim enWords As String

ptWords = LCase(activecell.Value)

For Each tempVar In translate.Keys()

enWords = Replace(Replace(CStr(tempVar), CStr(tempVar), translate(CStr(tempVar)), InStr(CStr(tempVar), CStr(tempVar))), " e ", " and ")

activecell.Offset(0, 1).Value = enWords

Next
End Sub

有人知道怎么解决吗?

【问题讨论】:

  • 更改为Dim ptWords As Variant
  • 好!!!它有效 :D 但现在它正在将所有内容翻译为“和”,我是新手,你能帮我解决它吗?它应该将活动单元格中的所有单词翻译成同一个活动单元格..

标签: vba excel language-translation


【解决方案1】:

我会尝试循环遍历您文本中的单词。 以下过程会翻译您收藏中的每个单词,并将其他单词保留为葡萄牙语:

Sub traducaobeta()

Dim translate As Object 'scritping.Dictionary

Set translate = CreateObject("Scripting.Dictionary")

translate("cadeira") = "chair"
translate("cadeiras") = "chairs"
translate("criado mudo") = "night stand"
translate("criado-mudo") = "night stand"
translate("mesa") = "table"
translate("mesas") = "tables"
translate(" e ") = " and "
' the list goes on...


Dim Words As Variant
Dim I As Integer
Words = Split(LCase(ActiveCell.Value))


For I = LBound(Words) To UBound(Words)
    If translate(Words(I)) <> "" Then Words(I) = translate(Words(I))
Next
ActiveCell.Offset(0, 1).Value = Join(Words)

End Sub

【讨论】:

  • 我爱你,你知道吗??
  • 现在只是这个圣代上面的樱桃,只需要翻译单元格的第一个单词是正确的(对不起我的愚蠢),你知道我该怎么做吗?跨度>
  • 我这样做了,但是它使所有单词都变成大写,我只需要第一个单词变成大写,看: For I = LBound(Words) To UBound(Words) If translate(Words(I )) "" 然后 Words(I) = translate(Words(I)) Next activecell.Value = Join(Words) For Each x In activecell x.Value = Application.Proper(x.Value) Next activecell.Offset( 0, 1).选择结束子
  • 只需添加Words(LBound(Words)) = Application.WorksheetFunction.Proper(Words(LBound(Words))),然后再用ActiveCell.Offset(0, 1).Value = Join(Words)加入单词
【解决方案2】:

错误告诉您必须在For Each 循环中使用Variant 类型变量。您使用的是ptWords,它是String,但从translate.Keys() 返回的值不是明确的字符串类型,会导致错误。

将变量声明为变体

Dim ptWords As Variant

或者在循环中使用通用变体:

For Each tempVar In translate.Keys()

enWords = Replace(Replace(CStr(tempVar), CStr(tempVar), translate(CStr(tempVar)), InStr(CStr(tempVar), CStr(tempVar))), " e ", " and ")

activecell.Offset(0, 1).Value = enWords

Next

应该做的伎俩。

请注意,我已使用 CStr()tempVar 显式转换为代码中的字符串 - 虽然这可能不是总是必要的(由于隐式类型转换),但这是一个好习惯进入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2015-12-31
    • 2020-12-26
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多