Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA语言翻译代码是否损坏?_Vba_Excel - Fatal编程技术网

Excel VBA语言翻译代码是否损坏?

Excel VBA语言翻译代码是否损坏?,vba,excel,Vba,Excel,这段代码应该翻译单元格中字典中的所有单词,但它只翻译第一行(它只翻译“E”到“And”),它应该遍历所有单词并更改单元格中的所有单词 Sub traducaobeta2() Dim translate As Object 'scritping.Dictionary Set translate = CreateObject("Scripting.Dictionary") translate("e") = "and" translate("Telefones") = "Telephones"

这段代码应该翻译单元格中字典中的所有单词,但它只翻译第一行(它只翻译“E”到“And”),它应该遍历所有单词并更改单元格中的所有单词

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
subtraducaobeta2()
Dim translate As Object'Scriptping.Dictionary
Set translate=CreateObject(“Scripting.Dictionary”)
翻译为“e”)=“和”
翻译(“电话”)=“电话”
翻译(“Livros”)=“书籍”
翻译(“Criado mudo”)=“一夜情”
翻译(“宴会”)=“凳子”
翻译(“livros”)=“书籍”
翻译(“卡德诺斯”)=“论文”
翻译(“travesseiros”)=“枕头”
翻译(“Mesa”)=“表格”
翻译(“escritório材料”)=“办公材料”
“名单还在继续。。。
作为变体的模糊词
作为整数的Dim I
Words=Split(LCase(activecell.Value))
对于I=LBound(单词)到UBound(单词)
如果翻译(单词(I))”“那么单词(I)=翻译(单词(I))
下一个
activecell.Value=Join(单词)
activecell.Value=Ucase$(左$(activecell.Value,1))&右$(activecell.Value,Len(activecell.Value)-1)
端接头
像这样使用
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...

另一方面,最后一个
(“materialis de escritório”)
永远不会工作,因为它有空格,所以你的数组将在单独的索引中包含
materialis
de
escritório
,并且永远不会匹配字典键。

除了Macro Man的精彩评论,另一种方法是完全忽略LCase、UCase问题。根本不要尝试更改或修复案例。相反,只需增强translate对象,如:

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

如果源文本有适当的大小写,翻译将起作用,如果源文本都是小写,翻译应该起作用。

一个更好的主意+1谢谢你,加里和麦克曼!!您还知道如何测试单元格,以便知道是否所有单词都已翻译?要删除大小写,这是正确的方法吗?Words=Split(activecell.Value)\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu值=(左$(activecell.Value,1))&右$(activecell.Value,Len)(activecell.Value,Len)(activecell.Value,Len@ADrex我认为您不需要原始代码的最后一行……它的唯一目的是强制执行正确的大小写。刚刚删除,现在它们都是小写的,我按照您的建议在字典上写下了不同大小写的单词,因此如果代码不更改大小写会更好。这是真的,它们不起作用。我将首先为这些单词构建一个案例选择,然后拆分模块将进入场景