Excel SQL使用的两种方法

详细可参考:http://club.excelhome.net/thread-859194-1-1.html

1、需要引用Microsoft ActiveX Data Object...

 
 
   
   
   
   
  1. Sub GetQuery()  
  2. Dim cn As ADODB.Connection  
  3. Set cn = New ADODB.Connection  
  4. With cn  
  5. .Provider = "Microsoft.Jet.OLEDB.4.0" 
  6. .ConnectionString = "Data Source=" & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & ";" & _  
  7. "Extended Properties=Excel 8.0;" 
  8. .Open  
  9. End With 
  10. Dim rs As ADODB.Recordset  
  11. Set rs = New ADODB.Recordset  
  12. rs.ActiveConnection = cn  
  13. 'Create sql string  
  14. sql_str = "select * from [sheet2$] " 'where field1='condition'"  
  15. rs.Open sql_str  
  16. ThisWorkbook.Sheets(3).[a2].CopyFromRecordset cn.Execute(sql_str)  
  17. ThisWorkbook.Sheets(1).[m1].CopyFromRecordset rs  
  18. rs.Close  
  19. cn.Close  
  20. End Sub 

 

2、不需要引用Microsoft ActiveX Data Object...

 

 
 
   
   
   
   
  1. '在Excel中使用SQL语句总结-1:  
  2. '************************************        标准SQL查找代码:       *********************************************************  
  3. Sub SQL_Excel_2003_2007()  
  4. 'On Error Resume Next       '如果出现错误,忽略,然后执行下一行代码。  
  5. Application.ScreenUpdating = False '关闭屏幕刷新,成对出现,提高速度  
  6. Application.DisplayAlerts = False '关闭提示,,成对出现,避免出现提示框  
  7. '---------------------------------------   参数声明部分  ------------------- ------------------- -------------------  
  8.     Dim cnn, SQL$   '定义数据库连接和SQL语句  
  9.     Set cnn = CreateObject("adodb.connection")  '创建数据库连接  
  10.     Set rs = CreateObject("adodb.recordset")   '创建一个数据集保存数据  
  11.      
  12. '---------------------------------------   设置数据库连接  ------------------- ------------------- -------------------  
  13.     cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName  
  14.       
  15.        '将EXCEL文件作为数据库连接,实际并不打开EXCEL,  
  16.        'Excel2003版本:cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.Path & "\数据表.xls"  
  17.        'Excel2007版本:cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.Path & "\数据表.xlsx"  
  18.        '带参数的连接字符串:cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;HDR=yes;IMEX=2';data source=" & ThisWorkbook.FullName  
  19.        '    HDR=Yes   代表 Excel 档中的工作表第一行是标题栏,标题只能是一行,不能使多行,或者合并的单元格。  
  20.        '    HDR=no     工作表第一行就是数据了,沒有标题栏,不使用栏位,则栏位就以f代表,第一列列名就是:f1,第二列列名:f2  
  21.        '    IMEX 汇入模式  0 只读  1 只写   2 可读写  
  22.        '              当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。  
  23.        '              当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。  
  24.        '              当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。  
  25.        'Data Source  存储查询数据来源的工作薄名称,数据库路径为:数据表.xls  或本表:& ThisWorkbook.FullName  
  26.          
  27. '---------------------------------------   设置SQL语句  ------------------- ------------------- -------------------  
  28.   SQL = "select * from  [数据表_1$A1:G100] where 姓名='马拉多纳'" 
  29.     
  30.        '在Sheet1表内查找列名为:姓名 中所有:马拉多纳 的数据。  
  31.        '[XXX$A2:G100]的中括号和$为特别数据表标示符,XXX为Sheet名,A2:G100是选取的区域。  
  32.        'SQL语句是一个字符串,双引号开头和结尾,列名两边无单引号,表示一个字符串:‘马拉多纳’,要用单引号扩上,数字就不用了。  
  33.        'Nu=36:  AA="马拉多纳":   set  Sh=Sheet1:  SQL = "select * from  [" & Sh.name & “$] where 姓名=‘” & AA & “’  and  年龄=Nu"  
  34.          
  35. '---------------------------------------   SQL结果处理  ------------------- ------------------- -------------------  
  36.    Set rs = cnn.Execute(SQL) '将SQL语句获得的数据传递给数据集  
  37.    Sheets("结果").Cells.ClearContents       '清理保存数据的区域  
  38.    Sheets("结果").Range("a2").CopyFromRecordset rs    '将数据集粘贴到Excel中,左上角为A2,无列名。  
  39.    'Sheets("结果").Range("b2").CopyFromRecordset cnn.Execute(SQL)  '可以不声明Y,直接使用  
  40.    cnn.Close     '关闭数据库连接  
  41.    Set cnn = Nothing    '将CNN从内存中删除。  
  42. '--------------------------------------- ------------------------ ------------------- -------------------  
  43. Application.ScreenUpdating = True 
  44. Application.DisplayAlerts = True 
  45. End Sub   '这就是最简单的EXCEL中SQL的应用 ,其他的都是SQL的运用了 

获取字段名的代码:

 

 
 
   
   
   
   
  1.  Dim Strsql$, Cn As Object 
  2. Set yy= CreateObject("adodb.recordset")  
  3. Set Cn = CreateObject("Adodb.Connection")  
  4.  
  5.  
  6.    Sql = "SELECT 级别,A组,特别组 from [数据$] where  级别='" & NianJ & "'" 
  7.               Set yy = Cn.Execute(Sql)  
  8.               For L = 0 To yy.Fields.Count - 1  
  9.                   sh.Cells(1, L + 2) = yy.Fields(L).Name  
  10.                Next L 

你可能感兴趣的:(vba,sql,vba,excel,数据库,activex)