在字符串中查找可变长度字符串的多个实例

时间:2014-11-05 21:16:06

标签: excel-vba vba excel

我正在尝试从SQL查询中提取参数,以便为SSRS报告构建我的xml。我希望能够将我的SQL复制/粘贴到Excel中,查看代码并查找“@”的所有实例以及附加到其上的相应参数。这些参数最终将被复制并粘贴到另一张纸上以供进一步使用。例如:

where DateField between @FromDate and @ToDate
      and (BalanceFiled between @BalanceFrom and @BalanceTo
            OR BalancdField = @BalanceFrom)

我知道我可以使用Instr在一行中找到第一个'@'的起始位置,但是我如何去提取参数名称的其余部分(这会有所不同)以及该示例的前两行,找到第二个参数并提取它的变量长度?我也尝试使用.Find方法,我已经能够复制整行但不仅仅是参数。

1 个答案:

答案 0 :(得分:1)

我可能会这样解决这个问题:

  1. 删除未被空格包围的字符,但不删除 属于。在您的示例中,需要删除括号。
  2. 使用空格作为分隔符拆分文本。
  3. 对于拆分数组中的每个元素,请检查第一个字符。
  4. 如果是" @",则找到参数,它是数组中该部分的整个值。
  5. 我的用户定义函数如下所示:

    Public Function GetParameters(ByRef rsSQL As String) As String
        Dim sWords() As String
        Dim s As Variant
        Dim sResult As String
    
        'remove parentheses and split at space
        sWords = Split(Replace(Replace(rsSQL, ")", ""), "(", ""), " ")
    
        'find parameters
        For Each s In sWords
            If Left$(s, 1) = "@" Then
                sResult = sResult & s & ", "
            End If
        Next s
    
        'remove extra comma from list
        If sResult <> "" Then
            sResult = Left$(sResult, Len(sResult) - 2)
        End If
    
        GetParameters = sResult
    End Function