【问题标题】:VBA to concatenate StringsVBA 连接字符串
【发布时间】:2018-07-02 08:14:14
【问题描述】:

我有一些 VBA 代码将各种单元格(总是连续)串在一起,当它们放在一起时会创建一个 SQL 查询(最终用户有下拉菜单来创建动态报告)。这并不理想,因为我必须列出所有单元格,并且由于 VBA 太长而出现错误。请参阅下面的示例

Sub Custom_Query

Dim strsql As String

If Worksheets("Animal_Entry").Range("B1") = "Dog" And Worksheets("Animal_Entry").Range("E1") = "Food_Consumption" Then

strsql = Worksheets("Custom_Queries").Range("A362")
strsql = strsql & vbNewLine
strsql = strsql & Worksheets("Custom_Queries").Range("A363")
strsql = strsql & vbNewLine
strsql = strsql & Worksheets("Custom_Queries").Range("A364")
strsql = strsql & vbNewLine
strsql = strsql & Worksheets("Custom_Queries").Range("A365")
strsql = strsql & vbNewLine
strsql = strsql & Worksheets("Custom_Queries").Range("A366")

With ActiveWorkbook.Connections("Custom_Query").ODBCConnection
    .BackgroundQuery = True
     Debug.Print strsql
    .CommandText = strsql

    End With

ActiveWorkbook.Connections("Custom_Query").Refresh

ElseIf Worksheets("Animal_Entry").Range("B1") = "Dog" And Worksheets("Animal_Entry").Range("E1") = "Bathroom_Breaks" Then

strsql = Worksheets("Custom_Queries").Range("A372")
strsql = strsql & vbNewLine
strsql = strsql & Worksheets("Custom_Queries").Range("A373")
strsql = strsql & vbNewLine
strsql = strsql & Worksheets("Custom_Queries").Range("A374")
strsql = strsql & vbNewLine
strsql = strsql & Worksheets("Custom_Queries").Range("A375")
strsql = strsql & vbNewLine
strsql = strsql & Worksheets("Custom_Queries").Range("A376")

With ActiveWorkbook.Connections("Custom_Query").ODBCConnection
    .BackgroundQuery = True
     Debug.Print strsql
    .CommandText = strsql

    End With

ActiveWorkbook.Connections("Custom_Query").Refresh

End if

End Sub

我想使用以下内容。但是,我无法完全弄清楚让它工作的语法。

Sub Custom_Query()

Dim strsql As String

If Worksheets("Animal_Entry").Range("B1") = "Dog" And Worksheets("Animal_Entry").Range("E1") = "Food_Consumption" Then

    For i = 362 To 366
        strsql = Worksheets("Custom_Queries").Range("A" & i) & vbNewLine
    Next i

With ActiveWorkbook.Connections("Custom_Query").ODBCConnection
    .BackgroundQuery = True
     Debug.Print strsql
    .CommandText = strsql

    End With

ActiveWorkbook.Connections("Custom_Query").Refresh

ElseIf Worksheets("Animal_Entry").Range("B1") = "Dog" And Worksheets("Animal_Entry").Range("E1") = "Bathroom_Breaks" Then

    For i = 372 To 376
        strsql = Worksheets("Custom_Queries").Range("A" & i) & vbNewLine
    Next i

With ActiveWorkbook.Connections("Custom_Query").ODBCConnection
    .BackgroundQuery = True
     Debug.Print strsql
    .CommandText = strsql

    End With

ActiveWorkbook.Connections("Custom_Query").Refresh

End if

End Sub

我们将不胜感激任何通往正确方向的提示!

【问题讨论】:

  • strsql = strsql & Worksheets("Custom_Queries").Range("A" & i) & vbNewLine
  • 你在第一个代码块中有答案,使用strsql = strsql &
  • 你也不需要换行符,虽然你可能需要空格。
  • 离题;在构建动态查询时注意sql injection
  • 我忘记了一个重要的部分(叹气)。有“if 语句”指示将哪些单元格组合在一起以创建 SQL 查询。我已经更新了我的 OP 中的代码。

标签: sql excel vba concatenation


【解决方案1】:

所以我无法找到与我想要在我的 OP 中执行的操作相匹配的解决方案,但我确实创建了一个解决方法。我没有在一个大型 VBA 部分中创建动态 SQL 语句,而是在其自己的 VBA 部分中创建每个 SQL 查询,然后在主查询中调用它。

Sub custom_Query()

If Worksheets("Animal_Entry").Range("Selection") = "Dog" And Worksheets("Animal_Entry").Range("E1") = "Food_Consumption" Then

Call Food_Consumption

ElseIf Worksheets("Animal_Entry").Range("Selection") = "Dog" And Worksheets("Animal_Entry").Range("E1") = "Bathroom Breaks" Then

Call Bathroom_Break

end IF
End Sub

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2017-02-07
    • 2013-12-29
    • 1970-01-01
    • 2010-12-16
    • 2016-09-20
    相关资源
    最近更新 更多