Excel/VBA:如何使用正确的字符串格式粘贴SQL查询

Excel/VBA:如何使用正确的字符串格式粘贴SQL查询,sql,string,vba,excel,Sql,String,Vba,Excel,我在记事本中编写了一些相当长的SQL查询,然后将它们粘贴到我的VBA代码中,然后一次正确地格式化每一行的多行字符串。例如 在我的文本编辑器中,查询如下所示 SELECT a, b, c, ..., n FROM table1, table2, ..., tableN WHERE etc 然后将其粘贴到VBA编辑器中并手动添加sqlStr=sqlStr&。。。。每一行 sql

我在记事本中编写了一些相当长的SQL查询,然后将它们粘贴到我的VBA代码中,然后一次正确地格式化每一行的多行字符串。例如

在我的文本编辑器中,查询如下所示

SELECT 
      a,
      b,
      c,
      ...,
      n
FROM
      table1,
      table2,
      ...,
      tableN
WHERE
      etc
然后将其粘贴到VBA编辑器中并手动添加sqlStr=sqlStr&。。。。每一行

sqlStr = "               SELECT "
sqlStr = sqlStr & "          a,"
sqlStr = sqlStr & "          b,"
sqlStr = sqlStr & "          c,"
sqlStr = sqlStr & "          ...,"
sqlStr = sqlStr & "          n"
sqlStr = sqlStr & "      FROM"
sqlStr = sqlStr & "          table1,"
sqlStr = sqlStr & "          table2,"
sqlStr = sqlStr & "          ...,"
sqlStr = sqlStr & "          tableN"
sqlStr = sqlStr & "      WHERE"
sqlStr = sqlStr & "          etc"
有人知道有一种工具可以让我自动将VBA字符串包装到查询中,而不是手动添加它吗?我想在某个地方会有一个这样的网站,但我找不到

我可以在Vi中装配一些东西,但我不能保证我会在一台我有权安装Vi的计算机上进行装配


感谢您的帮助!谢谢。

任何带有宏/记录功能的文本编辑器都可以让您自动执行此操作-VS.NET、TextPad、Notepad++。最后请参见:。

如果您正在使用VBA,则可能需要安装Excel


您可以编写一个电子表格,将SQL粘贴到列a中,并使用“连接excel公式”函数添加VBA代码。然后你可以复制并粘贴到你的应用程序中。

你可能想看看。在其他格式中,它允许您设置SQL的格式,以便在VB/VBA中使用,这是一个快速而肮脏的解决方案:

将文本复制到干净电子表格的单元格A1中。每条线将从A1向下延伸到一个单元中

In B1 put ="sqlString ="""&A1&""""
In B2 put ="sqlString=sqlString&"""&A2&""""
将B2向下复制/拖动到文本列的末尾

将结果列B复制并粘贴到代码中

您还可以将sql片段直接编辑到空白Excel工作表的A列,而不是记事本,并保存一个步骤

如果您更愿意使用代码,此VBA将从A列生成B列:

Option Explicit

Public Sub makeSqlStmt()
    Dim r
    Dim n
    Dim i
    Const s = "sqlString = """
    Const t = "sqlString = sqlString & """
    Set r = Range("a1")
    Range("B1") = s & r & """"
    n = r.CurrentRegion.Rows.count
    For i = 1 To n - 1
        r.Offset(i, 1) = t & r.Offset(i, 0) & """"
    Next i
End Sub
如果您想直接从记事本文件中读取,可以用代码替换For循环来读取文件。

您不需要在每一行上都执行sqlStr=sqlStr&命令。只需继续这样一句话:

sqlStr = "SELECT a, b, c,..., n " & _
         "  FROM table1, table2,..., tableN " & _
         " WHERE etc"
这样,一条语句最多可以有25行

另外,我不认为您在单独的一行中格式化每个项目的长查询对自己有任何好处。我采取了一种更为温和的方法,试图在不使用太多行的情况下显示更多的结构。下面是最近一个项目中的一些代码。它用于设置组合框的行源

q = "SELECT NurseID, NurseName FROM " & _
    " (SELECT DISTINCT 0 as NurseID,  '-- choose nurse --' as NurseName FROM tblNurse) " & _
    "UNION " & _
    " (SELECT DISTINCT N.NurseID AS NurseID, FirstName & ' ' & LastName AS NurseName " & _
    "  FROM tblNurse AS N INNER JOIN tblBookings AS B" & _
    "  ON N.NurseID=B.NurseID " & _
    "  WHERE B.BDate >= " & Date_To_SQL(txtStartDate) & _
    "    AND B.BDate <= " & Date_To_SQL(txtEndDate) & ") " & _
    "ORDER BY NurseName"
这还演示了如何使用别名使SQL更短、更可读。
在VBA编辑器中插入所有引号和&u非常快,如果您将它们放在剪贴板中,并使用鼠标和键盘在各行中快速单击、Ctrl-V、Click、Ctrl-V。

以下是免费在线sql formatter自动生成的结果

var1 = ""
var1 = var1 & "SELECT a, " & vbCrLf
var1 = var1 & "       b, " & vbCrLf
var1 = var1 & "       c " & vbCrLf
var1 = var1 & "FROM   table1, " & vbCrLf
var1 = var1 & "       table2, " & vbCrLf
var1 = var1 & "       tablen " & vbCrLf
var1 = var1 & "WHERE  a > 1 "

谢谢罗斯,这正是我要找的!没问题,很乐意帮忙:付费版是值得的,如果你在两年后使用它。。。我已经购买了SQLinform的许可证。这价钱很值!不仅用于以VBA字符串格式输出SQL,还用于自动格式化格式不正确的SQL语句。谢谢Marc!这看起来不错。如果我正在处理任何不应该粘贴到下面提到的sqlinform的敏感信息,我将使用这个。