这个问题,系列文的第1章我们就讲过了,然而后台总是收到类似的提问,所以今天就再集中说一次。 一般有三种方法。 一种是MSQuery法,不常用,省略。 一种是OLEDB法。具体过程是,单击Excel【数据】选项卡下的【现有链接】,在弹出的【现有链接】对话框中,单击【浏览更多】,选取目标文件后,依次【确定】,得到下面的【导入数据】对话框。 图一 然后单击【属性】按钮,得到【连接属性】对话框,再单击【定义(D)】选项卡,即可在【命令文本】编辑框中输入SQL语句,并【确定】执行。如下图所示。 这种方法通常搭配数据透视表(图一的显示方式选择【数据透视表(P)】),此时SQL获取的记录集会自动成为透视表的数据源。 此外也可以搭配PowerPivot(高级版本Excel勾选图一的【将此数据添加到数据模型】)。 对于没有VBA基础的朋友来说,通常推荐这种方法,只要会写SQL查询语句,就可以直接使用了。 下面是一个操作过程示例动画: 我们分享的系列文章主要是使用的第3种方法,也就是VBAADOSQL。 和第2种方法相比较,该法的优点系列文里已经说过很多了,这里也就不再细说。最重要的其实就两点,掰手指头,啊,我的手指头好白想念故乡的雪。 1,借助VBA,SQL语句可以使用变量等。 2,借助ADO,对数据,除了查,还可以增改删。 对于VBA代码连面都不熟的朋友而言,是不是就不能使用VBA执行SQL了呢? 并不是。 VBA执行SQL语句有一个固定的套路。 哪怕你连VBA代码一句都看不懂也没关系,只要知道在哪里写入SQL语句就可以了。 也就是下列代码字体加粗的部分。 代码如下: SubDoSqlExecute() DimcnnAsObject,rstAsObject DimMypathAsString,StrcnnAsString,SqlAsString DimiAsLong SetcnnCreateObject(adodb。) MypathThisWorkbook。FullName IfApplication。V12Then SProviderMicrosoft。jet。OLEDB。4。0;ExtendedPropertiesExcel8。0;DataSMypath Else SProviderMicrosoft。ACE。OLEDB。12。0;ExtendedPropertiesExcel12。0;DataSMypath EndIf cnn。OpenStrcnn SSELECTFROM〔学生表〕请在此处写入你的SQL代码 Setrstcnn。Execute(Sql) Cells。ClearContents Fori0Torst。Fields。Count1 Cells(1,i1)rst。Fields(i)。Name Next Range(a2)。CopyFromR cnn。Close SetcnnNothing EndSub