2016-05-17 27 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