Excel + VBA:UserfromstringDeal(订单)号码parsing

我试图做一个全function的报告文件,连接到旧版本的访问数据库。 我需要build立一个用户表单,用户可以input处理(订单)号码,就像我们可以在打印对话框中添加页面一样。

到目前为止,我发现下面的问题给了我部分答案: 如何parsing完整的string,并在Excel VBA中拆分成几个string?

我可以使用分割(string)方法来获取各种处理数字,用“,”分隔。

不过,我也需要从发件人号码选项。

所以,如果用户inputString1 =“10001 – 10050,20111,20115”

那么我需要输出为

Deal_Line.Deal_Number> = 10001,Deal_Line.Deal_Number <= 10050,Deal_Line.Deal_Number = 20111,Deal_Line.Deal_Number = 20115。

我可以精炼SQLstring为我的要求,我想知道是否有办法使用两个deliminator。

扩大@ user3598756答案,(这正是你所要求的)和解释你的要求,我想出了以下内容:

 Function ProcessString(strng1 As String, fieldname As String) As String Dim sqlStrng As String Dim strng As Variant, limits As Variant For Each strng In Split(strng1, ",") limits = Split(strng, "-") If UBound(limits) = 0 Then sqlStrng = sqlStrng & "[FIELD] = " & limits(0) & "|" Else sqlStrng = sqlStrng & "([FIELD] >= " & Trim(limits(0)) & " And [FIELD] <= " & Trim(limits(1)) & ")|" End If Next ProcessString = Replace(WorksheetFunction.Trim(Join(Split(Left(sqlStrng, Len(sqlStrng) - 1), "|"), " Or ")), "[FIELD]", fieldname) End Function 

testing线将是:

 MsgBox ProcessString("10001 - 10050, 20111 , 20115","Deal_Line.Deal_Number") 

这将产生一个我认为更可能是你真正想要的输出 – 使用OR而不是AND作为初学者,添加OR所需的括号以正确工作并允许多个表/字段名称。 再说一遍,也许我错误地解释了你的要求 – 我只是不能看到有什么用, AND将是一个领域。

你可以使用这个辅助函数:

 Function ProcessString(strng1 As String) As String Dim sqlStrng As String Dim strng As Variant, limits As Variant For Each strng In Split(strng1, ",") limits = Split(strng, "-") If UBound(limits) = 0 Then sqlStrng = sqlStrng & "Deal_Line.Deal_Number = " & limits(0) & "|" Else sqlStrng = sqlStrng & "Deal_Line.Deal_Number >= " & limits(0) & " And Deal_Line.Deal_Number <= " & limits(1) & "|" End If Next ProcessString = WorksheetFunction.Trim(Join(Split(Left(sqlStrng, Len(sqlStrng) - 1), "|"), " And ")) End Function 

在你的“主”代码中被testing/ expolited为:

 Sub main() MsgBox ProcessString("10001 - 10050, 20111 , 20115") End Sub