这个问题,系列文的第1章咱们就讲过了,然而后台总是收到类似的提问,所以今天就再集中说一次。
第一种是MS Query法,很少用,越来越少用,略。
在Excel的【数据】选项卡下单击【现有链接】命令,在弹出的【现有链接】对话框中,单击【浏览更多】,选取目标文件后,依次单击【确定】,得到下面的【导入数据】对话框。单击【属性】按钮,打开【连接属性】对话框,切换到【定义】选项卡,即可在【命令文本】编辑框中编写SQL语句,并【确定】执行。如下图所示。这种方法通常搭配数据透视表(图一的显示方式选择【数据透视表】),此时SQL获取的记录集会自动成为透视表的缓存数据源。此外也可以搭配Power Pivot(高级版本Excel(2013及以上)勾选图一的【将此数据添加到数据模型】)。对于没有VBA基础的朋友来说,通常推荐这种方法,只要会写SQL查询语句,就可以直接使用了。和第2种方法相比较,该法的优点在系列文里已经说过很多了,其实最重要的其实就两点,掰手指头,啊,我的手指头好白——想念故乡的雪。1▼
借助VBA,SQL语句可以使用变量,更加灵活自由。2▼
借助ADO,对数据,SQL除了查询以外,还可以增改删。对于VBA代码连面都不熟的朋友而言,是不是就不能使用VBA执行SQL了呢?Sub ByADO_SQL()
Dim cnADO As Object
Dim rsADO As Object
Dim strSQL As String
Dim i As Long
Set cnADO = CreateObject('ADODB.Connection')
Set rsADO = CreateObject('ADODB.Recordset')
cnADO.Open 'Provider=Microsoft.ACE.OLEDB.12.0;' _
& 'Extended Properties=Excel 12.0;' _
& 'Data Source=' & ThisWorkbook.FullName
strSQL = 'SELECT * FROM [A$] ' '//此处写入SQL代码
Set rsADO = cnADO.Execute(strSQL)
Cells.ClearContents
Range('A1').CopyFromRecordset rsADO
rsADO.Close
cnADO.Close
Set cnADO = Nothing
Set rsADO = Nothing
End Sub
在以上VBA代码中输入的SQL语句,双引号应改为单引号,这是因为SQL语句作为字符串,外围已经存在一对双引号了。