2016-05-12 19 views
0

Ich schreibe ein Code-Daten aus einer ausgewählten Zelle aus dem Portugiesischen ins Englische zu übersetzen, aber ich bin mit einem Fehler fest:VBA-Code für Zellendaten Sprachübersetzung

Die übersetzte Zelle nur zurückkehrt „und“ Egal was ich schreibe, es sollte alle Wörter in einer Zelle übersetzen ... Irgendwelche Ideen brilliante Köpfe?

enter image description here

Hier ist mein Code:

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 

Wer weiß, wie man es beheben?

+1

Änderung 'Dim ptWords Als Variant' – Jochen

+0

Good !!! Es hat funktioniert: D Aber jetzt übersetzt es alles zu "und", ich bin ein Neuling, könntest du mir helfen, es zu reparieren? Es sollte alle Wörter in der aktiven Zelle in die gleiche aktive Zelle übersetzen. – ADrex

Antwort

1

Ich würde stattdessen eine Schleife durch die Wörter in Ihrem Text versuchen. Das folgende Verfahren übersetzt jedes Wort, das in der Sammlung gefunden und lässt andere Wörter auf Portugiesisch:

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

Ich liebe dich, hast du das gewusst ?? – ADrex

+0

Jetzt nur die Kirsche auf da oben von diesem Eisbecher, brauche nur das erste Wort der übersetzten Zelle in Propercase (sorry für ma Dummkopf), weißt du, wie mache ich das? – ADrex

+0

Ich tat dies, aber es macht alle Wörter gehen Capital, ich brauche nur das erste Wort zu gehen Hauptstadt, aussehen: Für I = LBound (Wörter) Um UBound (Wörter) Wenn übersetzen (Wörter (I)) <> "" Dann Words (I) = translate (Words (I)) Weiter ActiveCell.Value = Join (Wörter) für jedes x In Active x.Value = Application.Proper (x.Value) Next Activecell. Offset (0, 1) .Wählen Sie End Sub – ADrex

1

Der Fehler besagt, dass Sie eine Variant Variable in einer For Each Schleife verwenden müssen. Sie verwenden ptWords, das ist ein String, aber die Werte, die von translate.Keys() zurückgegeben werden, sind keine expliziten Zeichenfolgetypen, die einen Fehler verursachen.

erklärt entweder die Variable als Variante

Dim ptWords As Variant 

Oder eine generische Variante in der Schleife:

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 

den Trick tun sollten.

Hinweis, dass ich warf explizit tempVar in einen String im Code CStr() verwenden - während dies kann nicht immer notwendig sein (wegen impliziter Typumwandlung) ist es eine gute Praxis ist, in zu erhalten.