在VBA中格式化SQL

在VBA中格式化SQL,vba,excel,Vba,Excel,我正在使用VBA打开ODBC连接并检索数据。我有一些SQL查询,用于填充我需要的内容: SELECT tbl.a AS test1 tbl.b AS test2 tbl.c AS test3 FROM db.tbl AS tbl INNER JOIN db.more AS more ON more.a = tbl.a 是否有一种方法可以在VBA中输入此查询,使其保留其结构并看起来可读?我这样做: Dim sql AS string sql = "" sql = sql &a

我正在使用VBA打开ODBC连接并检索数据。我有一些SQL查询,用于填充我需要的内容:

SELECT
  tbl.a AS test1
  tbl.b AS test2
  tbl.c AS test3
FROM
  db.tbl AS tbl
INNER JOIN db.more AS more
  ON more.a = tbl.a
是否有一种方法可以在VBA中输入此查询,使其保留其结构并看起来可读?我这样做:

Dim sql AS string
sql = ""
sql = sql & "SELECT"
sql = sql & "  tbl.a AS test1"
sql = sql & "  tbl.b AS test2"
sql = sql & "  tbl.c AS test3"
sql = sql & "FROM"
sql = sql & "  db.tbl AS tbl"
sql = sql & "INNER JOIN db.more AS more"
sql = sql & "  ON more.a = tbl.a"
这对我来说真的不太好,但是如果这是我能做的最好的,那么我会处理的。我只是想看看是否有更好的方法。

这有帮助吗

Sub test()
    Dim sql As String

    sql = "SELECT " & _
      "tbl.a AS test1 " & _
      "tbl.b AS test2 " & _
      "tbl.c AS test3 " & _
    "FROM " & _
      "db.tbl AS tbl" & _
    "INNER JOIN db.more AS more" & _
      "ON more.a = tbl.a"

End Sub
这有帮助吗

Sub test()
    Dim sql As String

    sql = "SELECT " & _
      "tbl.a AS test1 " & _
      "tbl.b AS test2 " & _
      "tbl.c AS test3 " & _
    "FROM " & _
      "db.tbl AS tbl" & _
    "INNER JOIN db.more AS more" & _
      "ON more.a = tbl.a"

End Sub

这只是偏好,但可能是这个

sql = "SELECT" + _
      "  tbl.a AS test1" + _
      "  tbl.b AS test2" + _
      "  tbl.c AS test3" + _
      "FROM"             + _
      "  db.tbl AS tbl"  + _
      "INNER JOIN db.more AS more" + _
      "  ON more.a = tbl.a"
另一个选项是将SQL输入工作表中的单元格,然后隐藏该工作表,然后在VBA中使用:

sql = Worksheet("NameOfHiddenWorkSheet").Range("A1").Value
在我的需要中,我通常将图纸命名为设置并命名范围(范围名称)

然后你可以这样称呼它:

sql = Sheets("Settings").Range("Sql").Value

这只是偏好,但可能是这个

sql = "SELECT" + _
      "  tbl.a AS test1" + _
      "  tbl.b AS test2" + _
      "  tbl.c AS test3" + _
      "FROM"             + _
      "  db.tbl AS tbl"  + _
      "INNER JOIN db.more AS more" + _
      "  ON more.a = tbl.a"
另一个选项是将SQL输入工作表中的单元格,然后隐藏该工作表,然后在VBA中使用:

sql = Worksheet("NameOfHiddenWorkSheet").Range("A1").Value
在我的需要中,我通常将图纸命名为设置并命名范围(范围名称)

然后你可以这样称呼它:

sql = Sheets("Settings").Range("Sql").Value

谢谢,这很有帮助。我曾考虑过像您所说的那样将sql放在一个工作表上,但是有些字段实际上是基于一些范围值的动态字段,因此它在多行中的波动性相同,因此基本方法可能更简单。如果是静态SQL代码的话,我很喜欢这个想法!使用行延续来分配SQL字符串的一个问题是,您可以很容易地遇到25行的限制。我可能最终不得不存储它,或者只使用原始方法。真烦人@JeffreyKramer还始终可以选择将命令存储在文件中,在线或安全位置,或在注册表中。这些选项还允许您修改连接和SQL语句,而无需打开excel和VBA编辑器。有几十种方法可以改善你的处境,这完全取决于你拥有什么和想要做什么。谢谢你,这很有帮助。我曾考虑过像您所说的那样将sql放在一个工作表上,但是有些字段实际上是基于一些范围值的动态字段,因此它在多行中的波动性相同,因此基本方法可能更简单。如果是静态SQL代码的话,我很喜欢这个想法!使用行延续来分配SQL字符串的一个问题是,您可以很容易地遇到25行的限制。我可能最终不得不存储它,或者只使用原始方法。真烦人@JeffreyKramer还始终可以选择将命令存储在文件中,在线或安全位置,或在注册表中。这些选项还允许您修改连接和SQL语句,而无需打开excel和VBA编辑器。有几十种方法可以改善你的处境,这实际上完全取决于你拥有什么和想要做什么