2016-05-18 44 views
2

我已經寫了下面的代碼,在excel中使用VBA的行之一中的'*'或' - '字符後刪除文本,但它給出的錯誤。誰能幫忙?如何在excel中使用VBA在'*'或' - '字符之後刪除文本?

Sub Removetext() 

For each c In Range("A1:ZZ1") 
    c.Value = Left(c.Value, InStr(c.Value, "-") - 1) 
Next C 

End Sub 
+1

我相信有人可以幫忙。你爲什麼不編輯你的問題,以包括信息,如你收到的錯誤;來自您輸入範圍的樣本數據;和你的預期產出?此外,請閱讀[我如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)的幫助主題,以及[如何創建最小,完整和可驗證示例] (http://stackoverflow.com/help/mcve) –

+2

如果InStr(c,「 - 」)> 0然後在你的'c.value'之前加'。 – findwindow

+0

實質上,當InStr(c.Value,「 - 」)在字符串中沒有找到「-'時,它會返回一個」0「或」-1「。而'0 - 1 = -1',並且不能取一個字符串的最左邊的-1個字符。 – JNevill

回答

2

,因爲它在@JNevill和@fidnwindow的意見已經說了,你需要測試你的搜索對象是否被發現或不:

Sub Removetext() 

For Each c In Range("A1:ZZ1") 
    If InStr(c.Value, "-") > 0 Then 
     c.Value = Left(c.Value, InStr(c.Value, "-") - 1) 
    End If 
     If InStr(c.Value, "*") > 0 Then 
     c.Value = Left(c.Value, InStr(c.Value, "*") - 1) 
    End If 
Next c 

End Sub 

的問題是,當InStr函數沒有找到它返回的標準0。所以現在你正在尋找將會拋出錯誤的Left -1字符。

+2

就像一個提示:沒有''0'的需要......但是,大多數人不喜歡這樣:P –

+1

@DirkReichel所以是真的。我不想解釋TRUE/FALSE的布爾狀態。在我自己的代碼中,我會截斷它。但很重要的一點。 –

+1

@DirkReichel - 謝謝你指出,我總是忘記你可以做到這一點。使用沒有'> 0'的公式讓我看起來更聰明,所以我會更頻繁地使用它! :P – BruceWayne

相關問題