2016-05-17 9 views
2

このコードは、すべての単語をセル内の辞書から翻訳するが、代わりに最初の行のみを翻訳する( "E"を "And"に変換する)ので、すべての単語を通過してすべての単語を変更する必要がある細胞内で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... 

、その最後の1、それは別のインデックスで materiaisdeescritórioを持っていますので、あなたの配列にスペースがあり、辞書のキーと一致することはありませんので、 ("materiais de escritório")が動作することはありません。

+1

それは本当です、彼らはうまく動作しません。私は最初にこれらの言葉のためのケース選択を構築し、分割モジュールはシーンに入るでしょう – ADrex

3

マクロマンの優れたコメントに加えて、LCase、UCaseの問題を完全に無視する方法もあります。ケースを変更したり修正したりしないでください。ソーステキストが適切な総額を持っている場合は動作します翻訳し、

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

とソーステキストはすべて小文字であれば、動作するはず翻訳:代わりに同じよう変換するオブジェクトをアップ牛肉。

+0

さらに良いアイデア! +1 –

+0

ゲイリーとマクロマンありがとう!あなたはまた、どのように私はすべての言葉が翻訳されているか知っているので、私は細胞をテストするか知っていますか? – ADrex

+0

ケースを削除するこれが正しい方法でしょうか? 単語=分割(activecell.Value)________________________________________________ activecell.Value =(左$(アクティブセル。値、1))&右$(アクティブセル。値、レン(アクティブセル。値) - 1) – ADrex

関連する問題