请 EXCEL VBA高手 ,帮忙解释一下 下面这段代码,具体是什么意思?
作者&投稿:司马先 (若有异议请与网页底部的电邮联系)
dim是定义变量,
下面是几个变量写入值。
for是循环
trim是去除首尾空格函数
do while是条件循环
E6\E8\E10单元格分别显示今天、明天、后天的星期数。如E6显示 星期一,E8显示星期二...
其他的代码都比较好解决吧
Sub save() '定义过程名;
Dim ar, ix As Integer '定义变量ar和ix为整型变量;
If [B2] = "甲" Then ix = 2: X = Sheets(ix).Range("A65536").End(xlUp).Row
'Range("A65536").End(xlUp).Row意为当活动单元格为A65536(即A列最下面一个单元格)时,按一次Ctrl+向上键后,新活动单元格的行号;
'若当前工作表的B2单元格里内容为"甲",则为变量ix赋值为2,并将当前工作表后面的第一个(相对位置)工作表里A列执行上述操作后得到的新活动单元格的行号赋值给变量X;
If [B2] = "乙" Then ix = 3: X = Sheets(ix).Range("A65536").End(xlUp).Row
'若当前工作表的B2单元格里内容为"乙",则为变量ix赋值为3,并将当前工作表后面的第二个(相对位置)工作表里A列执行上述操作后得到的新活动单元格的行号赋值给变量X;
ar = Range("a4:h9") '将当前单元格的A4至H9区域中单元格的值赋给变量ar;
If X = 1 Then
er = 1 '若变量X的值为1,则er赋值为1;
Else
For i = 1 To 6
For j = 2 To 8 '若变量X的值不为1,则i从1循环到6,j从2循环到8,即读取A4至H9的每个单元格的值;
If ar(i, j) <> Sheets(ix).Cells(X - 6 + i, j) Then er = 1 Else er = 0
'若第ix个工作表的A4至H9区域内的数值等于当前工作表的A4至H9区域内的数值,则er=1,否则,er=0;
Next j
Next i
End If '结束条件判断;
If er = 1 Then
Sheets(ix).Range("A" & X + 1).Resize(6, 8) = ar
MsgBox "保存成功"
'若er=1,就把ar的值赋给第ix个工作表中从第X行下一行的6*9区域内,并弹出“保存成功”对话框;
Else
MsgBox "你已保存过该数据" '若er不为1,则弹出 "你已保存过该数据"对话框;
End If '结束条件判断;
End Sub '结束过程;
'前面这位知友的回答相当专业,虽然略有瑕疵,但也可谓瑕不掩瑜,多多学习了。
Sub save()
Dim ar, ix As Integer
If [B2] = "甲" Then ix = 2: X = Sheets(ix).Range("A65536").End(xlUp).Row '如果B2="甲" 那么变量ix=2,X=第二张表A列的最后一个有数据单元格行号
If [B2] = "乙" Then ix = 3: X = Sheets(ix).Range("A65536").End(xlUp).Row '如果B2="甲" 那么变量ix=3,X=第三张表A列的最后一个有数据单元格行号
'Range("A65536").End(xlUp).Row 相当于点选Range("A65536") 然后按住Ctrl+向上键 得到的那个单元格的行号
ar = Range("a4:h9") '把Range("a4:h9")赋值给数组ar
If X = 1 Then '判断x是否为1
er = 1 '如果x为1那么er=1(根据上面的情况如果x=1那么A列就只有A1有数据或者A列就没有数据)
Else '如果x不为1
For i = 1 To 6 'i从1到6循环
For j = 2 To 8 'j从2到8循环 也就是ar这个数组的所有数据进行循环
If ar(i, j) <> Sheets(ix).Cells(X - 6 + i, j) Then er = 1 '判断sheets(ix)的最后那部分数据是否为arr也就是看是否已经把数据复制过来了如果数据完全相同那么er=0否则er=1
Next j
Next i
End If
If er = 1 Then '判断er是否为1
Sheets(ix).Range("A" & X + 1).Resize(6, 8) = ar '把ar赋值于Sheets(ix).Range("A" & X + 1).Resize(6, 8)
MsgBox "保存成功" '弹出对话框保存成功
Else
MsgBox "你已保存过该数据" '如果er不为1弹出对话框你已保存过该数据
End If
End Sub
'这段代码其实就是判断[B2]如果为甲就把数据Range("a4:h9")添加到第二张表的最后,如果为乙就添加到第三章表的最后
督章高三: 当用户禁用宏,或者提高宏的安全级别,或者不信任源代码,则楼主的一切就将白费力气! 如果楼主真的想这么做的话,建议使用 Office 提供的 Windows Right Management 管理功能.当然,如果没有专门的服务器才提供这个服务的话,可以试用微软公司提供的试用服务.在这个服务功能中,你可以给指定的人员设置不允许打印,不允许复印,有效期等等功能.当非指定的人员试图去打开你的文件的时候,只能发邮件向你请求权限.
石嘴山市17079861876: 求救 EXCEL中我如何使用宏 请VBA高手帮忙 - ?
督章高三: 先把两个excel同时打开,把第二个excel整体复制粘贴到第一个excel第二个工作簿中,然后关闭第二个excel,选择工具—宏—visual basic编辑器 ,找到 插入—模块,在模块中输入:sub charu() for i = 3 to 4 for j=1 to 65000 sheet1.cells(j,i)=sheet2.cells(j-2,i) next j next i end sub
石嘴山市17079861876: Excel VBA编程 请高手帮忙 - ?
督章高三: range("A1").offset(1)=range("B1") rowsource=ragne("A1").offset(1)不知所云
石嘴山市17079861876: 请高手帮忙写个excel vba程序~?
督章高三: VBA可以实现,我也可以给你编一个.但是,我的原则是,如果Excel自带的公式和功能可以实现,绝不用VBA——它也有很大的局限性,甚至是危害性. 下面给出的方法,只是用VLOOKUP函数和条件格式就可以完成: 假设两个表格在一个工...
石嘴山市17079861876: 请vba excel高手帮忙解决!?
督章高三: Sub copySheet() ThisWorkbook.Sheets(1).Cells.Copy On Error Resume Next ActiveWorkbook.SaveAs "d:\我的文档\工作日志" & Sheets(1).Range("A1").Select ActiveWorkbook.SaveAs "d:\我的文档\工作日志" & Sheets("汇总").Delete End of Sub
石嘴山市17079861876: 请VBA高手帮忙,我要在EXCEL中插入一个控件,每次只要点击这个控件就能实现下面的功能 - ?
督章高三: Option Base 1Sub sort()Dim r As IntegerDim j As IntegerDim k() As IntegerDim tnum As Stringr = [b65536].End(xlUp).RowSet...
石嘴山市17079861876: EXCELVBA请高手帮忙修改代码详细请看附件一段判断调用宏的代 ?
督章高三: 错误在于:If Workbooks("bookaaa").Sheets(1).[e2] = "" Then Workbooks("文件名")中的文件名不能省略扩展名(.xls) 更改后即可. 注意,你附件中的文件为"aaa,xls",要统一. 使用本身的宏,通常直接使用ThisWorkbook对象,不会出现文件名差错,对活动工作簿,可以使用ActiveWorkbook对象. 即: If ThisWorkbook.Sheets(1).[e2] = "" Then 或, If Workbook.Sheets(1).[e2] = "" Then
石嘴山市17079861876: excel表格VBA代码高手请进,帮我优化代码 - ?
督章高三: Private Sub Worksheet_Change(ByVal Target As Range)If Target.Row = 1 Or Target.Cells.Count > 1 Then Exit SubApplication.EnableEvents = FalseSelect Case Target.
石嘴山市17079861876: Excel VBA 高手们些进来帮帮忙~~~ - ?
督章高三: ThisWorkbook.Path \1.mid ALIAS aa") 这句是打开文件路径的.你确信这个路径下一定也旬家里一样有这个音频文件吗...
石嘴山市17079861876: 我有一张excel表,其中有1660个子表,为便于计算要重排序,希望有VBA方面的高手帮我编个排序的代码! - ?
督章高三: Sub px()For i = 1 To 19 For j = 1 To 83 x = i * 83 + j y = (i + 1) * j Sheets(x).Move Before:=Sheets(y)...