ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 112259|回复: 228

[分享] 多工作簿多表查询汇总的通用解决方案

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-11-9 08:22 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
        长期以来,论坛内不断出现求多个工作簿、多个工作表进行汇总的求助贴,开始时,抱着能帮多少就多少的心态去尽自己能力去进行帮助,但有时一天内出现几个汇总求助,只是汇总数据的格式不一样,标题字段不一样而已,作为求助者稍微学习一下VBA基础知识,然后照搬照挪代码,就基本可以自己完成的事,却不厌其烦的出现在求助队列里。
        本着授之以鱼不如授之以渔的思想,做了一个自己的汇总代码模版,希望能给有汇总需求提供到一定帮助,给初学者一个指引编写代码的学习机会。
        代码不一定是非常优秀,希望各位大神级的朋友不要贱笑,也敬请多多指教,多多指正。
前提,所有操作中的表或工作簿中,必须包含所有查询所需的字段标题,但不一定要按同样顺序
附件中,每行代码都注释了作用,希望各位初学者学习一些语句的应用。包含了对工作簿汇总的数组方案、SQL方案;对工作表汇总的数组方案、SQL方案。

多工作簿或多工作表汇总(By.Micro).rar

57.23 KB, 下载次数: 17912

评分

62

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-9 08:23 | 显示全部楼层
本帖最后由 microyip 于 2016-11-9 08:25 编辑

数组解决方案中涉及调整规范数据格式的代码
  1. Function 规范数据格式(vReadData As Variant, vTitle As Variant) As Variant
  2. '将数据规范为一定格式,本例中的格式是:姓名、年龄、籍贯、区域
  3.     Dim oDic As Object '定义字典对象变量
  4.     Dim nRow As Double, nCol As Integer, nNewCol As Integer
  5.     Dim vData As Variant '定义数据规范的数组
  6.    
  7.     Set oDic = CreateObject("Scripting.Dictionary") '定义oDic为字典变量
  8.     '注意:标题的数量要与vReadData数组对应
  9.     For nRow = LBound(vTitle) To UBound(vTitle) '从数组的最低标号到最高标号循环
  10.         oDic(vTitle(nRow)) = nRow + 1 '以标题为关键字的字典,赋值对应于标题数组的标号
  11.     Next
  12.     vData = vReadData '令vData与vReadData具有同样容量的数组
  13.     For nCol = 1 To UBound(vReadData, 2) '列号从1到vReadData第二维最高标号,即最右的列号
  14.         nNewCol = oDic(vReadData(1, nCol)) '从vReadData标题行的标题获取数据规范的所在列
  15.         For nRow = 2 To UBound(vReadData) '列号从2到vReadData第一维最高标号,即最下的行号
  16.             vData(nRow, nNewCol) = vReadData(nRow, nCol) '把vReadData赋值到数据规范的数组
  17.         Next
  18.     Next
  19.     规范数据格式 = vData '返回规范数据的数组
  20. End Function
复制代码

评分

8

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-9 08:27 | 显示全部楼层
使用数组访问多个工作簿进行汇总的解决方案
  1. Sub 数组查找工作簿汇总()
  2.     Dim vReadData As Variant '定义读取工作簿中表的数据的数组变量
  3.     Dim vData As Variant '定义读取工作簿中表的规范格式数据的数组变量
  4.     Dim wWB As Workbook '定义工作簿变量
  5.     Dim sPath As String '定义文件夹变量
  6.     Dim sFile As String '定义文件名变量
  7.     Dim nRow As Double '定义行数变量
  8.     Dim nCol As Integer '定义列数变量
  9.     Dim bAdd As Boolean '定义是否需要作为新记录添加的逻辑变量
  10.     Dim vFill As Variant '定义将要作为查询结果的数组变量
  11.     Dim nFill As Double '定义查询结果数组的行数的变量
  12.     Dim sName As String, sPlace As String, sArea As String, vAge As Variant
  13.     Dim vTitle As Variant '定义标题变量
  14.    
  15.     Application.ScreenUpdating = False '禁止数据更新,避免因数据更新时引起闪屏,提高运行速度
  16.     vTitle = Split("姓名|年龄|籍贯|区域", "|") '将所有标题用|隔开的字符串根据|分离成数组
  17.     sName = Trim([A2]) '获取查询姓名的条件
  18.     sPlace = Trim([A6]) '获取查询籍贯的条件
  19.     sArea = Trim([A8]) '获取查询区域的条件
  20.     vAge = [A4:B4].Value '获取查询年龄的条件
  21.    
  22.     ReDim vFill(1 To 4, 1 To 1) '定义一个4列1行的数组
  23.     '注意:正常填到表格内的数组是按(行,列)来定义的,因为考虑到行数将不断增加,而且数组只能是最后一个维度上进行变化,所以先将行定义在后面
  24.     Set wWB = ThisWorkbook '设置本工作簿的变量
  25.     sPath = wWB.Path & "" '获取本工作簿所在文件夹
  26.     sFile = Dir(sPath & "*.xls*") '查找sPath文件夹内的与xls有关后缀名的文件
  27.     Do While sFile <> "" '如果查找不到相关文件将会返回空字符串,找到的话,将返回文件名的全名
  28.         If sFile <> ThisWorkbook.Name Then '如果找到的文件名不等于本工作簿的文件名
  29.             With Workbooks.Open(sPath & sFile)  '打开工作簿sFile
  30.                 vReadData = .Sheets(1).UsedRange.Value '将第一个表的所有已用单元格的数值赋值给数组
  31.                 .Close False '关闭工作簿sFile
  32.             End With
  33.             vData = 规范数据格式(vReadData, vTitle) '如果所有工作簿内数据格式一致,可以跳过本步,上一步的赋值给vReadData的时候直接赋值给vData即可
  34.             For nRow = 2 To UBound(vData) 'vData中,第1行是标题,故从2行开始读取数据
  35.                 bAdd = True '初始化变量为真
  36.                 If sName <> "" Then bAdd = bAdd And (vData(nRow, 1) Like "*" & sName & "*")
  37.                 '假如存在姓名条件,且姓名类似条件形式,为真,并跟bAdd进行与运算,例如:条件是”张“,那么”张三“就类似”*张*“
  38.                 If vAge(1, 2) <> "" Then bAdd = bAdd And Application.Evaluate(vData(nRow, 2) & IIf(vAge(1, 1) = "", "=", vAge(1, 1)) & vAge(1, 2))
  39.                 'Evaluate是计算一个字符串形式的式子的值
  40.                 'IIf(vAge(1, 1) = "", "=", vAge(1, 1)) ,如果年龄的比较符号vAge(1, 1)没有被选择,默认使用等于号
  41.                 '整个语句就是当条件中有年龄条件数值,对比数据中年龄vData(nRow, 2)是否符合条件
  42.                 If sPlace <> "" Then bAdd = bAdd And (vData(nRow, 1) = sPlace)
  43.                 '假如存在籍贯条件,且籍贯与条件相同,为真,并跟bAdd进行与运算
  44.                 If sArea <> "" Then bAdd = bAdd And (vData(nRow, 1) = sArea)
  45.                 '假如存在区域条件,且区域与条件相同,为真,并跟bAdd进行与运算
  46.                 If bAdd Then '假如条件符合判断逻辑变量bAdd为真时
  47.                     nFill = nFill + 1 '为查询数据数组的行数增加一行
  48.                     ReDim Preserve vFill(1 To 4, 1 To nFill) '为增加一行的查询数据数组重定义
  49.                     For nCol = 1 To 4
  50.                         vFill(nCol, nFill) = vData(nRow, nCol) '复制符合条件的一行数据到查询数据数组最后一行上
  51.                     Next
  52.                 End If
  53.             Next
  54.         End If
  55.         sFile = Dir '查询一个符合条件的文件
  56.     Loop
  57.     ThisWorkbook.Activate '本工作簿激活为使用状态
  58.     With Sheets("汇总") '对”汇总“表进行操作
  59.         .[F:I].ClearContents '清空汇总表内的F:I列数据
  60.         .[F1:I1] = Split("姓名,年龄,籍贯,区域", ",") '通过以逗号为拆分词来拆分字符串所得数组赋值给F1:I1单元格作为标题
  61.         If nFill > 0 Then '假如查询数据数组的记录行数大于0,即表示有数据
  62.             .[F2].Resize(nFill, 4) = Application.WorksheetFunction.Transpose(vFill)
  63.             '因为前面定义vFill时按(列,行)定义的,需要通过系统的转置函数Transpose转置为(行,列)数组
  64.             '赋值给由F2开始变形为nFill行,4列的单元格区域
  65.         End If
  66.     End With '结束对”汇总“表进行操作
  67.     Application.ScreenUpdating = True
  68. End Sub
复制代码


评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-9 08:28 | 显示全部楼层
使用SQL语句处理多文件汇总的解决方案
  1. Sub SQL查找工作簿汇总()
  2.     Dim oRead_Excel_Conn As Object '定义数据集对象变量
  3.     Dim sExcel_Select As String '定义EXCEL读取数据SQL语句变量
  4.     Dim sRead_File_Conn As String '定义读文件的SQL语句连接变量
  5.     Dim sWhere As String 'SQL语句的条件部分变量
  6.     Dim wWB As Workbook '定义工作簿变量
  7.     Dim sPath As String '定义文件夹变量
  8.     Dim sFile As String '定义文件名变量
  9.     Dim sName As String, sPlace As String, sArea As String, vAge As Variant
  10.     Dim sTitle As Variant '定义SQL查找的标题变量
  11.     Dim vTitle As Variant '定义标题变量
  12.    
  13.     Application.ScreenUpdating = False '禁止数据更新,避免因数据更新时引起闪屏,提高运行速度
  14.     sTitle = "姓名,年龄,籍贯,区域"
  15.     sName = Trim([A2]) '获取查询姓名的条件
  16.     sPlace = Trim([A6]) '获取查询籍贯的条件
  17.     sArea = Trim([A8]) '获取查询区域的条件
  18.     vAge = [A4:B4].Value '获取查询年龄的条件
  19.     sWhere = "Where True" '初始SQL的条件语句
  20.     If sName <> "" Then sWhere = sWhere & " And [姓名] Like '%" & sName & "%'"
  21.     '假如存在姓名条件,定义姓名类似条件给sWhere
  22.     If vAge(1, 2) <> "" Then sWhere = sWhere & " And [年龄]" & IIf(vAge(1, 1) = "", "=", vAge(1, 1)) & vAge(1, 2)
  23.     'IIf(vAge(1, 1) = "", "=", vAge(1, 1)) ,如果年龄的比较符号vAge(1, 1)没有被选择,默认使用等于号
  24.     '假如存在年龄条件,定义年龄对应关系条件给sWhere
  25.     If sPlace <> "" Then sWhere = sWhere & " And [籍贯]='" & sPlace & "'"
  26.     '假如存在籍贯条件,定义籍贯相等条件给sWhere
  27.     If sArea <> "" Then sWhere = sWhere & " And [区域]='" & sArea & "'"
  28.     '假如存在区域条件,且区域相等条件给sWhere
  29.    
  30.     Set oRead_Excel_Conn = CreateObject("Adodb.Connection") '建立读EXCEL数据SQL数据集
  31.     If Val(Application.Version) < 12 Then '获取Excel的版本号,低于12为Excel2003版及以下,否则为Excel2007版及以上
  32.         oRead_Excel_Conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName '建立数据库连接,Excel2003版及以下
  33.     Else
  34.         oRead_Excel_Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName '建立数据库连接,Excel2007版及以上
  35.     End If
  36.    
  37.     Set wWB = ThisWorkbook '设置本工作簿的变量
  38.     sPath = wWB.Path & "" '获取本工作簿所在文件夹
  39.     sFile = Dir(sPath & "*.xls*") '查找sPath文件夹内的与xls有关后缀名的文件
  40.     Do While sFile <> "" '如果查找不到相关文件将会返回空字符串,找到的话,将返回文件名的全名
  41.         If sFile <> ThisWorkbook.Name Then '如果找到的文件名不等于本工作簿的文件名
  42.             If LCase(Left(sFile, 3)) = "xls" Then '如果文件名右边三个字符(即后缀名)的小写与2003版本文件一样
  43.                 sRead_File_Conn = "[Excel 8.0;Database=" & sPath & sFile & "]."
  44.                 '使用SQL语句打开非由oRead_Excel_Conn所定义的文件以外的文件,使用这种格式打开,注意别漏了后面的点
  45.             Else
  46.                 sRead_File_Conn = "[Excel 12.0;Database=" & sPath & sFile & "]."
  47.             End If
  48.                
  49.             If sExcel_Select <> "" Then
  50.                 sExcel_Select = sExcel_Select & " Union All " '如果已经存在SQL语句,使用联合语句关联文件的连接
  51.             End If
  52.             sExcel_Select = sExcel_Select & "(Select " & sTitle & " From " & sRead_File_Conn & "[Sheet1$] " & sWhere & ")"  '读取文件中Sheet1表
  53.         End If
  54.         sFile = Dir '查询一个符合条件的文件
  55.     Loop
  56.     ThisWorkbook.Activate '本工作簿激活为使用状态
  57.     With Sheets("汇总") '对”汇总“表进行操作
  58.         .[F:I].ClearContents '清空汇总表内的F:I列数据
  59.         vTitle = Split(sTitle, ",") '将所有标题用,隔开的字符串根据,分离成数组
  60.         .[F1:I1] = vTitle '通过以逗号为拆分词来拆分字符串所得的数组赋值给F1:I1单元格作为标题
  61.         .[F2].CopyFromRecordset oRead_Excel_Conn.Execute(sExcel_Select) '执行SQL语句并赋值到F2为起始的单元格区域
  62.     End With '结束对”汇总“表进行操作
  63.    
  64.     oRead_Excel_Conn.Close '关闭文件SQL连接
  65.     Set oRead_Excel_Conn = Nothing '清除对象的SQL属性
  66.     Application.ScreenUpdating = True
  67. End Sub
复制代码


评分

6

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-9 08:29 | 显示全部楼层
使用数组处理多表汇总的解决方案
  1. Sub 数组查找工作表汇总()
  2.     Dim wSH As Worksheet '定义工作表的变量
  3.     Dim vReadData As Variant '定义读取工作表的数据的数组变量
  4.     Dim vData As Variant '定义读取工作表的规范格式数据的数组变量
  5.     Dim nRow As Double '定义行数变量
  6.     Dim nCol As Integer '定义列数变量
  7.     Dim bAdd As Boolean '定义是否需要作为新记录添加的逻辑变量
  8.     Dim vFill As Variant '定义将要作为查询结果的数组变量
  9.     Dim nFill As Double '定义查询结果数组的行数的变量
  10.     Dim sName As String, sPlace As String, sArea As String, vAge As Variant
  11.     Dim vTitle As Variant '定义标题变量
  12.    
  13.     Application.ScreenUpdating = False '禁止数据更新,避免因数据更新时引起闪屏,提高运行速度
  14.     vTitle = Split("姓名|年龄|籍贯|区域", "|") '将所有标题用|隔开的字符串根据|分离成数组
  15.     sName = Trim([A2]) '获取查询姓名的条件
  16.     sPlace = Trim([A6]) '获取查询籍贯的条件
  17.     sArea = Trim([A8]) '获取查询区域的条件
  18.     vAge = [A4:B4].Value '获取查询年龄的条件
  19.    
  20.     ReDim vFill(1 To 4, 1 To 1) '定义一个4列1行的数组
  21.     '注意:正常填到表格内的数组是按(行,列)来定义的,因为考虑到行数将不断增加,而且数组只能是最后一个维度上进行变化,所以先将行定义在后面
  22.     For Each wSH In Sheets '查找工作簿中的每一个表
  23.         If wSH.Name <> "汇总" Then '如果找到的工作表的标签名不等于“汇总”
  24.             vReadData = wSH.UsedRange.Value '将工作表的所有已用单元格的数值赋值给数组
  25.             vData = 规范数据格式(vReadData, vTitle) '如果所有工作表内数据格式一致,可以跳过本步,上一步的赋值给vReadData的时候直接赋值给vData即可
  26.             For nRow = 2 To UBound(vData) 'vData中,第1行是标题,故从2行开始读取数据
  27.                 bAdd = True '初始化变量为真
  28.                 If sName <> "" Then bAdd = bAdd And (vData(nRow, 1) Like "*" & sName & "*")
  29.                 '假如存在姓名条件,且姓名类似条件形式,为真,并跟bAdd进行与运算,例如:条件是”张“,那么”张三“就类似”*张*“
  30.                 If vAge(1, 2) <> "" Then bAdd = bAdd And Application.Evaluate(vData(nRow, 2) & IIf(vAge(1, 1) = "", "=", vAge(1, 1)) & vAge(1, 2))
  31.                 'Evaluate是计算一个字符串形式的式子的值
  32.                 'IIf(vAge(1, 1) = "", "=", vAge(1, 1)) ,如果年龄的比较符号vAge(1, 1)没有被选择,默认使用等于号
  33.                 '整个语句就是当条件中有年龄条件数值,对比数据中年龄vData(nRow, 2)是否符合条件
  34.                 If sPlace <> "" Then bAdd = bAdd And (vData(nRow, 1) = sPlace)
  35.                 '假如存在籍贯条件,且籍贯与条件相同,为真,并跟bAdd进行与运算
  36.                 If sArea <> "" Then bAdd = bAdd And (vData(nRow, 1) = sArea)
  37.                 '假如存在区域条件,且区域与条件相同,为真,并跟bAdd进行与运算
  38.                 If bAdd Then '假如条件符合判断逻辑变量bAdd为真时
  39.                     nFill = nFill + 1 '为查询数据数组的行数增加一行
  40.                     ReDim Preserve vFill(1 To 4, 1 To nFill) '为增加一行的查询数据数组重定义
  41.                     For nCol = 1 To 4
  42.                         vFill(nCol, nFill) = vData(nRow, nCol) '复制符合条件的一行数据到查询数据数组最后一行上
  43.                     Next
  44.                 End If
  45.             Next
  46.         End If
  47.     Next
  48.     With Sheets("汇总") '对”汇总“表进行操作
  49.         .[F:I].ClearContents '清空汇总表内的F:I列数据
  50.         .[F1:I1] = Split("姓名,年龄,籍贯,区域", ",") '通过以逗号为拆分词来拆分字符串所得数组赋值给F1:I1单元格作为标题
  51.         If nFill > 0 Then '假如查询数据数组的记录行数大于0,即表示有数据
  52.             .[F2].Resize(nFill, 4) = Application.WorksheetFunction.Transpose(vFill)
  53.             '因为前面定义vFill时按(列,行)定义的,需要通过系统的转置函数Transpose转置为(行,列)数组
  54.             '赋值给由F2开始变形为nFill行,4列的单元格区域
  55.         End If
  56.     End With '结束对”汇总“表进行操作
  57.     Application.ScreenUpdating = True
  58. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-9 08:29 | 显示全部楼层
使用SQL处理多表汇总的解决方案
  1. Sub SQL查找工作表汇总()
  2.     Dim wSH As Worksheet '定义工作表的变量
  3.     Dim oRead_Excel_Conn As Object '定义数据集对象变量
  4.     Dim sExcel_Select As String '定义EXCEL读取数据SQL语句变量
  5.     Dim sRead_File_Conn As String '定义读文件的SQL语句连接变量
  6.     Dim sWhere As String 'SQL语句的条件部分变量
  7.     Dim sName As String, sPlace As String, sArea As String, vAge As Variant
  8.     Dim sTitle As Variant '定义SQL查找的标题变量
  9.     Dim vTitle As Variant '定义标题变量
  10.    
  11.     Application.ScreenUpdating = False '禁止数据更新,避免因数据更新时引起闪屏,提高运行速度
  12.     sTitle = "姓名,年龄,籍贯,区域"
  13.     sName = Trim([A2]) '获取查询姓名的条件
  14.     sPlace = Trim([A6]) '获取查询籍贯的条件
  15.     sArea = Trim([A8]) '获取查询区域的条件
  16.     vAge = [A4:B4].Value '获取查询年龄的条件
  17.     sWhere = "Where True" '初始SQL的条件语句
  18.     If sName <> "" Then sWhere = sWhere & " And [姓名] Like '%" & sName & "%'"
  19.     '假如存在姓名条件,定义姓名类似条件给sWhere
  20.     If vAge(1, 2) <> "" Then sWhere = sWhere & " And [年龄]" & IIf(vAge(1, 1) = "", "=", vAge(1, 1)) & vAge(1, 2)
  21.     'IIf(vAge(1, 1) = "", "=", vAge(1, 1)) ,如果年龄的比较符号vAge(1, 1)没有被选择,默认使用等于号
  22.     '假如存在年龄条件,定义年龄对应关系条件给sWhere
  23.     If sPlace <> "" Then sWhere = sWhere & " And [籍贯]='" & sPlace & "'"
  24.     '假如存在籍贯条件,定义籍贯相等条件给sWhere
  25.     If sArea <> "" Then sWhere = sWhere & " And [区域]='" & sArea & "'"
  26.     '假如存在区域条件,且区域相等条件给sWhere
  27.    
  28.     Set oRead_Excel_Conn = CreateObject("Adodb.Connection") '建立读EXCEL数据SQL数据集
  29.     If Val(Application.Version) < 12 Then '获取Excel的版本号,低于12为Excel2003版及以下,否则为Excel2007版及以上
  30.         oRead_Excel_Conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName '建立数据库连接,Excel2003版及以下
  31.     Else
  32.         oRead_Excel_Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName '建立数据库连接,Excel2007版及以上
  33.     End If
  34.    
  35.     For Each wSH In Sheets '查找工作簿中的每一个表
  36.         If wSH.Name <> "汇总" Then '如果找到的工作表的标签名不等于“汇总”
  37.             If sExcel_Select <> "" Then
  38.                 sExcel_Select = sExcel_Select & " Union All " '如果已经存在SQL语句,使用联合语句关联工作表的连接
  39.             End If
  40.             sExcel_Select = sExcel_Select & "(Select " & sTitle & " From [" & wSH.Name & "$] " & sWhere & ")"  '读取工作表
  41.         End If
  42.     Next
  43.     With Sheets("汇总") '对”汇总“表进行操作
  44.         .[F:I].ClearContents '清空汇总表内的F:I列数据
  45.         vTitle = Split(sTitle, ",") '将所有标题用,隔开的字符串根据,分离成数组
  46.         .[F1:I1] = vTitle '通过以逗号为拆分词来拆分字符串所得的数组赋值给F1:I1单元格作为标题
  47.         .[F2].CopyFromRecordset oRead_Excel_Conn.Execute(sExcel_Select) '执行SQL语句并赋值到F2为起始的单元格区域
  48.     End With '结束对”汇总“表进行操作
  49.    
  50.     oRead_Excel_Conn.Close '关闭文件SQL连接
  51.     Set oRead_Excel_Conn = Nothing '清除对象的SQL属性
  52.     Application.ScreenUpdating = True
  53. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-11 21:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jsgj2023 发表于 2016-11-11 21:16
顶一个,楼主写的代码好规范。

平时养成好习惯很重要
1、定义好变量
2、属性配对,各种属性关系使用陷入方式,按Tab键内进一下
If……End If
For……Next
Do While……Loop
With……End With等之间语句用陷入一些的方式
在查找Bug和维护时很有用

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-8-15 22:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
找到Office 2016 SQL 无法使用的方法了:
具体参考网址:https://blog.csdn.net/lwj3326/article/details/79337514

文字部分如下:
解决 'Microsoft .ACE.OLEDB.16.0'提供程序未在本地计算机上注册
2018年02月19日 17:28:53
阅读数:2449
使用SQLserver2016遇见这个问题
    'Microsoft .ACE.OLEDB.16.0'提供程序未在本地计算机上注册
解决办法:

下载并安装:http://www.microsoft.com/download/en/confirmation.aspx?id=23734

无论您要访问/导入哪个文件,请确保将其选为Office 2010文件(即使可能是Office 2016文件)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-12 07:52 | 显示全部楼层
yeminqiang 发表于 2016-11-11 23:19
大神,我用了你的代码,提示下标越界?怎么回事?

直接在我原来附件上出错?

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-12 10:50 | 显示全部楼层
yeminqiang 发表于 2016-11-12 10:37
呃,兄台太认真了。这代码我也会抄的。只不过调侃一下那些伸手党而已。

哦,抱歉,误会了。就是见太多伸手党,所以才做个模版给他们自己研究一下,也注释好给他们,这样也不会抄的话,真是无奈了

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-24 08:23 | 显示全部楼层
aman1516 发表于 2016-11-23 22:39
看熟代码三百个,不会编程也会抄……
对于新手,变量的名称也太长太难记了——说笑呢
楼主代码写得很规范 ...

抱歉,的确代码名称是有点长,但个人习惯问题,尽量在变量那里定义好类型,例如n代表数值,s代表字符串,o代表对象,v代表可变形变量……等等,同时变量名字也尽量在用的时候知道是什么意思,例如nRow是行,dStartDate是开始日期等
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 00:26 , Processed in 0.054272 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表