[英]Nested if statement within a for loop
I am modifying a User Defined Function which I wrote. 我正在修改我写的用户定义函数。 It removes special characters from a cell (I have posted about this same function a handful of times, as I keep expanding it and learning more about the capabilites of VBA). 它从一个单元格中删除了特殊字符(我已经发布了几次相同的函数,因为我不断扩展它并学习更多关于VBA的功能)。
What I am trying to do now is add a MsgBox which pops up and tells the user exactley which special characters have been removed. 我现在要做的是添加一个弹出的MsgBox,并告诉用户exactley删除了哪些特殊字符。 I think that I can do this by using an If statement nested within my existing for loop, like so: 我认为我可以通过使用嵌套在我现有的for循环中的If语句来实现这一点,如下所示:
Function removeSpecial(sInput As String) As String
Dim sSpecialChars As String
Dim i As Long
Dim sReplaced As String
sSpecialChars = "\/:*?™""®<>|.&@# %(_+`©~);-+=^$!,'" 'This is your list of characters to be removed
For i = 1 To Len(sSpecialChars)
sInput = Replace$(sInput, Mid$(sSpecialChars, i, 1), "")
If (sInput = sSpecialChars) Then 'If statement to check when a character has been removed
sReplaced = sInput 'String variable to store each special character which was replaced
Next
MsgBox sReplaced & " These were removed"
sInput = UCase(sInput)
removeSpecial = sInput
End Function 'end of function
Currently this throws me into an infinate loop and I have to force close Excel. 目前这让我陷入了一个无限循环,我必须强制关闭Excel。 What I was trying to do with the above code was to check to see if an individual character located at whatever index the Mid function is currently looking at, and then save that character, if replaced, to the String sReplaced. 我试图用上面的代码做的是检查一个单独的字符是否位于Mid函数当前正在查看的任何索引处,然后将该字符(如果被替换)保存到String sReplaced。 Clearly though, I am in over my head. 显然,我在我的脑海里。
Thanks you for the help. 谢谢你的帮助。
Please examine this version: 请检查此版本:
Function removeSpecial(sInput As String) As String
Dim sSpecialChars As String, sTemp As String
Dim i As Long
Dim sReplaced As String
sTemp = sInput
sSpecialChars = "\/:*?™""®<>|.&@# %(_+`©~);-+=^$!,'"
For i = 1 To Len(sSpecialChars)
ch = Mid(sSpecialChars, i, 1)
If InStr(sTemp, ch) > 0 Then
sTemp = Replace$(sTemp, ch, "")
sReplaced = sReplaced & ch
End If
Next
MsgBox sReplaced & " These were removed"
sTemp = UCase(sTemp)
removeSpecial = sTemp
End Function
Note: This will not attempt to modify the input, only return a "cleaned-up" output string. 注意:这不会尝试修改输入,只返回“已清理”的输出字符串。
Try this one: 试试这个:
Function removeSpecial(sInput As String) As String
Dim sSpecialChars As String
Dim i As Long
Dim sReplaced As String
Dim ln As Integer
sSpecialChars = "\/:*?™""®<>|.&@# %(_+`©~);-+=^$!,'" 'This is your list of characters to be removed
For i = 1 To Len(sSpecialChars)
ln = Len(sInput)
sInput = Replace$(sInput, Mid$(sSpecialChars, i, 1), "")
If ln <> Len(sInput) Then sReplaced = sReplaced & Mid$(sSpecialChars, i, 1)
Next
MsgBox sReplaced & " These were removed"
sInput = UCase(sInput)
removeSpecial = sInput
End Function 'end of function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.