Vba 通过i&x2B;1或其他算术值作为参数

Vba 通过i&x2B;1或其他算术值作为参数,vba,excel,Vba,Excel,因此,我在for循环中使用if语句,需要检查当前迭代和下一次迭代的条件 目前我有: For i = 1 To Len(inLine) If Asc(Mid(inLine, i, 1)) = 10 And dnl = False Then dnl = True outLine = outLine + " " ElseIf Asc(Mid(inLine, i, 1)) = 10 And dnl = True Then

因此,我在for循环中使用if语句,需要检查当前迭代和下一次迭代的条件

目前我有:

For i = 1 To Len(inLine)
        If Asc(Mid(inLine, i, 1)) = 10 And dnl = False Then
            dnl = True
            outLine = outLine + " "
        ElseIf Asc(Mid(inLine, i, 1)) = 10 And dnl = True Then
            dnl = False
            outLine = outLine & ">" & vbNewLine & "<"
        Else
            dnl = False
            outLine = outLine & Mid(inLine, i, 1)
        End If
Next
当单步执行程序时,这似乎有效,但当代码完成时,我得到一个运行时错误
无效的过程调用或参数

我试着用I=I+1,I++,去掉括号,但都没有用。我试着寻找一种方法,用算术作为论据,但一直没能找到我要找的东西。有办法做到这一点吗?在for循环之前检查下一次迭代有不同的方法吗


谢谢您的帮助。

带有
i+1
的mid将在最后一个循环中出错,因为
i+1
指的是字符串末尾以外的字符。你需要做点什么来防止它从绳子的末端掉下来

使用Application.Min确保找到端点:

If Asc(Mid(inLine, i, 1)) = 10 And Asc(Mid(inLine, Application.Min(i + 1,Len(inLine)), 1)) = 10 Then

如其他人所述,使用
i+1
时,一旦到达字符串末尾,您将引用一个不存在的索引

但是,使用
Replace
有更简单的方法来实现您想要的。如果输入字符串在行首或行尾没有双空格或尾随空格,则:

 outline = Replace(Replace(inline, vbLf, " "), "  ", vbLf)

如果这些条件在您的情况下不正确,您可以首先通过一些其他的
Replace
调用来解决这些问题。

这方面的问题是我想用空格替换其中一些,而另一些则用新行替换。我以前也尝试过replace函数,但由于某种原因,它无法识别所有的换行符。(换行符是在python程序中创建的,所以我想知道它是否对不同的点使用了不同的编码)在你的问题中,你写道你想用单换行符替换双换行符,用空格替换单换行符。如果我提到的条件是真的,这就是这里发生的事情。请注意靠近末端的双空格。当然,如果您不确定换行符是由哪些字符组成的,那么您需要首先检查这些字符。应该不难做到。这可能是一个很好的解决方案,但不知何故,文本的编码没有被识别为vbLf、vbCr或vbNewLine。我能够隔离它的唯一方法是找到ASCII值,它对应于一个换行符,但不是这样读取的,比较它并自己替换它。不过,感谢您在这方面的帮助。除非行尾是一个换行符,它会在行尾添加两个换行符,因为条件会两次读取为真。就我的情况而言,这并不是一个问题,尽管我正在搜索内容,只要我能阅读每一行,我就很好。谢谢你,先生!
 outline = Replace(Replace(inline, vbLf, " "), "  ", vbLf)