ワークシート「入力」からIDの配列を取り出し、配列内のIDと一致するレコードのみを要求するOracleデータベースに問い合せ、結果をワークシート「出力」に出力します。Excel VBA - ワークシート・セル範囲を使用してSQL問合せを実行
これまでのところ、私の配列には単一のIDのみが含まれていて(単一のセル範囲を指定するだけで)、VBAが動作し、ワークシート「出力」に表示されるOracleデータベースの出力がすべて完了しました。良い時代。
私が今問題を抱えているのは、ワークシートの「入力」にIDの範囲(約5000まで)を指定して、自分の配列に含め、その配列をOracleデータベースに渡してそれぞれのデータを返すことですIDが見つかりました(私はすべてのIDが存在するとは思わない)。私がこれを試してみると、 "エラー13タイプミスマッチ"のエラーが出るようです...悪い時です。
私のVBAコードは次のとおりです。
Dim OracleConnection As ADODB.Connection
Dim MosaicRecordSet As ADODB.RecordSet
Dim SQLQuery As String
Dim DBConnect As String
Dim count As String
Dim strbody As String
Dim Exclude As String
Dim i As Integer
Dim Rec As RecordSet
Dim InputIDs As Variant
Set OracleConnection = New ADODB.Connection
DBConnect = "Provider=msdaora;Data Source=MOSREP;User ID=***;Password=***;"
OracleConnection.Open DBConnect
' Clear Output Sheet Down
Sheets("Output").Select
Range("A2:F10000").Clear
' Set Input Range
Sheets("Input").Columns("A:A").NumberFormat = "0"
InputIDs = Sheets("Input").Range("A2:A10").Value
' SQL Query
SQLQuery = "select DMP.PERSON_ID, DMP.FULL_NAME, DMP.DATE_OF_BIRTH, DMA.ADDRESS, DMA.ADDRESS_TYPE, DMA.IS_DISPLAY_ADDRESS " & _
"from DM_PERSONS DMP " & _
"join DM_ADDRESSES DMA " & _
"on DMA.PERSON_ID=DMP.PERSON_ID " & _
"where DMP.PERSON_ID in (" & InputIDs & ")"
Set MosaicRecordSet = OracleConnection.Execute(SQLQuery)
Sheets("Output").Range("A2").CopyFromRecordset MosaicRecordSet
' Change DOB Format
Sheets("Output").Columns("C:C").NumberFormat = "dd/mm/yyyy"
' Set Left Alignment
Sheets("Output").Columns("A:Z").HorizontalAlignment = xlHAlignLeft
Range("A1").Select
OracleConnection.Close
Set MosaicRecordSet = Nothing
Set OracleConnection = Nothing
ActiveWorkbook.Save
誰もが私が行方不明です何に光を当てることができますか?私はワークシート "入力"の列の 'numberformat'を "0"に設定することによって型の不一致の問題を解決しようとしましたが、それは役に立たなかった。私はまた、各レコードを繰り返し処理するループが必要かもしれないと思っていましたが、このタイプミスマッチのためにまだこの段階には達していません...
おかげさまで皆様のご協力をいただきました!
よろしく マット
バリアント配列をクエリの引数として渡すことはできません。 IDをカンマで区切って文字列にする必要があります。 – Kyle
カイルさん、ありがとうございました。下記のトーマスと一緒にお付き合いいただきありがとうございました。あなたが説明するまで、私は変種配列にコンマ区切り文字が含まれていないことに気づいていませんでした。 – mhammonde