Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA中Access字符串中的引号_Vba_Excel_Excel 2010_Ms Access 2010 - Fatal编程技术网

Excel VBA中Access字符串中的引号

Excel VBA中Access字符串中的引号,vba,excel,excel-2010,ms-access-2010,Vba,Excel,Excel 2010,Ms Access 2010,好的,我在使用Excel 2010中的VBA查询access中的数据时遇到问题,当变量DescriptCheck或Grouplocal在Excel单元格中的某些描述有a时,问题就会出现,因此当它提取字符串本身时,这会导致查询函数出现语法错误。有什么想法吗 PMnum = Cells(B, 3) Grouplocal = Cells(B, 4) Descripcheck = Cells(B, 6) De

好的,我在使用Excel 2010中的VBA查询access中的数据时遇到问题,当变量DescriptCheck或Grouplocal在Excel单元格中的某些描述有a时,问题就会出现,因此当它提取字符串本身时,这会导致查询函数出现语法错误。有什么想法吗

            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,你会发疯的。尝试改用参数化查询。考虑下面的简化示例。它使用Access中的一些测试数据

站点\u ID设备\u类型说明 ---- ------ ------ 1类型1测试1 2类型1 3类型1 4键入2一些值 5键入2一些值 6类型2 7类型2 8类型2 …一张Excel表格,看起来像这样

…按钮后面的代码是

选项显式 公共子访问查找 Dim con作为ADODB.Connection,cmd作为ADODB.Command,rst作为ADODB.Recordset 将Dim DevTyp作为变量,将CHECK描述为变量 暗如弦,我如长 s=TrimcStrangeB1.值 DevTyp=IIfLens=0,Null,s s=TrimcStrangeB2.值 descrippcheck=IIfLens=0,Null,s Set con=New ADODB.Connection con.openprovider=Microsoft.ACE.OLEDB.12.0;数据源=C:\Users\Public\Database1.accdb; Set cmd=New ADODB.Command cmd.ActiveConnection=con cmd.CommandText=_ 从站点数据中选择计数*作为n(&U)_ 其中,设备类型&IIfIsNullDevTyp为NULL,=?&_ 和Description&iiFisNullDescripticCheck,为空,=? i=0 如果不是IsNullDevTyp,则 cmd.CreateParameter?,adVarWChar,adParamInput,255 cmd.Parametersi.Value=DevTyp i=i+1 如果结束 如果不是isNullDescripticCheck,则 cmd.CreateParameter?,adVarWChar,adParamInput,255 cmd.parameters si.Value=Descripcheck i=i+1 如果结束 设置rst=cmd.Execute 范围B6.值=rstn.值 rst.关闭 设置rst=无 Set cmd=Nothing 结案 设置con=Nothing 端接头
你可以通过把它折叠起来来逃避这个问题。e、 g.valueHere=ReplacevalueHere,