Excel VBA中访问字符串中的报价

ColdTeck

好的,我在使用Excel 2010中的VBA来查询访问中的数据时遇到问题,当变量Descripcheck或Grouplocal的某些描述在excel单元格中带有“”时,就会出现问题,因此当它拉字符串本身时,这会导致查询函数获取语法错误。有任何想法吗?

            PMnum = Cells(B, 3)
            Grouplocal = Cells(B, 4)
            Descripcheck = Cells(B, 6)
            DevTyp = Cells(B, 5)
            TagName = Cells(B, 2)

            If PMnum = "" Then
            PMnum = " IS NULL"
            Else:
            PMnum = "=" & PMnum
            End If

            If Grouplocal = "" Then
            Grouplocal = " IS NULL"
            Else:
            Grouplocal = "=" & Chr$(34) & Grouplocal & Chr$(34)
            End If

            If Descripcheck = "" Then
            Descripcheck = " IS NULL"
            Else:
            Descripcheck = "=" & Chr$(34) & Descripcheck & Chr$(34)
            End If

            If DevTyp = "" Then
            DevTyp = " IS NULL"
            Else:
            DevTyp = "=" & Chr$(34) & DevTyp & Chr$(34)
            End If

            If TagName = "" Then
            TagName = " IS NULL"
            Else:
            TagName = "=" & Chr$(34) & TagName & Chr$(34)
            End If

            sCmndString = "SELECT Site_Data.Pass_Fail, Site_Data.Tag_Name, Site_Data.[PM_#],Site_Data.Group_Location_Reference, Site_Data.Device_Type, Site_Data.Description, Site_Data.Set_Point, Site_Data.Set_Point_Units, Site_Data.Fail_Low, Site_Data.Fail_High, Site_Data.As_Found, Site_Data.As_Left, Site_Data.Manufacturer_SN, Site_Data.Year_Put_Into_Service, Site_Data.Date_of_Test, Site_Data.Time_To_Complete, Site_Data.Service, Site_Data.Comments, Site_Data.Site, Site_Data.Year, Site_Data.Month " & _
                  "FROM Site_Data WHERE (((Site_Data.[PM_#])" & PMnum & ") AND " & _
                  "((Site_Data.Group_Location_Reference)" & Grouplocal & ") AND " & _
                  "((Site_Data.Device_Type)" & DevTyp & ") AND " & _
                  "((Site_Data.Description)" & Descripcheck & ") AND " & _
                  "((Site_Data.Site)=" & Chr$(34) & SiteName & Chr$(34) & ") AND " & _
                  "((Site_Data.Year)=" & Chr$(34) & yrs & Chr$(34) & ") AND " & _
                  "((Site_Data.Month)=" & Chr$(34) & Mnth & Chr$(34) & ") AND " & _
                  "((Site_Data.Tag_Name)" & TagName & "));"
            Set rs = New ADODB.Recordset
            rs.Open sCmndString, cnt, 2, 3, 1
戈德·汤普森

如果您不停地与这些"s和Chr$(34)s混蛋,您将使自己发疯。尝试改用参数化查询。考虑以下(简化的)示例。它使用Access中的一些测试数据...

Site_ID  Device_Type  Description 
-------  -----------  ------------
      1  Type1        test1       
      2  Type1                    
      3  Type1                    
      4  Type2        "some" value
      5  Type2        "some" value
      6  Type2                    
      7  Type2                    
      8  Type2                    

看起来像这样的Excel工作表

Excel.png

...按钮后面的代码是

Option Explicit

Public Sub AccessLookup()
    Dim con As ADODB.Connection, cmd As ADODB.Command, rst As ADODB.Recordset
    Dim DevTyp As Variant, Descripcheck As Variant
    Dim s As String, i As Long

    s = Trim(CStr(Range("B1").Value))
    DevTyp = IIf(Len(s) = 0, Null, s)
    s = Trim(CStr(Range("B2").Value))
    Descripcheck = IIf(Len(s) = 0, Null, s)

    Set con = New ADODB.Connection
    con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Public\Database1.accdb;"
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = con
    cmd.CommandText = _
            "SELECT COUNT(*) AS n FROM Site_Data " & _
            "WHERE Device_Type " & IIf(IsNull(DevTyp), "IS NULL ", "= ? ") & _
                "AND Description " & IIf(IsNull(Descripcheck), "IS NULL ", "= ? ")
    i = 0
    If Not IsNull(DevTyp) Then
        cmd.CreateParameter "?", adVarWChar, adParamInput, 255
        cmd.Parameters(i).Value = DevTyp
        i = i + 1
    End If
    If Not IsNull(Descripcheck) Then
        cmd.CreateParameter "?", adVarWChar, adParamInput, 255
        cmd.Parameters(i).Value = Descripcheck
        i = i + 1
    End If
    Set rst = cmd.Execute
    Range("B6").Value = rst("n").Value
    rst.Close
    Set rst = Nothing
    Set cmd = Nothing
    con.Close
    Set con = Nothing
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel VBA中的子字符串

来自分类Dev

VBA,在Excel中的公式中搜索字符串

来自分类Dev

循环访问Excel VBA中的字符串列表

来自分类Dev

Excel VBA替换字符串中的问号

来自分类Dev

如何在Excel VBA中操作此字符串?

来自分类Dev

Excel VBA用公式中的字符串求值

来自分类Dev

从excel中的字符串中“减去”字符串

来自分类Dev

错误#VALUE,VBA中UDF中的长字符串用于Excel中的输出

来自分类Dev

用Excel中的字符串替换字符串

来自分类Dev

Excel中的子字符串

来自分类Dev

Excel中的字符串操作

来自分类Dev

在Excel中解析URL字符串

来自分类Dev

从Excel VBA中的字符串中提取最后一个括号内的字符

来自分类Dev

在Excel中查找字符串,并将列字母存储在变量VBA中

来自分类Dev

在目录中文件中的VBA字符串搜索在Excel 2007中不起作用

来自分类Dev

VBA - Excel - 在文件夹中的多个文件中搜索多个字符串

来自分类Dev

将 Excel 公式字符串解析为 VBA 中的前置字符串、函数、参数和后置函数字符串

来自分类Dev

Excel DNA-将C#字符串编组到回调中的VBA ByRef

来自分类Dev

如何从Excel VBA中的此简单JSON字符串提取值?

来自分类Dev

Excel VBA:如何从单元格中删除子字符串?

来自分类Dev

Excel-VBA:从字符串中查找和替换以及日期格式

来自分类Dev

如何在Excel VBA中创建字符串数组并将其传递给子对象?

来自分类Dev

在Excel VBA中删除给定索引处的字符串元素

来自分类Dev

在不使用VBA的Excel中拆分字符串(单元格)(例如,用于数组公式)

来自分类Dev

获取第一行中匹配字符串的列号。Excel VBA

来自分类Dev

使用VBA识别Excel工作表中包含文本子字符串的特定行

来自分类Dev

使用字符串变量在VBA中设置对象变量?(Excel 2013年)

来自分类Dev

查找字符串是否在二维VBA Excel数组中

来自分类Dev

比较VBA Excel中的两个字符串

Related 相关文章

  1. 1

    Excel VBA中的子字符串

  2. 2

    VBA,在Excel中的公式中搜索字符串

  3. 3

    循环访问Excel VBA中的字符串列表

  4. 4

    Excel VBA替换字符串中的问号

  5. 5

    如何在Excel VBA中操作此字符串?

  6. 6

    Excel VBA用公式中的字符串求值

  7. 7

    从excel中的字符串中“减去”字符串

  8. 8

    错误#VALUE,VBA中UDF中的长字符串用于Excel中的输出

  9. 9

    用Excel中的字符串替换字符串

  10. 10

    Excel中的子字符串

  11. 11

    Excel中的字符串操作

  12. 12

    在Excel中解析URL字符串

  13. 13

    从Excel VBA中的字符串中提取最后一个括号内的字符

  14. 14

    在Excel中查找字符串,并将列字母存储在变量VBA中

  15. 15

    在目录中文件中的VBA字符串搜索在Excel 2007中不起作用

  16. 16

    VBA - Excel - 在文件夹中的多个文件中搜索多个字符串

  17. 17

    将 Excel 公式字符串解析为 VBA 中的前置字符串、函数、参数和后置函数字符串

  18. 18

    Excel DNA-将C#字符串编组到回调中的VBA ByRef

  19. 19

    如何从Excel VBA中的此简单JSON字符串提取值?

  20. 20

    Excel VBA:如何从单元格中删除子字符串?

  21. 21

    Excel-VBA:从字符串中查找和替换以及日期格式

  22. 22

    如何在Excel VBA中创建字符串数组并将其传递给子对象?

  23. 23

    在Excel VBA中删除给定索引处的字符串元素

  24. 24

    在不使用VBA的Excel中拆分字符串(单元格)(例如,用于数组公式)

  25. 25

    获取第一行中匹配字符串的列号。Excel VBA

  26. 26

    使用VBA识别Excel工作表中包含文本子字符串的特定行

  27. 27

    使用字符串变量在VBA中设置对象变量?(Excel 2013年)

  28. 28

    查找字符串是否在二维VBA Excel数组中

  29. 29

    比较VBA Excel中的两个字符串

热门标签

归档