一段EXCEL VBA代码不明白,请高手指教

'第2个工作表的表格合到第1个工作表里,第4个合到第3个里,第6个合到第5个里......Sub按钮1_单击()Application.ScreenUpdating=Fa... '第2个工作表的表格合到第1个工作表里,第4个合到第3个里,第6个合到第5个里... ...
Sub 按钮1_单击()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each sh In Sheets
If Trim(sh.Name) Like "*(*[0-9])" Then 'Trim返回不带前导与后续空格的字符串副本
xyz = Val(Split(Split(sh.Name, "(")(1), ")")(0)) 'Split返回基于 0 的一维数组,其中包含指定数目的子字符串。
If xyz Mod 2 = 0 Then 'Mod求余,偶数的余数全是0
sh.UsedRange.Copy Sheets("zg" & " (" & xyz - 1 & ")").[a15] '好像是从第15行开始粘贴
With Sheets("zg" & " (" & xyz - 1 & ")")
'.[a15] = "" '清空第15行内容
sh.Rows(1).Copy
.Rows(15).PasteSpecial Paste:=xlPasteFormats
sh.Rows("2:13").Copy
.Rows("16:27").PasteSpecial Paste:=xlPasteFormats
sh.Rows(14).Copy
.Rows(28).PasteSpecial Paste:=xlPasteFormats
End With
Application.CutCopyMode = False
sh.Delete
End If
End If
Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
End Sub
====================================================================
工作表的名字分别是zg (1),zg (2),zg (3),zg (4)。。。 。。。
注释是根据自己理解加的,理解错误的大家帮我订正下。
主要是这句不明白:
xyz = Val(Split(Split(sh.Name, "(")(1), ")")(0))
Split到底是怎么分的字符,我看的头都大了,那个(1)和(0)是什么意思
Val是什么意思
会一点点VBS,看不明白这些。。
Split怎么还有括号外的参数。我只知道这种用法:Split("sdfdXijXei!", "x", -1, 1)

(Val函数我查到了,是返回包含于字符串内的数字。)
展开
 我来答
saxexpert
2009-12-15 · TA获得超过404个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:140万
展开全部
代码的功能是将当前的偶数的sheet复制到前一个奇数的sheet,然后删除偶数的sheet,所以你从现象上看,好像是两个sheet的合并。

注释如下:

Sub 按钮1_单击()
'关闭屏幕更新,如果设置成true,那么会看到excel的值一个格子一个格子的填充。
Application.ScreenUpdating = False
'关闭显示警告信息框
Application.DisplayAlerts = False
For Each sh In Sheets
'判断sheet名字,在sheet名称中包含(0),(1),...,(9)的sheet名称
If Trim(sh.Name) Like "*(*[0-9])" Then
'将sheet名称按照(分隔成一维数组,以sheet名称是zg(1)为例,则取出的内容是 1)
'然后将第二个元素按照)分隔成一维数组,以sheet名称是zg(1)为例,则取出的内容是 1
'所以最后得到的xyz是1
xyz = Val(Split(Split(sh.Name, "(")(1), ")")(0))
'如果sheet的序号是偶数的时候
If xyz Mod 2 = 0 Then
'将这个sheet所有偶数页已经使用的单元格中的内容复制到前一页(奇数页)的第a列第15行
'例如,现在在第zg(2)中的内容会复制到zg(1)即,奇数页的第a列第15行开始的地方。
sh.UsedRange.Copy Sheets("zg" & " (" & xyz - 1 & ")").[a15]
With Sheets("zg" & " (" & xyz - 1 & ")")
'清空第a列15行内容
'.[a15] = ""
'将第1列的格式复制到第15列
sh.Rows(1).Copy
.Rows(15).PasteSpecial Paste:=xlPasteFormats
'将第2行到13行的格式复制到第16行到27行
sh.Rows("2:13").Copy
.Rows("16:27").PasteSpecial Paste:=xlPasteFormats
'将第14行的格式复制到第28行
sh.Rows(14).Copy
.Rows(28).PasteSpecial Paste:=xlPasteFormats
'循环结束
End With
'清空剪贴板
Application.CutCopyMode = False
'将sh的sheet删除
sh.Delete
End If
End If
’执行下一个For循环
Next
'关闭屏幕更新
Application.ScreenUpdating = False
'关闭显示警告信息框
Application.DisplayAlerts = False
End Sub

补充:
1.Split那句里的(1)和(0)是什么意思,为什么还有括号。 不应该是加-1 +1之类的吗,就像这样:Split("sdfdXijXei!", "x", -1, 1)

回答:
这句中的(1)和(0)是用来指定一维数组的第几个元素,相当于a(0),a(1
)因为slipt函数返回一个String型的数组。-1和+1是可选择的,前面的-1表示返回所有的子字符串,后面的+1表示 执行文字比较
详细的请参照slipt的语法http://baike.baidu.com/view/356808.html?wtp=tt

2.sh.UsedRange.Copy Sheets("zg" & " (" &xyz - 1 & ")").[a15] 这句的a15换成b15 f15怎么对执行结果没有影响,接我的理解起始列应该有变化.。

回答:
sh.UsedRange.Copy Sheets这句的意思是将这个sheet的第a列15行复制到剪切板中,真正粘贴出来的语句是
sh.Rows(1).Copy
.Rows(15).PasteSpecial Paste:=xlPasteFormats
sh.Rows("2:13").Copy
.Rows("16:27").PasteSpecial Paste:=xlPasteFormats
sh.Rows(14).Copy
.Rows(28).PasteSpecial Paste:=xlPasteFormats
这三句话将剪贴板中的第1行,第2行到13行,第16行到27行复制到他前面一个奇数的sheet中

补充2:
Split怎么还有括号外的参数。我只知道这种用法:Split("sdfdXijXei!", "x", -1, 1)
回答:
这种写法是很不规范的,他利用的split函数返回的是一个数组,而直接使用了返回值的某一个元素,这样做少定义了一个数组,但是却使代码不容易读懂,不推荐这样写代码。
fushxp
2009-12-11 · TA获得超过2460个赞
知道小有建树答主
回答量:1190
采纳率:0%
帮助的人:1073万
展开全部
里层的split的结果是1)、2)……6),外层的split函数继续从里层的结果中返回数值。至于函数后的(1)和(0),应该是表示(1)返回子字符串右边的字符串,(0)表示返回子字符串左边的字符串。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叼蛮_钕釨
2009-12-10
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
不懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式