ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 恳请大师对以下VBA代码逐行解释,极为感谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-10-16 14:52 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
恳请大师对以下VBA代码逐行解释,极为感谢:
  1. Sub 批量脊背()
  2.     arr = Sheet1.Range("a1").CurrentRegion.Value
  3.     Sheet4.Cells.UnMerge
  4.     Sheet3.Cells.Copy Sheet4.Range("a1")
  5.     brr = Sheet3.Range("a1:e8").Value
  6.     n = 0
  7.     For i = 2 To UBound(arr)
  8.         If arr(i, 13) <> "" Then
  9.             n = n + 1
  10.             If n Mod 5 = 1 And n > 2 Then
  11.                 Sheet4.Cells((n \ 5) * 8 - 8 + 1, 1).Resize(UBound(brr), UBound(brr, 2)) = brr
  12.                 Sheet3.Rows("1:8").Copy Sheet4.Range("a" & (n \ 5) * 8 + 1)
  13.                 brr = Sheet3.Range("a1:e8").Value
  14.             End If
  15.             brr(4, ((n - 1) Mod 5) + 1) = arr(i, 8)
  16.             brr(6, ((n - 1) Mod 5) + 1) = arr(i, 13)
  17.             
  18.         End If
  19.     Next
  20.     Sheet4.Cells(Round(n / 5 + 0.49, 0) * 8 - 8 + 1, 1).Resize(UBound(brr), UBound(brr, 2)) = brr
  21.     设置分页 Sheet4, 8, Round(n / 5 + 0.49, 0) * 8 - 8
  22. End Sub
  23. Sub 设置分页(sht, a, b)

  24.     ActiveSheet.ResetAllPageBreaks
  25.     For i = a To b Step a
  26.     sht.HPageBreaks.Add Before:=sht.Range("a" & i + 1)
  27.     Next
  28.    
  29. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2018-10-16 15:51 来自手机 | 显示全部楼层
估计没大神愿意干这活。

TA的精华主题

TA的得分主题

发表于 2018-10-16 18:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用VBA代码注释器翻译的,仅供参考


Sub 批量脊背()    '子程序 批量脊背()
arr = Sheet1.Range("a1").CurrentRegion.Value    'arr= Sheet1的<单元格>区域("a1" )的当前区域的值
Sheet4.Cells.UnMerge    ' Sheet4的单元格集合的UnMerge
Sheet3.Cells.Copy Sheet4.Range("a1")    ' Sheet3的单元格集合的复制 Sheet4的<单元格>区域("a1")
brr = Sheet3.Range("a1:e8").Value    'brr= Sheet3的<单元格>区域("a1:e8" )的值
n = 0    'n=0
For i = 2 To UBound(arr)    '设定变量范围为i=2到<数组上限>(arr)
        If arr(i, 13) <> "" Then    '如果 arr(i,13) 不等于 空值 则执行
                n = n + 1    'n=n+1
                If n Mod 5 = 1 And n > 2 Then    '如果 nMod5=1 并且 n>2 则执行
                        Sheet4.Cells((n \ 5) * 8 - 8 + 1, 1).Resize(UBound(brr), UBound(brr, 2)) = brr    ' Sheet4的<单元格>坐标((n\5)*8-8+1,1 )的<重调大小>(<数组上限>(brr),<数组上限>(brr,2))=brr
                        Sheet3.Rows("1:8").Copy Sheet4.Range("a" & (n \ 5) * 8 + 1)    ' Sheet3的<行>坐标("1:8" )的复制 Sheet4的<单元格>区域("a" & (n\5)*8+1)
                        brr = Sheet3.Range("a1:e8").Value    'brr= Sheet3的<单元格>区域("a1:e8" )的值
                End If    'If判断过程结束
                brr(4, ((n - 1) Mod 5) + 1) = arr(i, 8)    'brr(4,((n-1)Mod5)+1)=arr(i,8)
                brr(6, ((n - 1) Mod 5) + 1) = arr(i, 13)    'brr(6,((n-1)Mod5)+1)=arr(i,13)
        End If    'If判断过程结束
Next    '下一个
Sheet4.Cells(Round(n / 5 + 0.49, 0) * 8 - 8 + 1, 1).Resize(UBound(brr), UBound(brr, 2)) = brr    ' Sheet4的<单元格>坐标(Round(n/5+ 0的49,0)*8-8+1,1 )的<重调大小>(<数组上限>(brr),<数组上限>(brr,2))=brr
设置分页 Sheet4, 8, Round(n / 5 + 0.49, 0) * 8 - 8    '设置分页Sheet4,8,Round(n/5+ 0的49,0)*8-8
End Sub    '子程序结束

Sub 设置分页(sht, a, b)    '子程序 设置分页(sht,a,b)
ActiveSheet.ResetAllPageBreaks    ' 活动工作表的ResetAllPageBreaks
For i = a To b Step a    '设定变量范围为i=a到b步进为a
        sht.HPageBreaks.Add Before:=sht.Range("a" & i + 1)    ' sht的HPageBreaks的添加 前面于= sht的<单元格>区域("a" & i + 1)
Next    '下一个
End Sub    '子程序结束

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-17 08:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 Excel2119 于 2018-10-17 08:40 编辑

实际上这段代码可以帮助很多从事档案管理的人,但在此申明,这段代码来自网络,非本人编写(呵呵,再说了我没那水平)。
我觉得最重要的思路是这段代码
  1. For i = 2 To UBound(arr)
  2.         If arr(i, 13) <> "" Then
  3.             n = n + 1
  4.             If n Mod 5 = 1 And n > 2 Then
  5.                 Sheet4.Cells((n \ 5) * 8 - 8 + 1, 1).Resize(UBound(brr), UBound(brr, 2)) = brr
  6.                 Sheet3.Rows("1:8").Copy Sheet4.Range("a" & (n \ 5) * 8 + 1)
  7.                 brr = Sheet3.Range("a1:e8").Value
  8.             End If
  9.             brr(4, ((n - 1) Mod 5) + 1) = arr(i, 8)
  10.             brr(6, ((n - 1) Mod 5) + 1) = arr(i, 13)
  11.             
  12.         End If
  13.     Next
  14.     Sheet4.Cells(Round(n / 5 + 0.49, 0) * 8 - 8 + 1, 1).Resize(UBound(brr), UBound(brr, 2)) = brr
  15.     设置分页 Sheet4, 8, Round(n / 5 + 0.49, 0) * 8 - 8
复制代码
尤其是
  1. Sheet4.Cells((n \ 5) * 8 - 8 + 1, 1).Resize(UBound(brr), UBound(brr, 2)) = brr
复制代码



TA的精华主题

TA的得分主题

发表于 2018-10-17 08:50 | 显示全部楼层
看了,单独一两句能理解,但是没有实际的EXCEL真不知道这个有什么作用,怎样用。

TA的精华主题

TA的得分主题

发表于 2018-10-17 09:18 | 显示全部楼层
粗粗一看, arr是源数据 ,brr 是固定格式,
对brr 细节修改后 就是不停复制粘贴,可能是 在生成一组标签。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-18 08:38 | 显示全部楼层
zopey 发表于 2018-10-17 09:18
粗粗一看, arr是源数据 ,brr 是固定格式,
对brr 细节修改后 就是不停复制粘贴,可能是 在生成一组标签 ...

嗯,就是在做档案管理中,档案盒背脊的批量制作。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 17:39 , Processed in 0.043545 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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