Excel VBA – 使用Workfsheet单元格范围运行SQL查询

我正在创build一个简单的电子表格,它从工作表“input”中获取一个ID数组,查询Oracle数据库,只查询与数组中ID匹配的logging,并将结果输出到工作表“output”。

到目前为止,如果我的数组只包含一个ID(通过指定单个单元格范围),那么我的VBA将工作,并且所有事情都会以出现在工作表“output”中的Oracle数据库的所需输出完成。 美好时光。

我现在遇到的问题是,我想在工作表“input”中指定一个范围的ID(任何不超过5000),以包含在我的数组中,并将该数组传递给Oracle数据库,以便为它find的每个ID返回数据我不期望所有的ID存在)。 每当我尝试这个,我似乎得到“错误13types不匹配”的错误…不好的时候。

我的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 

任何人都可以阐明我缺less的东西吗? 我试图解决types不匹配的问题,通过设置工作表“input”列中的“numberformat”为“0”,但没有帮助。 我也认为我可能必须有一个循环遍历每个logging,但我还没有到那个阶段,因为这种types不匹配的事情…

感谢大家提前给予的帮助!

问候马特

ID需要用逗号分隔

InputIDs = getIDs(表格(“input”)。范围(“A2:A10”))

 Function getIDs(rng As Range) Dim c As Range Dim s As String For Each c In rng s = s & c.Value & "," Next getIDs = Left(s, Len(s) - 1) End Function