永发信息网

请 EXCEL VBA高手 ,帮忙解释一下 下面这段代码,具体是什么意思?

答案:2  悬赏:70  手机版
解决时间 2021-02-15 04:13
  • 提问者网友:溺爱和你
  • 2021-02-14 23:31
我对VBA只通了9窍,请问这段EXCEL vba代码具体是什么意思?为什么要这样使用?麻烦高手详细解释一下。高分跪谢了。

Sub save()
Dim ar, ix As Integer
If [B2] = "甲" Then ix = 2: x = Sheets(ix).Range("A65536").End(xlUp).Row
If [B2] = "乙" Then ix = 3: x = Sheets(ix).Range("A65536").End(xlUp).Row
ar = Range("a4:h9")
If x = 1 Then
er = 1
Else
For i = 1 To 6
For j = 2 To 8
If ar(i, j) <> Sheets(ix).Cells(x - 6 + i, j) Then er = 1
Next j
Next i
End If
If er = 1 Then
Sheets(ix).Range("A" & x + 1).Resize(6, 8) = ar
MsgBox "保存成功"
Else
MsgBox "你已保存过该数据"
End If
End Sub
最佳答案
  • 五星知识达人网友:鸠书
  • 2021-02-15 01:06
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")添加到第二张表的最后,如果为乙就添加到第三章表的最后
全部回答
  • 1楼网友:往事埋风中
  • 2021-02-15 02:37
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  '结束过程; '前面这位知友的回答相当专业,虽然略有瑕疵,但也可谓瑕不掩瑜,多多学习了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯