2011-05-05 66 views
3

好吧,现在真的让我感到困扰。VBA Excel替换并不总是有效

最终我想添加一些ifs和其他的代码,但现在我只是有下面的代码。

' resize string if nessuary 
sname = Replace(arr(x), "ASR Port Provisioning General Questions", "General Questions") 
sname = Replace(arr(x), "ASR Port Provisioning", "ASR PP") 
sname = Replace(arr(x), "ASR Standard Network Device Config Changes", "Std Config Change") 
If Len(sname) > 30 Then sname = Right(sname, 15) 

ARR()有元素

"ASR Port Provisioning General Questions", 
"ASR Port Provisioning", 
"ASR Standard Network Device Config Changes" 

现在的“ASR标准网络设备配置的变化”它的工作原理,并得到缩短为“STD配置更改”

但对于其他两个他们得到滑雪,而不是取代?

现在我知道它们所包含的信息corrent,我甚至试图outputing ARR(X),以形成SEACH字符串,但它仍然不会发生:)

OK看来,这需要整理,一旦包梁如果在别人的和

如果InStr函数(ARR(X), “ASR端口”),然后

If InStr(arr(x), "ASR Port Provisioning General Questions") Then 
    sname = "General Questions" 
    Else 
    sname = Replace(arr(x), "ASR Port Provisioning", "ASR PP") 
    End If 

    Else 
    sname = Replace(arr(x), "ASR Standard Network Device Config Changes", "Std Config Change") 
End If 

做工精细!任何一个knwo乳清三个替代名单ogather停止对方工作?

回答

1

在您的第一个代码块中,问题在于您在每次调用时重置sname的值,因此只有最后一个“粘贴”。您可能需要另一个阵列来存储所有替换的值,或者您可以更新现有的阵列,或者在进行替换之后,您可以在每个项目上完成您的工作。我们需要更多地了解您对数据的处理方式。

在第二个代码块中,ASR Port不得在字符串arr(x)中,因此它只执行Else语句。

我猜你正在尝试做的是这样的:

If InStr(arr(x), "ASR Port Provisioning General Questions") Then 
    sname = Replace(arr(x), "ASR Port Provisioning General Questions", "General Questions") 

ElseIf InStr(arr(x), "ASR Port Provisioning") Then 
    sname = Replace(arr(x), "ASR Port Provisioning", "ASR PP") 

Else 
    sname = Replace(arr(x), "ASR Standard Network Device Config Changes", "Std Config Change") 

End If 
+0

没有对不起第二代码块正常工作。但是,感谢您提供关于重置值的第一条评论,我假设它会依次尝试每个替换,如果有人工作,那么更新的值将在下一个字符串中进行测试。我有jsut认为另一种做法是在第一个替换语句中使用arr(x),然后在每个aditinal中使用sname! – DevilWAH 2011-05-05 16:59:08

+0

现在,这一切都让我感到很高兴看着我正在搜索的字符串! DOH !!!!!离开感觉愚蠢;)大声笑,使我多年来发现! – DevilWAH 2011-05-05 16:59:50