vba代码求助,将修改区域复制到数组中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vba代码求助,将修改区域复制到数组中?相关的知识,希望对你有一定的参考价值。

当前表格操作区域为b3:z100
建立二维数组arr(3 to 100, 2 to 25)
我需要触发以下两个事件
如果修改了 e3 单元格数据 则把修改的数据存入arr(3,5)
如果是剪贴板复制粘贴到range(cells(5, 6), cells(8, 10)) 则自动赋值给数列arr(5,6)到arr(8, 10) 位置

最近在研究事件,请老师指导一下
下面截图代码可以实现在当前工作表复制并在目标表格更新,但是中间还没等我处理数据就完成了

根据你的需求,事件处理代码仅处理了目标表格的更新,但是未进行数组的赋值,可用循环进行全数组的重读,把所有表格数据B3:Z100(此区域对应的数组下标似乎应该是arr(3 to 100, 2 to 26))赋值给数组arr。这样你想要的2个事件其实是可以当做一个来处理,只要数据表有变化,程序都更新arr 数组的数据。
后边的问题提到“但是中间还没等我处理数据就完成了”这一句我没搞清楚你想要做什么数据处理,在你的代码里Applicatiion.EnableEvents = False已经锁定了程序在运行期间不再响应其他事件,因此再做其他数据处理系统识别为其余事件默认是不会有反应的。追问

我意思是arr数组只是暂时存储数据,经过计算以后再更新数据到目标表格

追答

如果是经过计算后再更新到目标表格,可以2个方式,1是在事件处理程序中加入计算过程的代码;2是计算完成后增加一个的事件处理程序来更新目标表格。

参考技术A 关于楼主截图的事件代码做了以下简化(代码针对的表格跟sheet1不是一个表格,如果是一个表格,代码就多余了)
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Copy Sheet1.Range(Target.Cells(1).Address)
Application.EnableEvents = True
End Sub

Application.EnableEvents 如果sheet1表格没有对应事件的话,这段代码似乎多余。不过要整体考虑文件结构。没有文件很多内容对应不上的。
上面关于数组使用的描述,不知道是要解决什么问题的?
所以上下逻辑没有对应上,不好进一步说明的

利用vba怎样编写将工作表中第三行到最后一行(不确定)的数据复制并插入到另一个工作表的第二行前?

插入表中的原第二行数据下移到表尾

原则上VBA可以做到,但是你没有说清楚什么才叫做新的,只看日期吗,只看序号吗,我就假设你的A列是序号,用序号判断吧,程序代码如下:

参考技术A

将工作表中1第三行到最后一行(不确定)的数据复制并插入到工作表2的第二行前,VBA代码为:

Sub x()
    Sheets(1).Range("3:" & Sheets(1).UsedRange.Rows.Count).Copy
    Sheets(2).Range("2:2").Insert
End Sub

参考技术B Sub 插入复制()
   X = Range("a65536").End(xlUp).Row
       Rows("3:" & X).Select
    Selection.Copy
    Sheets("Sheet2").Select
    Rows("2:2").Select
    Selection.Insert Shift:=xlDown
End Sub

复制到Sheet1表

将Sheet1 第3行开始的数据插入到Sheet2第2行

以上是关于vba代码求助,将修改区域复制到数组中?的主要内容,如果未能解决你的问题,请参考以下文章

vba怎么复制指定内容到指定工作表?

求助!请教VBA高手! 有没有哪位高手有编制过调用翻译软件实现在excel中,英文译成中文的?

如何将单元格区域作为表格从 Excel 复制到 PowerPoint - VBA

利用vba怎样编写将工作表中第三行到最后一行(不确定)的数据复制并插入到另一个工作表的第二行前?

用VBA编写复制功能,能不能只粘贴值,不粘贴格式

在 VBA 中使用数组复制和粘贴