2016-05-17 96 views
2

这段代码应该在单元格中翻译它的字典中的所有单词,但是它只翻译第一行(它只翻译“E”为“和”),它应该遍历所有单词并更改所有单词在细胞中。用于语言翻译的Excel VBA代码破解?

Sub traducaobeta2() 

Dim translate As Object 'scritping.Dictionary 

Set translate = CreateObject("Scripting.Dictionary") 

translate("e") = "and" 
translate("Telefones") = "Telephones" 
translate("Livros") = "Books" 
translate("Criado mudo") = "Night stand" 
translate("Banqueta") = "Stool" 
translate("livros") = "books" 
translate("cadernos") = "papers" 
translate("travesseiros") = "pillows" 
translate("Mesa") = "Table" 
translate("Materiais de escritório") = "Office materials" 
' 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.Value = Join(Words) 
activecell.Value = Ucase$(Left$(activecell.Value, 1)) & Right$(activecell.Value, Len(activecell.Value) - 1) 
end sub 

回答

4

当您使用Split()这样它把每个字入阵,但他们改变成小写。字典中的键区分大小写,因此您需要使用小写键代替。

translate("e") = "and" 
translate("telefones") = "Telephones" 
translate("livros") = "Books" 
translate("criado mudo") = "Night stand" 
translate("banqueta") = "Stool" 
translate("livros") = "books" 
translate("cadernos") = "papers" 
translate("travesseiros") = "pillows" 
translate("mesa") = "Table" 
translate("materiais de escritório") = "Office materials" 
' the list goes on... 
在一个侧面说明

,那最后一个("materiais de escritório")不会有任何效果,因为它有空格让你的阵列将有materiais,在单独的索引deescritório并不会匹配字典键。

+1

这是事实,他们不会工作。我将首先为这些单词创建一个Case选项,然后拆分模块将进入场景 – ADrex

3

除了Macro Man的优秀评论,另一种方法是完全忽略LCase,UCase的问题。不要试图改变或修复病例。而不仅仅是牛肉像翻译对象:

translate("livros") = "books" 
translate("Livros") = "Books" 

如果源文本有适当的资本化,在翻译将工作,如果源文本是所有较低的情况下,翻译应该工作。

+0

更好的主意! +1 –

+0

谢谢加里和宏人!你也知道我该如何测试细胞,所以我知道是否所有的单词都被翻译过了? – ADrex

+0

删除案件这是否是正确的方法? Words = Split(activecell.Value) activecell.Value =(Left $(activecell.Value,1))&Right $(activecell.Value,Len(activecell.Value) - 1) – ADrex