VBA&;SQL如何在excel中根据范围选择特定值?

VBA&;SQL如何在excel中根据范围选择特定值?,sql,excel,vba,Sql,Excel,Vba,我是vba(excel)和oracle数据库方面的新手。我试图寻找一些信息,但找不到任何适合我的 我想写一个查询,只返回有特定值的行。 我的查询如下所示: SQLStr=SQLStr=“从NGKH中选择NGKHFHCD、NGKHFNAM、NGKHGNKA、NGKHSZIC、NGKHMTRC、NGKHSNZC、NGKHGCHC、NGKHKKKS、NGKHKTKS NGKHFHCD订购“ 但是我想要的东西是这样的SQLStr=“选择NGKHFHCD,NGKHFNAM,NGKHGNKA,NGKHSZI

我是vba(excel)和oracle数据库方面的新手。我试图寻找一些信息,但找不到任何适合我的

我想写一个查询,只返回有特定值的行。 我的查询如下所示:
SQLStr=SQLStr=“从NGKH中选择NGKHFHCD、NGKHFNAM、NGKHGNKA、NGKHSZIC、NGKHMTRC、NGKHSNZC、NGKHGCHC、NGKHKKKS、NGKHKTKS NGKHFHCD订购“

但是我想要的东西是这样的
SQLStr=“选择NGKHFHCD,NGKHFNAM,NGKHGNKA,NGKHSZIC,NGKHMTRC,NGKHSNZC,NGKHGCHC,NGKHKKKS,NGKHKTKS来自NGKH 其中NGKHFHCD=SHeet1(A2:A)“

我只是不想从oracle中取出整个表,因为这需要很多时间,所以我想也许我只能从该表返回特定的行。 此外,如果表中没有搜索到的值,我希望以某种方式对其进行标记

有没有办法解决这个问题

我的代码:

Sub OracleLocalConnect()
  Dim RecordSet As New ADODB.RecordSet
  Dim con As New ADODB.Connection
  Dim ExcelRange As Range
  Dim SQLStr As String
  
  Dim ws As Worksheet

  con.ConnectionString = "Provider=OraOLEDB.Oracle.1;User ID=***;Password=****;Data Source=*****;"
  
  con.Open
  Set RecordSet = CreateObject("ADODB.Recordset")

  SQLStr = "SELECT GNKHFHCD, GNKHFNAM, GNKHGNKA, GNKHSZIC, GNKHMTRC,  GNKHSNZC, GNKHGCHC, GNKHKKKS, GNKHKTKS  FROM GNKH ORDER BY GNKHFHCD"  


  RecordSet.Open SQLStr, con, adOpenStatic, adLockReadOnly
  
  Set ws = ActiveWorkbook.Sheets("Prices")
  Set ExcelRange = ws.Range("A2")
  ExcelRange.CopyFromRecordset RecordSet
  
  RecordSet.Close
  con.Close
Exit Sub
Exit Sub

End Sub

未经测试,但这很接近:

子OracleLocalConnect()
将记录集设置为新ADODB.RecordSet
Dim con作为新的ADODB连接
将范围作为范围
作为字符串的Dim SQLStr
将ws设置为工作表
con.ConnectionString=“Provider=OraOLEDB.Oracle.1;用户ID=***;密码=***;数据源=****;”
未结
Set RecordSet=CreateObject(“ADODB.RecordSet”)
SQLStr=“选择GNKHFHCD、GNKHFNAM、GNKHGNKA、GNKHSZIC、GNKHMTRC,”_
“GNKHSNZC、GNKHGCC、GNKKKKS、GNKKKKKS来自GNKH”&_
“where”和incluse(表1.范围(“A2:A1000”),“GNKHFHCD”,正确)和_
“GNKHFHCD订购”
记录集。打开SQLStr、con、adOpenStatic、adLockReadOnly
设置ws=ActiveWorkbook.Sheets(“价格”)
设置ExcelRange=ws.Range(“A2”)
ExcelRange.CopyFromRecordset记录集
记录集,关闭
结案
端接头
'为Oracle查询创建in子句
函数incluse(rng作为范围,colName作为字符串,可选引用为Boolean=False)
'https://stackoverflow.com/questions/400255/how-to-put-more-than-1000-values-into-an-oracle-in-clause
尺寸s作为字符串,c作为范围,qt作为字符串,sep作为字符串
qt=IIf(引用“,”)
sep=“”
()
对于每个c In rng.单元格
如果Len(c.值)>0,则
s=s&sep&vbLf&“(999,&qt&c.值和qt&”)
sep=“,”在第一次通过后添加逗号
如果结束
下一个c
封闭=s&“.”
端函数

要查询单个值吗?值是数字还是文本?它是文本,将是多个值。(整个范围,例如A2:A1000,因此它将是999个不同的值)大约有多少个值(十/百/千?@TimWilliams它将是数千个值与Oracle这是一个有点问题-请参见示例:它可以工作。多亏了这段代码,我才能够从oracle中取出10万行。谢谢!