0

以下のスクリプトは、昇順で日付値を持たない行を見つけるために形成されました.しかし、コードを実行するERRORと、No value given one or more required parameters

コード

Option Explicit

Dim conn, cmd, rs
Dim clauses(36), i
Dim xlApp, xlBook

Set conn = CreateObject("ADODB.Connection")
With conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=""D:\WIPData\AravoMacro\Finalscripts\GE_Wing_To_Wing_Report.xlsx"";" & _
    "Extended Properties=""Excel 12.0;HDR=Yes"""
.Open
End With

For i = 0 To 36
clauses(i) = "[Task" & i + 1 & " Start Date] < [Task" & i + 2 & " Start Date]"
Next

Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = "SELECT * FROM [GEWingToWingMay25$] WHERE " & Join(clauses, " OR ")
cmd.ActiveConnection = conn
Set rs = cmd.Execute

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add
xlBook.Sheets(1).Range("A1").CopyFromRecordset cmd.Execute

誰か助けてくれませんか?

編集

SQL テキストのスクリーンショット

ありがとう、

編集1

今、私はこれを試しました

      Set cmd = CreateObject("ADODB.Command")
 'cmd.CommandText = "SELECT * FROM [GEWingToWingMay25$] WHERE " & Join(clauses, " OR ") 
  cmd.CommandText = "SELECT * FROM [GEWingToWingMay25$] WHERE " & "#2012/10/01# > #2012/10/015#"
  MsgBox(cmd.CommandText)
  cmd.ActiveConnection = conn
  Set rs = cmd.Execute

エラーの取得class doesn't support Automation

スナップショット2

Excel テーブル スナップ

EDIT3

以下のように更新しました:

      cmd.CommandText = "SELECT * FROM [GEWingToWingMay25$] WHERE #" &     CDate([Task1StartDate]) & "# > #" & CDate([Task2StartDate]) _
 "# > #" & CDate([Task3 Start Date]) & "# > #" & CDate([Task4 Start Date]) _
 "# > #" & CDate([Task5 Start Date]) & "# > #" & CDate([Task6 Start Date]) _
 "# > #" & CDate([Task7 Start Date]) & "# > #" & CDate([Task8 Start Date]) _
 "# > #" & CDate([Task9 Start Date]) & "# > #" & CDate([Task10 Start Date]) _
 "# > #" & CDate([Task11 Start Date]) & "# > #" & CDate([Task12 Start Date]) _
 "# > #" & CDate([Task13 Start Date]) & "# > #" & CDate([Task14 Start Date]) _
 "# > #" & CDate([Task15 Start Date]) & "# > #" & CDate([Task16 Start Date]) _
 "# > #" & CDate([Task17 Start Date]) & "# > #" & CDate([Task18 Start Date]) _
 "# > #" & CDate([Task19 Start Date]) & "# > #" & CDate([Task20 Start Date]) _
 "# > #" & CDate([Task21 Start Date]) & "# > #" & CDate([Task22 Start Date]) _
 "# > #" & CDate([Task23 Start Date]) & "# > #" & CDate([Task24 Start Date]) _
 "# > #" & CDate([Task25 Start Date]) & "# > #" & CDate([Task26 Start Date]) _
 "# > #" & CDate([Task27 Start Date]) & "# > #" & CDate([Task28 Start Date]) _
 "# > #" & CDate([Task29 Start Date]) & "# > #" & CDate([Task30 Start Date]) _
 "# > #" & CDate([Task31 Start Date]) & "# > #" & CDate([Task32 Start Date]) _
 "# > #" & CDate([Task33 Start Date]) & "# > #" & CDate([Task34 Start Date]) _
 "# > #" & CDate([Task35 Start Date]) & "# > #" & CDate([Task36 Start Date]) & "#;"

EDIT4 Googleのリンクが示唆しているように、HDRはいに設定されている場合、Excelシートにはフィールドレベルのラベルとして最初の行が必要であり、私のExcelにはそれがあります。しかし、なぜエラーが発生するのですか?

更新されたコード

    Option Explicit

    Dim conn, cmd, rs
    Dim clauses(34), i
    Dim xlApp, xlBook
    Dim tempDate,LenDate


    Set conn = CreateObject("ADODB.Connection")
    With conn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=""D:\AravoVB\GE_Wing_To_Wing_Report.xlsx"";" & _
        "Extended Properties=""Excel 12.0;HDR=Yes"""
    .Open
    End With

    For i = 0 To 34
    clauses(i) = "[Task" & i + 1 & " Start Date] > [Task" & i + 2 & " Start Date]"
    tempDate=tempDate & "[Task" & i + 1 & " Start Date],"
    Next

    Set cmd = CreateObject("ADODB.Command")
    cmd.CommandText = "SELECT " & tempDate &" FROM [GEWingToWingMay25$] WHERE [Business Process ID] NOT IN (" & "SELECT [Business Process ID] FROM [GEWingToWingMay25$] WHERE " & Join(clauses, " AND ") & ")"
    MsgBox(cmd.CommandText)
    cmd.ActiveConnection = conn 
    Set rs = cmd.Execute

    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
    Set xlBook = xlApp.Workbooks.Add
    xlBook.Sheets(1).Range("A1").CopyFromRecordset cmd.Execute

現在、すべてのstart date行に値がないため、IN演算子内のSQLクエリは値を返さず、外側のSQLクエリはすべてのデータを返します.SQLクエリ句Null valuesの評価内でそのようなものを無視する方法はありますか. where何か案が?

4

2 に答える 2

0

問題をデバッグする手順:

  1. Watch Windowによってどのようなデータが生成されるかを確認し[Task" & i + 1 & " Start Date]ます。それはあなたのテーブルの列であるはずです。ただし、適切な日付が返されないようです。順番が整ったら、次のステップに進むことができます。

  2. プレーンな SQL クエリ文字列を送信して、実行されるかどうかをテストしてみてください。たとえば、私のコメントによると。


編集:

テーブルフィールドを構築する方法は見栄えがよくありません...

"SELECT * FROM [GEWingToWingMay25$] WHERE [Task12 Start Date] > [Task13StartDate];"

クエリ文字列を終了するセミコロンを忘れないでください。

これをすべてコメントに入れたいと思います。とにかく試してみて、私たちに知らせてください。上記の行は単なるサンプルです。

于 2012-12-21T14:46:33.197 に答える
0

別のアプローチを取る必要があると思います。この関数を作成し、Excel で新しいモジュールを作成して、これを追加します。

Public Function InSequence()

Dim dtOld   As Date
Dim dtNew   As Date
Dim i       As Long
Dim flg     As Boolean

    flg = True
    i = 2

    Do Until Cells(ActiveCell.Row, i) & "" = ""
        If InStr(Cells(1, i), "Start Date") > 0 Then
            dtOld = IIf(dtNew = 0, Cells(ActiveCell.Row, i), dtNew)
            dtNew = Cells(ActiveCell.Row, i)
            If dtNew < dtOld Then flg = False
        End If
        i = i + 1
    Loop

    InSequence = flg

End Function

次に、データシートで、列 A の前に列を挿入し、次のように関数を呼び出します。

=InSequence()

その行の日付が連続している場合は true を返し、そうでない場合は false を返します。

于 2012-12-21T16:21:31.010 に答える