VBA连接SQL执行查询与多Excel报表自动化生成

4星 · 超过85%的资源 需积分: 1 37 下载量 186 浏览量 更新于2024-10-02 收藏 4KB TXT 举报
"VBA宏代码用于实现与SQL Server数据库的连接,进行查询,并自动将查询结果导出到多个Excel报表中。代码中包含了日期处理、动态文件命名、数据清理以及记录集遍历等关键步骤。文件命名规则基于机构编码(在名为'shopid'的sheet页中)和当前日期,所有工作完成后,文档会自动关闭。" 在VBA编程环境中,这个宏主要实现了以下几个重要的知识点: 1. **日期处理**: - 使用`Year()`, `Month()`, `Day()`函数获取当前日期的年、月、日部分,并根据需要在月份和日期前添加零以确保始终为两位数。 - 将这些值组合成一个符合`yyyyMMdd`格式的字符串变量`zz_date`,用于文件命名。 2. **数据库连接**: - 定义了ADO连接字符串`strConn`,其中包含了数据库提供者、身份验证信息、数据库名称、服务器地址等关键参数。 - 使用`ADODB.Connection`对象`conn`打开数据库连接,并设置命令超时时间。 3. **SQL查询**: - 定义SQL查询语句`strSQL`,在这个例子中是简单的`SELECT * FROM ... ORDER BY`,可以根据实际需求修改。 - 使用`ADODB.Recordset`对象`ds`执行SQL查询并获取结果集。 4. **数据导出到Excel**: - 清空工作表`Sheet1`中的所有数据,为新的查询结果腾出空间。 - 遍历`Recordset`的字段,将字段名写入工作表的第一行,这有助于理解数据结构。 - 通过`Offset()`方法动态更新单元格内容,将记录集中的每一行数据写入Excel工作表。 5. **文件命名和导出**: - 从`shopid`工作表中获取机构编码,结合日期和预定义的文件主名称生成唯一的文件名。 - 导出数据时,创建多个Excel文件,每个文件对应不同的机构编码。 - 文件保存在当前活动工作簿的路径下,即`curPath`变量。 6. **自动化操作**: - 宏的运行可以通过快捷键Ctrl + P触发,提高工作效率。 - 所有处理完成后,文档会自动关闭,避免用户忘记关闭导致的数据丢失或意外修改。 7. **VBA对象模型**: - 使用了VBA中的`Sheets`, `Cells`, `Range`等对象来操作Excel工作表,`ADODB`库中的`Connection`, `Recordset`等对象来与数据库交互。 这段代码展示了VBA在自动化数据处理和报告生成中的强大能力,对于需要定期从数据库获取数据并生成报表的场景非常实用。开发者可以根据自己的实际需求调整SQL查询、文件命名规则以及数据处理逻辑。
2015-11-19 上传
1-1 利用DAO创建数据库和数据表 7 1-2 利用ADOX创建数据库和数据表: 8 1-3 利用SQL语句创建数据库和数据表 9 1-4 在已有的数据库中创建数据表(DAO) 10 1-5 在已有的数据库中创建数据表(ADOX) 12 1-6 在已有的数据库中创建数据表(SQL,Command对象) 13 1-7 在已有的数据库中创建数据表(SQL,Recordset对象) 13 1-8 利用Access对象创建数据库和数据表 14 1-8-1 不引用Access对象库而使用Access的有关对象、属性和方法 16 1-9 利用Access对象在已有的数据库中创建数据表 17 1-10 利用工作表数据创建数据表(ADOX) 18 1-11 利用工作表数据创建数据表(ADO+SQL) 21 1-12 利用工作表数据创建数据表(DAO) 23 1-13 利用已有的数据表创建新数据表(ADO) 25 1-14 利用已有的数据表创建新数据表(DAO) 27 1-15 利用已有的数据表创建新数据表(Access)(前绑定方法引用Access对象库) 28 2-1 检查数据表是否存在(ADO) 28 •实例2-2 检查数据表是否存在(ADOX) 32 •实例2-3 检查数据表是否存在(DAO) 33 •实例2-4 检查数据表是否存在(Access) 33 •实例2-5 获取数据库中所有表的名称和类型(ADO) 34 •实例2-6 获取数据库中所有表的名称和类型(ADOX) 35 •实例2-8 获取数据库中所有数据表名称(ADO) 36 •实例2-9 获取数据库中所有数据表名称(ADOX) 37 •实例2-10 获取数据库中所有数据表名称(DAO) 37 •实例2-11 获取数据库中所有数据表名称(Access) 38 •实例2-12 检查某字段是否存在(ADO) 39 •实例2-13 检查某字段是否存在(ADOX) 40 •实例2-14 检查某字段是否存在(DAO) 41 •实例2-15 检查某字段是否存在(Access) 41 •实例2-16 获取数据库中某数据表的所有字段信息(ADO) 42 •实例2-17 获取数据库中某数据表的所有字段信息(ADOX) 44 •实例2-18 获取数据库中某数据表的所有字段信息(DAO) 45 •实例2-19 获取数据库中某数据表的所有字段信息(Access) 47 •实例2-20 获取数据库的所有查询信息(ADOX) 48 •实例2-21 获取数据库的所有查询信息(DAO) 49 •实例2-22 获取数据库的模式信息(openschema) 50 •实例2-23 获取表的创建日期和最后更新日期(ADOX) 51 •实例2-24 获取表的创建日期和最后更新日期(DAO) 52 •实例3-1 将数据库记录数据全部导入到excel工作表(ADO,之一) 53 •实例3-2 将数据库记录数据全部导入到excel工作表(ADO,之二) 54 •实例3-3 将数据库记录数据全部导入到Excel工作表(ADO,之三) 55 •实例3-4 将数据库记录数据全部导入到Excel工作表(DAO,之一) 56 •实例3-5 将数据库记录数据全部导入到Excel工作表(DAO,之二) 57 •实例3-6 将数据库记录数据全部导入到Excel工作表(QueryTable集合) 58 •实例3-7 将数据库的某些字段的记录数据导入到Excel工作表(ADO) 59 •实例3-8 将数据库的某些字段记录数据导入到Excel工作表(DAO) 60 •实例3-9 查询前面的若干条记录(全部字段)(TOP) 61 •实例3-10 查询前面的若干条记录(部分字段)(TOP) 62 •实例3-11 查询不重复的字段记录(DISTINCT) 63 •实例3-12 利用Like运算符进行模糊查询 64 •实例3-13 查询某一区间内的记录(BETWEEN) 65 •实例3-14 查询存在于某个集合里面的记录(IN) 67 •实例3-15 将查询结果进行排序(ORDER BY) 68 •实例3-16 进行复杂条件的查询(WHERE) 69 •实例3-17 利用合计函数进行查询(查询最大值和最小值) 70 •实例3-18 利用合计函数进行查询(查询合计值和平均值) 71 •实例3-19 将一个查询结果作为查询条件进行查询 72 •实例3-20 将查询结果进行分组(GROUP BY) 73 •实例3-21 查询结果进行分组(HAVING) 74 •实例3-22 通过计算列进行查询 76 •实例3-23 使用IS NULL运算符进行查询 77 •实例3-24 使用COUNT函数进行查询 78 •实例3-25 使用FIRST函数与LAST函数查询第一条记录和最后一条记录的字段 78 •实例3-26 使用Parameters参数动态查询记录(DAO)指定单个参数 79 •实例3-27 使用parameters参数动态查询记录(DAO):指定多个参数 80 •实例3-28 使用parameters参数动态查询记录(ADO):指定单个参数 81 •实例3-29 使用Parameters参数动态查询记录(ADO):指定多个参数 83 •实例3-30 使用别名查询数据库 84 •实例3-31 将查询结果作为窗体控件的源数据 85 •实例3-32 通过窗体控件查询浏览数据库记录 88 •实例3-33 多表查询(WHERE连接) 98 •实例3-34 多表查询(内连接INNER JOINT) 99 •实例3-35 多表查询(左外连接LEFT OUTER JOINT) 101 •实例3-36 多表查询(右外连接 RIGHT OUTER JOINT) 102 •实例3-37 多表查询(子查询WHERE,ANY,SOME) 103 •实例3-38 多表查询(子查询EXISTS,NOT EXISTS) 105 •实例3-39 从两个数据表中查询出都存在的记录 106 •实例3-40 从两个数据表中查询出只存在于某个数据表的记录 108 •实例3-41 将查询结果生成一个数据表 108 •实例3-42 将查询结果保存为一个XML文件 109 •实例3-43 利用工作表实现记录的分页显示 110 •实例3-44 利用窗体实现记录的分页显示 113 •实例4-1 添加新记录(ADO+addnew) 116 •实例4-2 添加新记录(ADO+SQL) 117 •实例4-3 添加新记录(DAO+addnew) 118 •实例4-4 添加新记录(DAO+SQL) 118 •实例4-5 添加新记录(Access+SQL) 119 •实例4-6 修改更新特定记录(ADO+SQL) 120 •实例4-7 修改更新特定记录(DAO+SQL) 120 •实例4-8 修改更新特定记录(Access+SQL) 121 •实例4-9 修改更新全部记录(ADO+SQL) 121 •实例4-10 修改更新全部记录(DAO+SQL) 122 •实例4-11 修改更新全部记录(Access+SQL) 122 •实例4-12 删除特定记录(ADO+SQL) 123 •实例4-13 删除特定记录(DAO+SQL) 124 •实例4-14 删除特定记录(Acess+SQL) 124 •实例4-15 删除全部记录(ADO+SQL) 124 •实例4-16 删除全部记录(DAO+SQL) 125 •实例4-17 删除全部记录(Access+SQL) 125 •实例4-18 通过窗体编辑记录 126 •实例5-1 将整个工作表数据都保存为新的Access数据库(Access) 128 •实例5-2 将工作表的某些区域数据保存为新Access数据库(Access) 129 •实例5-3 将工作簿的所有工作表数据分别保存为不同的数据表(Access) 130 •实例5-4 将多个工作簿的某个工作表数据汇总为新Access数据库(Access) 131 •实例5-5将多个工作簿的某个工作表数据保存为不同的数据表(Access) 132 •实例5-6 将工作表数据保存到已有的Access数据库(循环方式)(ADO) 134 •实例5-7 将工作表数据保存到已有的Access数据库(循环方式)(DAO) 136 •实例5-8 将工作表数据保存到已有的Access数据库(数组方式)(ADO) 138 •实例5-9 将工作表数据保存到已有的Access数据库(数组方式)(DAO) 139 •实例5-10 将工作簿的所有工作表数据分别保存为不同的数据表(ADO) 141 •实例5-11 将工作簿的所有工作表数据分别保存为不同的数据表(DAO) 142 •实例6-1 打开数据库和数据表(Getobject函数) 144 •实例6-2 打开数据库和数据表(createobject函数) 145 •实例6-3 删除数据表(ADO) 145 •实例6-4 删除数据表(ADOX) 146 •实例6-5 删除数据表(DAO+DELETE) 147 •实例6-6 删除数据表(DAO+SQL) 147 •实例6-7 删除数据表(Access) 148 •实例6-8 为数据表增加字段(ADO) 148 •实例6-9 为数据表增加字段(ADOX) 149 •实例6-10 为数据表增加字段(DAO) 150 •实例6-11 为数据表增加字段(Access) 151 •实例6-12 删除字段(ADO) 152 •实例6-13 删除字段(ADOX) 153 •实例6-14 删除字段(DAO) 154 •实例6-15 删除字段(Access) 155 •实例6-16 改变字段的类型(ADO) 157 •实例6-17 改变字段的类型(DAO) 157 •实例6-18 改变字段的类型(Access) 158 •实例6-19 改变字段的长度(ADO) 158 •实例6-20 改变字段的长度(DAO) 159 •实例6-21 改变字段的长度(Access) 159 •实例6-22 重命名数据表(Access) 159 •实例6-23 复制数据表(Access) 160 •实例6-24 复制数据表(ADO) 161 •实例6-25 复制数据表(DAO) 162 •实例6-26 通过窗体维护数据库 162 •实例7-1 判断SQL Server数据库是否存在(ADO) 172 •实例7-2 检查数据表是否存在(ADOX) 173 •实例7-3 创建新的SQL Server数据库和数据表(ADO) 174 •实例7-4 在已有的SQL Servre数据库中创建数据表(ADO) 175 •实例7-5 从SQL Server数据库服务器中删除数据库(ADO) 176 •实例7-6 从SQL Server数据库中删除数据表(ADO) 177 •实例7-7 将SQL Server数据库中的数据导入到Excel工作表(ADO) 177 •实例7-8 将SQL Server数据库中的数据导入到Excel工作表(DAO) 178 •实例7-9 查询获取SQL Server数据库的数据(ADO) 180 •实例7-10 查询获取SQL Server数据库的数据(DAO) 181 •实例7-11 将工作表数据导入到SQL Server数据库(ADO) 182 •实例7-12 向SQL Server数据库中添加记录的一般方法 183 •实例7-13 将SQL Server数据库转换为Access数据库 184 •实例7-14 将access数据库转换为SQL Server数据库 185 •实例8-1 将FoxPro数据库全部数据导入到Excel工作表 187 •实例8-2 查询获取FoxPro数据库数据 188 •实例8-3 将excel工作表数据保存到FoxPro数据库 189 •实例8-4 判断FoxPro数据库的字段是否存在 190 •实例8-5 获取FoxPro数据库的字段信息 190 •实例9-1 从工作簿的某个工作表中查询获取数据(ADO) 192 •实例9-2 从工作簿的全部工作表中查询获取数据(ADO) 193 •实例9-3 利用DAO从工作表中查询数据 194 •实例9-4 查询其他工作簿的数据(ADO) 195 •实例9-6 利用ADO对工作表数据进行多重排序 196 •实例9-7 利用ADO按照字符的长度对数据进行排序 197 •实例9-8 比较两张表,将两个表中相同的行数据抓取出来 198 •实例9-9 比较两张表,将只存在于某个表中的行数据抓取出来 199 •实例9-10 删除工作表数据区域内的所有空行 200 •实例10-2 利用DAO导入文本文件的全部内容 202 •实例10-3 利用ADO导入文本文件的部分内容 203 •实例10-4 利用DAO导入文本文件的部分内容 204 •实例10-5 利用ADO获取文本文件的行数和列数 205 •实例10-6 利用ADO将超过65536行的文本文件数据导入到Excel工作表 206 •实例10-7 将工作表全部数据保存为文本文件(SaveAs) 208 •实例10-8 将工作表全部数据保存为文本文件(循环) 208 •实例10-9 将数据库数据导出为文本文件 209 •实例10-10 将文本文件保存为Access数据库(Access) 210 •实例10-11 将文本文件保存为Access数据库(ADO+ADOX) 211