运行时错误 - 2147217900 80040e14

时间:2014-11-24 02:30:51

标签: excel vba excel-vba adodb

我正在尝试在Excel文件中执行VBA查询。

从我的Excel文件中,我可以使用ADODB连接选择任何其他excel文件。 然后,它从目标文件中提取每个标头的标头和唯一值。 然后,用户可以选择所需的标题和条件,以在新工作表中的Excel中创建新表。

我的所有代码都运行良好。但是,当Query包含大量数据或条件时,它会显示此错误。

对于Eg:,用户选择将第1列和第2列显示为结果,其中列数据可以是1到1000的序列号,第2列数据是特定文本('比如,流程已完成') 。当序列号从1到1000时,它会显示此错误。但是,如果序列号的数量较少,则代码可以正常工作。

示例查询:SELECT [S / N],[Process或Metrology] FROM [MIMO Masterfile $] WHERE(([S / N] = 1 OR [S / N] = 2 OR [S / N] = 3 OR [S / N] = 4 OR [S / N] = 5 OR [S / N] = 6 OR [S / N] = 7 OR [S / N] = 8 OR [S / N] = 9 OR [S / N] = 10 OR [S / N] = 11 OR [S / N] = 12 OR [S / N] = 13 OR [S / N] = 14 OR [S / N] = 15 OR [S / N] = 16 OR [S / N] = 17 OR [S / N] = 18 OR [S / N] = 19 OR [S / N] = 20 OR [S / N] = 21 OR [S / N ] = 22 OR [S / N] = 23 OR [S / N] = 24 OR [S / N] = 25 OR [S / N] = 26 OR [S / N] = 27 OR [S / N] = 28 OR [S / N] = 29 OR [S / N] = 30 OR [S / N] = 31 OR [S / N] = 32 OR [S / N] = 33 OR [S / N] = 34 OR [S / N] = 35 OR [S / N] = 36 OR [S / N] = 37 OR [S / N] = 38 OR [S / N] = 39 OR [S / N] = 40 OR [S / N] = 41 OR [S / N] = 42 OR [S / N] = 43 OR [S / N] = 44 OR [S / N] = 45 OR [S / N] = 46 OR [S / N ] = 47 OR [S / N] = 48 OR [S / N] = 49 OR [S / N] = 50 OR [S / N] = 51 OR [S / N] = 52 OR [S / N] = 53 OR [S / N] = 54 OR [S / N] = 55 OR [S / N] = 56 OR [S / N] = 57 OR [S / N] = 58 OR [S / N] = 59 OR [S / N] = 60 OR [S / N] = 61 OR [S / N] = 62 OR [S / N] = 63 OR [S / N] = 64 OR [S / N] = 65 OR [S / N] = 66 OR [S / N] = 67 OR [S / N] = 68 OR [S / N] = 69 OR [S / N] = 70 OR [S / N] = 71 OR [S / N ] = 72 OR [S / N] = 73 OR [S / N] = 74 OR [S / N] = 75 OR [S / N] = 76 OR [S / N] = 77 OR [S / N] = 78 OR [S / N] = 79 OR [S / N] = 80 OR [S / N] = 81 OR [S / N] = 82 OR [S / N] = 83 OR [ S / N] = 84 OR [S / N] = 85 OR [S / N] = 86 OR [S / N] = 87 OR [S / N] = 88 OR [S / N] = 89 OR [S / N] = 90 OR [S / N] = 91 OR [S / N] = 92 OR [S / N] = 93 OR [S / N] = 94 OR [S / N] = 95 OR [S / N] = 96 OR [S / N] = 97 OR [S / N] = 98 OR [S / N] = 99 OR [S / N] = 100 OR [S / N] = 101 OR [S / N] = 102 OR [S / N] = 103 OR [S / N] = 104 OR [S / N] = 105 OR [S / N] = 106 OR [S / N] = 107 OR [S / N] = 108 OR [ S / N] = 109或[S / N] = 110或[S / N] = 111或[S / N] = 112或[S / N] = 113或[S / N] = 114或[S / N] = 115 OR [S / N] = 116 OR [S / N] = 117 OR [S / N] = 118 OR [S / N] = 119 OR [S / N] = 120 OR [S / N] = 121或[S / N] = 122或[S / N] = 123或[S / N] = 124或[S / N] = 125或[S / N] = 126或[S / N] = 127 OR [S / N] = 128 OR [S / N] = 129 OR [S / N] = 130 OR [S / N] = 131 OR [S / N] = 132 OR [S / N] = 133 OR [ S / N] = 134 OR [S / N] = 135 OR [S / N] = 136 OR [S / N] = 137 OR [S / N] = 138 OR [S / N] = 139 OR [S / N] = 140 OR [S / N] = 141 OR [S / N] = 142 OR [S / N] = 143 OR [S / N] = 144 OR [S / N] = 145 OR [S / N] = 146或[S / N] = 147或[S / N] = 148或[S / N] = 149或[S / N] = 150或[S / N] = 151或[S / N] = 152 OR [S / N] = 153 OR [S / N] = 154 OR [S / N] = 155 OR [S / N. ] = 156 OR [S / N] = 157 OR [S / N] = 158 OR [S / N] = 159 OR [S / N] = 160 OR [S / N] = 161 OR [S / N] = 162 OR [S / N] = 163 OR [S / N] = 164 OR [S / N] = 165 OR [S / N] = 166 OR [S / N] = 167 OR [S / N] = 168 OR [S / N] = 169 OR [S / N] = 170 OR [S / N] = 171 OR [S / N] = 172 OR [S / N] = 173 OR [S / N] = 174 OR [S / N] = 175或[S / N] = 176或[S / N] = 177或[S / N] = 178或[S / N] = 179或[S / N] = 180或[S / N ] = 181 OR [S / N] = 182 OR [S / N] = 183 OR [S / N] = 184 OR [S / N] = 185 OR [S / N] = 186 OR [S / N] = 187 OR [S / N] = 188 OR [S / N] = 189 OR [S / N] = 190或[S / N] = 191 OR [S / N] = 192 OR [S / N] = 193 OR [S / N] = 194或[S / N] = 195或[S / N] = 196或[S / N] = 197或[S / N] = 198或[S / N] = 199或[S / N] = 200或[S / N] = 201或[S / N] = 202或[S / N] = 203或[S / N] = 204或[S / N] = 205或[S / N ] = 206 OR [S / N] = 207 OR [S / N] = 208 OR [S / N] = 209 OR [S / N] = 210 OR [S / N] = 211 OR [S / N] = 212 OR [S / N] = 213 OR [S / N] = 214 OR [S / N] = 215 OR [S / N] = 216 OR [S / N] = 217 OR [S / N] = 218 OR [S / N] = 219或[S / N] = 220或[S / N] = 221或[S / N] = 222或[S / N] = 223或[S / N] = 224或[S / N] = 225 OR [S / N] = 226 OR [S / N] = 227 OR [S / N] = 228 OR [S / N] = 229 OR [S / N] = 230 OR [S / N ] = 231 OR [S / N] = 232或[S / N] = 233 OR [S / N] = 234 OR [S / N] = 235 OR [S / N] = 236 OR [S / N] = 237 OR [S / N] = 238 OR [S / N] = 239或[S / N] = 240或[S / N] = 241或[S / N] = 242或[S / N] = 243或[S / N] = 244或[S / N] = 245 OR [S / N] = 246 OR [S / N] = 247 OR [S / N] = 248 OR [S / N] = 249 OR [S / N] = 250 OR [S / N] = 251 OR [ S / N] = 252 OR [S / N] = 253 OR [S / N] = 254 OR [S / N] = 255 OR [S / N] = 256 OR [S / N] = 257 OR [S / N] = 258 OR [S / N] = 259 OR [S / N] = 260 OR [S / N] = 261 OR [S / N] = 262 OR [S / N] = 263 OR [S / N] = 264 OR [S / N] = 265 OR [S / N] = 266 OR [S / N] = 267 OR [S / N] = 268 OR [S / N] = 269 OR [S / N] = 270 OR [S / N] = 271 OR [S / N] = 272 OR [S / N] = 273 OR [S / N] = 274 OR [S / N] = 275 OR [S / N] = 276 OR [ S / N] = 277 OR [S / N] = 278 OR [S / N] = 279 OR [S / N] = 280 OR [S / N] = 281 OR [S / N] = 282 OR [S / N] = 283 OR [S / N] = 284 OR [S / N] = 285 OR [S / N] = 286 OR [S / N] = 287 OR [S / N] = 288 OR [S / N] = 289 OR [S / N] = 290 OR [S / N] = 291 OR [S / N] = 292 OR [S / N] = 293 OR [S / N] = 294 OR [S / N] = 295 OR [S / N] = 296 OR [S / N] = 297 OR [S / N] = 298 OR [S / N] = 299 OR [S / N] = 300 OR [S / N] = 301 OR [ S / N] = 302或[S / N] = 303或[S / N] = 304或[S / N] = 305或[S / N] = 306或[S / N] = 307或[S / N] = 308 OR [S / N] = 309 OR [S. / N] = 310或[S / N] = 311或[S / N] = 312或[S / N] = 313或[S / N] = 314或[S / N] = 315或[S / N ] = 316 OR [S / N] = 317 OR [S / N] = 318 OR [S / N] = 319 OR [S / N] = 320 OR [S / N] = 321 OR [S / N] = 322 OR [S / N] = 323 OR [S / N] = 324 OR [S / N] = 325 OR [S / N] = 326 OR [S / N] = 327 OR [S / N] = 328 OR [S / N] = 329或[S / N] = 330或[S / N] = 331或[S / N] = 332或[S / N] = 333或[S / N] = 334或[S / N] = 335 OR [S / N] = 336 OR [S / N] = 337 OR [S / N] = 338 OR [S / N] = 339 OR [S / N] = 340 OR [S / N ] = 341 OR [S / N] = 342 OR [S / N] = 343 OR [S / N] = 344 OR [S / N] = 345 OR [S / N] = 346 OR [S / N] = 347或[S / N] = 348或[S / N] = 349或[S / N] = 350或[S / N] = 351或[S / N] = 352或[S / N] = 353或[S / N] = 354 OR [S / N] = 355 OR [S / N] = 356 OR [S / N] = 357 OR [S / N] = 358 OR [S / N] = 359 OR [S / N] = 360 OR [S / N] = 361 OR [S / N] = 362 OR [S / N] = 363 OR [S / N] = 364 OR [S / N] = 365 OR [S / N ] = 366 OR [S / N] = 367 OR [S / N] = 368 OR [S / N] = 369 OR [S / N] = 370 OR [S / N] = 371 OR [S / N] = 372 OR [S / N] = 373 OR [S / N] = 374 OR [S / N] = 375 OR [S / N] = 376 OR [S / N] = 377 OR [S / N] = 378 OR [S / N] = 379或[S / N] = 380或[S / N] = 381或[S / N] = 382或[S / N] = 383或[S / N] = 384或[S / N] = 385或[S / N] = 386或[ S / N] = 387 OR [S / N] = 388 OR [S / N] = 389 OR [S / N] = 390 OR [S / N] = 391 OR [S / N] = 392 OR [S / N] = 393 OR [S / N] = 394 OR [S / N] = 395 OR [S / N] = 396 OR [S / N] = 397 OR [S / N] = 398 OR [S / N] = 399或[S / N] = 400或[S / N] = 401或[S / N] = 402或[S / N] = 403或[S / N] = 404或[S / N] = 405 OR [S / N] = 406 OR [S / N] = 407 OR [S / N] = 408 OR [S / N] = 409 OR [S / N] = 410 OR [S / N] = 411 OR [ S / N] = 412或[S / N] = 413或[S / N] = 414或[S / N] = 415或[S / N] = 416或[S / N] = 417或[S / N] = 418 OR [S / N] = 419 OR [S / N] = 420 OR [S / N] = 421 OR [S / N] = 422 OR [S / N] = 423 OR [S / N] = 424 OR [S / N] = 425 OR [S / N] = 426 OR [S / N] = 427 OR [S / N] = 428 OR [S / N] = 429 OR [S / N] = 430 OR [S / N] = 431 OR [S / N] = 432 OR [S / N] = 433 OR [S / N] = 434 OR [S / N] = 435 OR [S / N] = 436 OR [ S / N] = 437或[S / N] = 438或[S / N] = 439或[S / N] = 440或[S / N] = 441或[S / N] = 442或[S / N] = 443 OR [S / N] = 444 OR [S / N] = 445 OR [S / N] = 446 OR [S / N] = 447 OR [S / N] = 448 OR [S / N] = 449 OR [S / N] = 450 OR [S / N] = 451 OR [S / N] = 452 OR [S / N] = 453 OR [S / N] = 454 OR [S / N] = 455 OR [S / N] = 456 OR [S / N] = 457 OR [S / N] = 458 OR [S / N] = 459 OR [S / N] = 460 OR [S / N] = 461 OR [ S / N] = 462或[S / N] = 463 OR [S / N] = 464或[S / N] = 465或[S / N] = 466或[S / N] = 467或[S / N] = 468或[S / N] = 469或[S / N] = 470 OR [S / N] = 471 OR [S / N] = 472 OR [S / N] = 473 OR [S / N] = 474 OR [S / N] = 475 OR [S / N ] = 476 OR [S / N] = 477 OR [S / N] = 478 OR [S / N] = 479 OR [S / N] = 480 OR [S / N] = 481 OR [S / N] = 482或[S / N] = 483或[S / N] = 484或[S / N] = 485或[S / N] = 486或[S / N] = 487或[S / N] = 488或[S / N] = 489或[S / N] = 490或[S / N] = 491或[S / N] = 492或[S / N] = 493或[S / N] = 494或[S / N] = 495或[S / N] = 496或[S / N] = 497或[S / N] = 498或[S / N] = 499或[S / N] = 500或[S / N ] = 501 OR [S / N] = 502 OR [S / N] = 503 OR [S / N] = 504 OR [S / N] = 505 OR [S / N] = 506 OR [S / N] = 507或[S / N] = 508或[S / N] = 509或[S / N] = 510或[S / N] = 511或[S / N] = 512或[S / N] = 513或[S / N] = 514或[S / N] = 515或[S / N] = 516或[S / N] = 517或[S / N] = 518或[S / N] = 519或[S / N] = 520或[S / N] = 521或[S / N] = 522或[S / N] = 523或[S / N] = 524或[S / N] = 525或[S / N ] = 526 OR [S / N] = 527 OR [S / N] = 528 OR [S / N] = 529 OR [S / N] = 530 OR [S / N] = 531 OR [S / N] = 532 OR [S / N] = 533 OR [S / N] = 534 OR [S / N] = 535 OR [S / N] = 536 OR [S / N] = 537 OR [S / N] = 538 OR [S / N] = 539或[S / N] = 540 OR [S / N] = 541或[S / N] = 542或[S / N] = 543或[S / N] = 544或[S / N] = 545或[S / N] = 546或[S / N] = 547 OR [S / N] = 548 OR [S / N] = 549 OR [S / N] = 550 OR [S / N] = 551 OR [S / N] = 552 OR [S / N ] = 553 OR [S / N] = 554 OR [S / N] = 555 OR [S / N] = 556 OR [S / N] = 557 OR [S / N] = 558 OR [S / N] = 559或[S / N] = 560或[S / N] = 561或[S / N] = 562或[S / N] = 563或[S / N] = 564或[S / N] = 565或[S / N] = 566或[S / N] = 567或[S / N] = 568或[S / N] = 569或[S / N] = 570或[S / N] = 571或[S / N] = 572 OR [S / N] = 573 OR [S / N] = 574 OR [S / N] = 575 OR [S / N] = 576 OR [S / N] = 577 OR [S / N ] = 578 OR [S / N] = 579 OR [S / N] = 580 OR [S / N] = 581 OR [S / N] = 582 OR [S / N] = 583 OR [S / N] = 584或[S / N] = 585或[S / N] = 586或[S / N] = 587或[S / N] = 588或[S / N] = 589或[S / N] = 590或[S / N] = 591或[S / N] = 592或[S / N] = 593或[S / N] = 594或[S / N] = 595或[S / N] = 596或[S / N] = 597 OR [S / N] = 598 OR [S / N] = 599 OR [S / N] = 600 OR [S / N] = 601 OR [S / N] = 602 OR [S / N ] = 603 OR [S / N] = 604 OR [S / N] = 605 OR [S / N] = 606 OR [S / N] = 607 OR [S / N] = 608 OR [S / N] = 609或[S / N] = 610或[S / N] = 611或[S / N] = 612或[S / N] = 613或[S / N] = 614或[S / N] = 615或[S / N] = 616或[S / N] = 617 O. R [S / N] = 618或[S / N] = 619)AND([过程或计量] ='过程')

此查询会根据用户在列表框中的选择自动形成。 请帮我解决错误。

1 个答案:

答案 0 :(得分:0)

建议通过记录集运行大型查询,而不是像表查询表一样。 要了解IN运算符,请参阅this

这是如何构建和运行查询的示例:

Sub BuildAndRun_Sane_Query()

' Create IN_string:
Dim SN, S_In As String, s_query  As String
For Each SN In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) ' Define your input range
    S_In = S_In & IIf(S_In = "", "", ",") & "'" & SN & "'"
Next
S_In = "(" & S_In & ")"

s_query = "SELECT [S/N],[Process or Metrology] FROM [MIMO Masterfile$] WHERE [S/N] IN " & S_In
s_conn = "ODBC;DSN=AnyODBCName" ' Define your connection string

'Execute the query on sheet "Output"
Query_via_Recordset Sheets("Output"), s_query, s_conn

End Sub

要查看excel工作簿中使用的连接字符串,请转到选项卡数据,按钮连接,打开连接属性,在定义中,您将看到连接字符串。

Sub Query_via_Recordset(sh As Worksheet, s_cmd As String, s_conn As String)
Dim rst As New ADODB.Recordset, s_Header As String, l_col As Long
sh.Cells.ClearContents
rst.Open s_cmd, s_conn
'Query headers:
l_col = 1
For Each s_Header In rst.Fields
    sh.Cells(1, l_col) = v_ariant.Name
    l_col = l_col + 1
Next
'Query Data:
sh.Range("A2").CopyFromRecordset rst
rst.Close
End Sub