【发布时间】: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