2016-05-12 84 views
0

我在寫代碼的數據從葡萄牙到英語選定的細胞翻譯,但我堅持了一個錯誤:VBA代碼單元的數據語言翻譯

翻譯的細胞纔剛剛返回「和」不管我寫什麼,它都應該翻譯單元格中的所有單詞...任何想法都是非常聰明的想法?

enter image description here

這裏是我的代碼:

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 

任何人都知道如何解決它?

+1

改變'昏暗ptWords作爲Variant' – Jochen

+0

好!它的工作原理:D但現在它將所有內容翻譯成「和」,我是一個新手,你能幫我解決它嗎?它應該將活動單元格中的所有單詞翻譯成相同的活動單元格。 – ADrex

回答

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 
+0

我愛你,你知道嗎? – ADrex

+0

現在只需要聖代上的櫻桃,只需要翻譯過的單元格的第一個單詞在Propercase中(抱歉,麻煩),你知道我該怎麼做嗎? – ADrex

+0

我做到了這一點,但它使所有的話都走資本,我只需要第一個字去大寫,看看: For I = LBound(Words)To UBound(Words) If translation(Words(I))<> 「」 那麼單詞(I)=翻譯(字(I)) 接着 activecell.Value =加入(字) 對於每個X在activecell x.Value = Application.Proper(x.Value) 接着 activecell。 Offset(0,1).Select End Sub – ADrex

1

錯誤提示您必須在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一個字符串中的代碼 - 而這可能並不總是是必要的(由於隱式類型轉換),它是一個很好的做法進入。