Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Vba for循环中的嵌套if语句_Vba_Excel_Excel Udf - Fatal编程技术网

Vba for循环中的嵌套if语句

Vba for循环中的嵌套if语句,vba,excel,excel-udf,Vba,Excel,Excel Udf,我正在修改我编写的一个用户定义函数。它从一个单元格中删除特殊字符(我已经多次发布了关于这个函数的信息,因为我一直在扩展它并学习更多关于VBA的功能) 我现在要做的是添加一个MsgBox,它会弹出并告诉用户哪些特殊字符已被删除。我认为可以通过使用嵌套在现有for循环中的If语句来实现这一点,如下所示: Function removeSpecial(sInput As String) As String Dim sSpecialChars As String Dim i As Lon

我正在修改我编写的一个用户定义函数。它从一个单元格中删除特殊字符(我已经多次发布了关于这个函数的信息,因为我一直在扩展它并学习更多关于VBA的功能)

我现在要做的是添加一个MsgBox,它会弹出并告诉用户哪些特殊字符已被删除。我认为可以通过使用嵌套在现有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
函数将特殊(输入为字符串)删除为字符串
将特殊字符设置为字符串
我想我会坚持多久
作为字符串放置
ssSpecialChars=“\/:*?”?™""®|.&@# %(+`~)-+=^$!,“'这是您要删除的字符列表
对于i=1至Len(特殊字符)
sInput=替换$(sInput,Mid$(SSSpecialChars,i,1),“”)
If(sInput=ssspecialchars)然后“If”语句检查何时删除字符
sreplace=sInput'字符串变量,用于存储被替换的每个特殊字符
下一个
MsgBox被重新放置&“这些已被删除”
sInput=UCase(sInput)
removeSpecial=sInput
结束函数“结束函数”
目前,这让我陷入了一个内循环,我必须强制关闭Excel。我试图用上面的代码检查单个字符是否位于Mid函数当前正在查看的索引中,然后将该字符(如果替换)保存到字符串sreplace中。不过,很明显,我是在我的头上


感谢您的帮助。

请检查此版本:

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
函数将特殊(输入为字符串)删除为字符串
Dim SSSpecialChars作为字符串,sTemp作为字符串
我想我会坚持多久
作为字符串放置
sTemp=sInput
ssSpecialChars=“\/:*?”?™""®|.&@# %(_+`©~);-+=^$!,'"
对于i=1至Len(特殊字符)
ch=Mid(特殊字符,i,1)
如果InStr(sTemp,ch)>0,则
sTemp=替换$(sTemp,ch,“”)
sreplace=sreplace&ch
如果结束
下一个
MsgBox被重新放置&“这些已被删除”
sTemp=UCase(sTemp)
removeSpecial=sTemp
端函数
注意: 这将不会尝试修改输入,只返回一个“已清理”的输出字符串。

尝试以下操作:

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
函数将特殊(输入为字符串)删除为字符串
将特殊字符设置为字符串
我想我会坚持多久
作为字符串放置
作为整数的Dim ln
ssSpecialChars=“\/:*?”?™""®|.&@# %(+`~)-+=^$!,“'这是您要删除的字符列表
对于i=1至Len(特殊字符)
ln=Len(sInput)
sInput=替换$(sInput,Mid$(SSSpecialChars,i,1),“”)
如果ln Len(sInput),则sreplace=sreplace&Mid$(sSpecialChars,i,1)
下一个
MsgBox被重新放置&“这些已被删除”
sInput=UCase(sInput)
removeSpecial=sInput
结束函数“结束函数”

我个人更喜欢这个。另一方面,有没有办法在
ssspecialchars
字符串中包含控制字符?我假设简单地添加控制字符符号不会起作用,或者会起作用吗?您可以使用如下方式:
ssspecialchars=“\/:*?™""®|.&@# %(+);-+=^$!,“&Chr(13)和Chr(10)
(您可以在这里看到sumbols的ASCII代码:)-它可以工作。同样,为了在消息中显示它们(它们通常是不可见的),您可以这样做:
如果ln Len(sInput),那么sreplace=sreplace&IIf(Mid$(ssspecialchars,i,1)=Chr(10),“”,Mid$(ssspecialchars,i,1))
哦,我不知道VBA中有Chr()函数这样的东西。这让我的生活更轻松。我试图修改我找到的代码,但是Chr()函数总是让生活更简单。谢谢,我能够调整我的代码以删除所有的控制字符以及我的“特殊”字符。我还选择编写代码,在删除任何不可见的控件字符时向用户发出警告,因为大多数控件字符显示在Excel中,因此将打印到我的消息框中。谢谢你的帮助!