【问题标题】:VBA SQL IIF LIKEVBA SQL IIF 喜欢
【发布时间】:2021-03-18 18:24:49
【问题描述】:

我正在尝试在“备注 1”列中搜索关键字,如果找到则返回一个字符串,如果没有找到则返回另一个。

我有以下代码可以正常工作,但无法让 IIF 正常工作:

"IIF([Remarks 1] Like '%Pizza%','Pizza','Other') AS [Desc2], " _

(我需要稍后按此列分组)

另外:我可以嵌套 IFF 来搜索其他关键字吗?

错误:您尝试执行的查询不包含指定表达式 'iif([Remarks 1] ALike '%Pizza%','Pizza','Other') 作为聚合函数的一部分

Sub MacroTest()

Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set wb = ActiveWorkbook
Set ws1 = wb.Sheets("Sheet1")
Set ws2 = wb.Sheets("Sheet2")

ws2.Cells.ClearContents

ws2.Range("A1").Value = "Account Name"
ws2.Range("B1").Value = "Account Number"
ws2.Range("C1").Value = "Currency"
ws2.Range("D1").Value = "Description"
ws2.Range("E1").Value = "Credit Amount"
ws2.Range("F1").Value = "Debit Amount"

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\Users\username\Desktop\Test1.xlsx;" & _
        "Extended Properties=""Excel 8.0;HDR=Yes;"";"

    objRecordset.Open "SELECT [Account Name], " _
                            & "[Account Number], " _
                            & "[Currency], " _
                            & "[Description], " _
                            & "SUM([Credit Amount])," _
                            & "-SUM([Debit Amount])," _
                            & "IIF([Remarks 1] Like '%Pizza%','Pizza','Other') AS [Desc2] " _
                        & "FROM [Sheet1$] " _
                            & "GROUP BY [Account Name], " _
                                     & "[Account Number], " _
                                     & "[Currency]," _
                                     & "[Desc2]," _
                                     & "[Description]", _
    objConnection, adOpenStatic, adLockOptimistic, adCmdText

ws2.Range("A2").CopyFromRecordset objRecordset

End Sub

【问题讨论】:

  • 学习使用参数!
  • 首先用方括号替换列名周围的 mysql 风格的重音符,用single quotes 替换字符串文字周围的双引号,并删除最后一个选定列之后的尾随逗号。
  • 根据 GSerg 的建议进行的编辑

标签: sql vba adodb


【解决方案1】:

您正在尝试使用不属于聚合的表达式。你可以试试这样吗:

objRecordset.Open "SELECT [Account Name], " _
                            & "[Account Number], " _
                            & "[Currency], " _
                            & "[Description], " _
                            & "SUM([Credit Amount])," _
                            & "-SUM([Debit Amount])," _
                            & "[Desc2] " _
                        & "FROM (" & _
                        "SELECT [Account Name], [Account Number], [Currency], [Description], [Credit Amount]," & _
                              " [Debit Amount], IIF([Remarks 1] Like '%Pizza%','Pizza','Other') AS [Desc2]" & _
                        " FROM [Sheet1$] ) tmp" _
                            & "GROUP BY [Account Name], " _
                                     & "[Account Number], " _
                                     & "[Currency]," _
                                     & "[Desc2]," _
                                     & "[Description];"

PS:此时使用 ACE.Oledb 驱动程序可能比使用 Jet 更好。

【讨论】:

  • ACE.Oledb 是否要求我安装 MS Access Redistributable? - 我想避免在最终用户机器上安装
  • JET 也需要它,不是吗?您需要安装的是驱动程序,而不是访问权限本身。
  • 由于某种原因我只能使用 Jet :'( 没有安装。我已将您的答案标记为正确
猜你喜欢
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多