VBA Excel: 学习案例——利用VBA与SQL筛选不匹配数据到Sheet2

4星 · 超过85%的资源 需积分: 50 47 下载量 9 浏览量 更新于2024-12-24 1 收藏 50KB DOC 举报
本篇文档提供了一个关于如何使用Excel VBA编写SQL查询并将结果复制到其他工作表的示例。首先,我们了解到作者自创了一套学习资料,用于演示如何利用VBA与Excel的数据进行交互。具体来说,作者的目标是从名为"SGMasterListSOOutanding090520_ZY.xls"的工作簿中的Master页(即数据表)中筛选出特定条件的数据。 1. **连接数据库与工作簿**: 在开始编程之前,VBA通过`cn.Open`命令使用Microsoft Jet OLEDB 4.0提供程序连接到Excel 8.0数据源。第一行代码设置连接字符串,其中包含了工作簿的完整路径。第二行代码与同一文件路径下的特定工作表(SGMasterListSOOutanding090520_ZY.xls)建立连接,注意这里的页名被引用为"[Master$]",表明它作为数据区域。 2. **SQL查询语句**: SQL语句的核心部分是`SELECT * FROM [Master$] WHERE left(ItemCode, 6) <> U_Cat1 & U_Cat2 & '-' & right(U_Cat3, 2)`。这个查询的目的是筛选出ItemCode字段的前六位与U_Cat1、U_Cat2组合(中间用"-"连接)以及U_Cat3后两位不匹配的所有行。`left`和`right`函数用于提取字符串的指定部分,`<>`表示不等于操作符。 3. **工作表操作**: 查询结果被复制到工作表"Sheet2"的A4单元格,`Sheets("Sheet2").[A4].CopyFromRecordset`这部分代码负责执行SQL查询并把结果数据插入到指定位置。`CopyFromRecordset`方法将查询结果集的内容复制到目标单元格。 4. **引用和初始化对象**: 开始VBA代码前,必须确保已经通过菜单栏的“工具”>“引用”加载了ADO(ActiveX Data Objects)类库,因为这段代码使用了ADO来处理数据库操作。 5. **数据库连接的关闭和释放**: 在完成数据处理后,`cn.Close`关闭数据库连接,`Set cn = Nothing`则是释放对象,以防止内存泄漏。 这段VBA代码提供了使用Excel VBA与SQL结合进行数据筛选和导出的具体实例,对于初学者理解如何在Excel中利用VBA进行高级数据分析具有参考价值。同时,它展示了如何利用ADO库连接Excel工作簿,执行SQL查询,并将结果应用于其他工作表。