师傅,您好!我有一个关于Excel_VBA的问题,请您能帮我解惑,在这里非常感谢您了!!!

我的问题是:在Excel中,有Sheet1与Sheet2两张表格,在Sheet1表中,分别有四列,A列,B列,C列,D列,(D列为数据有效性列,值分别为“取消”与“确定”),在C列中,某一行单元格的值为“OK”时,同时在D列中,选择该行D列的值为“确定”时,Excel就自动触发宏,复制本行(A列,B列,C列,D列)的数据到 Sheet2表中的第1行,(注意:复制到Sheet2表中的数据必须要是“选择性粘贴—数值型”的),又当Sheet1表中,某行数据C列的单元格又为“OK”时,同时在D列中,选择该行D列的值又为“确定”时,Excel又自动触发宏,自动复制本行的数据到 Sheet2表中的第2行,(此时,不应覆盖Sheet2表中第1行的数据),以此类推,直到:Sheet1表中的C列数据没有“OK”值 与 Sheet1表中的D列数据没有“确定”值为止,不知道怎么样来实现这个功能,非常感谢您的解惑!由于我现在刚开始学习VBA不久,现在对VBA不熟悉,我自己试验了1个多星期了,就是实现不了这个功能,谢谢您了!
最新回答
陌上柳絮倾城雪

2024-06-24 07:18:20

你用下面代码就可以了

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
    If Target.Column = 4 And Target.Value = "确定" Then  '第四列D,并且值为“确定”
        If Target.Offset(, -1) = "OK" Then 'D列同行C列值为“OK”
            With Sheet2
                x = .Range("a65536").End(xlUp).Row + 1 '确定sheet2表的A列最后一行(要粘贴的位置)
                .Range("a" & x & ":d" & x) = Target.Offset(, -3).Resize(, 4).Value '给目标位置赋值
            End With
        End If
    End If
End If
End Sub

利用工作事件change来判断是哪一个位置被修改(或写入数据)

代码中已经加了注释,希望能帮到你。

随你洒脱

2024-06-24 15:06:39

Private Sub Worksheet_Change(ByVal Target As Range)
使用这个事件。程序思路为
1 单元格更改触发宏
2 判断是否有某一行符合条件
3 如果无退出,有进入下一步
4 找到第一个符合条件的行数,复制内容
5 判断sheet2已有行数,在其后使用pastespecial进行粘贴
6 更改原始行的状态标示
7 退出循环
接住路过的风

2024-06-24 12:15:50

你可以试试下列的Excel文件,希望对你有所帮助

追问
师傅,您好,真心的非常感谢您帮助我!耽误了您的时间,不好意思了!我下载了您给我的Book1电子表格,但是结果可能不是我想要的那种,请问能否留一个您的QQ号?我传一个电子表格给您,您可否帮我看一下?或者您加我QQ:237524718,非常感谢您了!
追答
那你把你需要的是什么样的结果说清楚就可以了呀,我的手机停机了,QQ登不了,很抱歉哈
追问
师傅,非常感谢您!虽然问题还没有解决,但是真的很感激您愿意抽出时间帮助我,谢谢!
追答

你再试试附件的文件,看看是不是你所要的

追问

师傅,非常的感谢您啊!不知道说什么来代表我的谢意!耽误了您的时间。

我下在了您给我的Book2文件,在Sheet1表中,符合条件的数据还是不会自动复制到Sheet2表中,我要怎么弄,您才能收到我给您的电子表格?发您的邮箱可以吗?我现在实发一张截图给您,看看您能否收到截图

追答
如果你不是很急的话可以发给我,我只有等晚上下班回去才能帮你解决,因在公司有需要保密的东西,外部邮箱是登不了的,我的手机又停机了,目前看不到你的邮件,如果你很急着用的话可以找别人帮你解决,我的Q:872914534