VBA的vbaworksheet change_change限定条件的多功能复制粘贴

拒绝访问 | www.excelpx.com | 百度云加速
请打开cookies.
此网站 (www.excelpx.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3e336da5a62148ad-ua98).
重新安装浏览器,或使用别的浏览器他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)VBA有条件复制、粘贴_百度知道
VBA有条件复制、粘贴
E区域粘贴到表2,如图,并复制各个相同向上2位、向下3位A查找E列最后的一个数的相同数
我有更好的答案
)&&&&&&&&&&&&End&*&n&+&1&s2.Cells(6&s1&&nbsp.[e65536].End(3),&2&Then&&&&&&&&&&&&&&&&s1;&&&&&&&&&&As&nbsp,请详细查阅附件;);As&&&&&If&&&nbsp.Copy&&NextEnd&Sub&HOHO;&&If&&s1.Cells(i,&5)&=&nbsp.Row&&&&For&If&&nbsp.BorderAround&=&s1;&&&&nbsp.Cells(1;n&As&Long&&&&Dim&&nbsp,&nbsp,&5).Copy&s2;i&=&nbsp.Cells(1;&&&m&As&Long,&nbsp,&nbsp.Cells(2;&&&s2&&&&-&5,&&A&If&&&s2.Cells(6&nbsp.Resize(6,&5);&Else&&&i&=&nbsp.[a:e];-&2,&&A&=&Sheet1&&&&Set&&&nbsp.Cells(3;&&&1&Then&&&&&&&&&&&&&&&&s1;A&)&&&&&&&&s2&nbsp,&ElseIf&nbsp,&Wi&=&s1.Cells(m,&5)&Then&&&&&&&&&&&&n&=&Sheet2&&&&s2;&&&&&nbsp.Resize(6,&5);&nbsp,&&s1.Cells(i&s1&&-&5,&&A&);Weight:=xlThick&&&&&&&&End&5).Copy&s2;Worksheet&&&&Set&nbsp.ClearContents&&&&m&&&&&*&n&=&n&&nbsp,&A&).Resize(5Sub&xx()&&&&Dim&A&)&&&&&i&As&LA&).Resize(4;&1&To&m&&&nbsp
sa.cells(I+3,5).这句红字,提示缺:=号
HOHO,我老婆的欢乐豆输光了,刚才是在IPAD上打的,看她不用电脑了,所以打了一半就提交答案了,现在电脑上把代码补充完整了,请下载附件测试!
来自:求助得到的回答
采纳率:76%
来自团队:
为您推荐:
其他类似问题
vba的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Excel vba worksheet_change事件_百度知道
Excel vba worksheet_change事件
Private Sub Worksheet_Change(ByVal Target As Range)
If Sheets(&检查标记&).Cells(2, 1).Value = 1 Then
Sheets(&检查标记&).Unprotect Password:=&123&
Sheets(&检查标记&).Cells(1, 1).Value = &标记&
我有更好的答案
增加一行判断函数试试:Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Target.Cells.Row = 2 And Target.Cells.Column = 1) Then Exit Sub
If Sheets(&检查标记&).Cells(2, 1).Value = 1 Then
Sheets(&检查标记&).Unprotect Password:=&123&
Sheets(&检查标记&).Cells(1, 1).Value = &标记&
Sheets(&检查标记&).Cells(2, 1).Value = 0
Sheets(&检查标记&).Protect Password:=&123&
End IfEnd Sub
首先:改变的不是检查标记这个工作表,Change事件是别的工作表的;其次Target.cells.row&1时Exit sub不能终止Change事件(已经测试过)
采纳率:35%
来自团队:
.If (Sheets(&quot.Cells(2;).Value = 1) Then.else.;检查标记&quot, 1)
其实解决起来很简单,加一句代码就可以了,Application……
先不启用宏,替换完了再启用宏
......这个解决方案还不如直接让客户去手动操作呢......
现在是你要操作数据,不是客户吧?上述代码的意思是:当A2的值为1时取消工作表保护。当A2值为0时,启用工作表保护。与你要替换的其他数据没有任何关系,为何要反复地去执行这个操作?你要替换数据,A2必定是1,否则无法替换。每替换一个数,工作表要执行取消保护一次,何苦呢,关掉宏,处理好你的工作表再开启宏,不是什么麻烦也没有了。刚写错了,补充下:是当A2为1是,先取消保护,再标注,再启用保护,每变更一个数都要如此一个循环。
倒地,你程序都没看清......这个是别的工作表的change事件,当触发时,如果检查标记工作表第二个单元格值为0时候 退出,当值为1时,先取消工作表保护,然后将值替换成0,再添加工作表保护......
其他1条回答
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Excel中Worksheet_SelectionChange事件与粘贴冲突
在Excel2003中如果你在"Worksheet_SelectionChange"事件中写了VBA代码的话粘贴功能就会失效.还没有一个很好的解决方案,据说是2003的Bug,下面的代码可以暂时解决这个问题,不过这个代码本身有一些小Bug:整行选的话会报错,把它catch掉就可以了:-)。
但是对正常使用不会有太大影响。
There is a temp solution for this problem:
//------------------------------------------------------------------------------------
Extra code in Worksheet_SelectionChange:
Private Sub Worksheet_SelectionChange( Target
'/错误处理,发生异常时转到err
Dim rngCutCopy As Range
Dim iCutCopymode As Integer
Set rngCutCopy =
Set rngCutCopy = Nothing
iCutCopymode =
//Your Code
If iCutCopymode = xlCopy Then
rngCutCopy.Copy
iCutCopymode = xlCut Then
rngCutCopy.Cut
'/异常时不做任何处理,只是为了屏蔽对话框
//-------------------------------------------------------------------------------
Extra code in modules
Option Explicit
'/锁定内存中指定的内存块,并返回一个地址值,令其指向内存块的起始处
Private Declare Function
Lib "kernel32" ( _
As Long) _
'/解锁先前被锁定的内存,使得指向内存块的指针无效
Private Declare Function
Lib "kernel32" ( _
As Long) _
'/得到的是内存块的大小
Private Declare Function
Lib "kernel32" ( _
As Long) _
'/打开剪切板
Private Declare Function
Lib "user32" ( _
As Long) _
'/关闭剪切板
Private Declare Function
Lib "user32" () _
'/获取剪切板数据
Private Declare Function
Lib "user32" ( _
wFormat As Long) _
'/将一块内存的数据从一个位置复制到另一个位置
Private Declare Sub
Lib "kernel32" _
Alias "RtlMoveMemory" ( _
Destination As Any, _
Source As Any, _
'//--------------------------------------------------------------------------------------//
'//-----用于取得处于复制或者剪切状态的单元格区域的函数------//
'//--------------------------------------------------------------------------------------//
Public Function
() As Range
Dim bytData() As Byte, hMem As Long, nClipsize As Long, lpData As
Dim sSource As String, sTemp() As String
Dim sWorkbook As String, sSheet As String, sRange As String
'/打开剪切板
'/取得剪切板中有关Excel单元格复制的信息数据
'/假如存在数据
If CBool(hMem) Then
'/取得数据内存的大小
nClipsize =
'/锁定此内存块,并返回内存块的起始地址
If lpData && 0 Then
'/从新定义数组大小
bytData(0 To nClipsize - 1) As Byte
'/将内存复制到数组中
bytData(0),
lpData, nClipsize
'/将二进制数组转换成字符串
(bytData, vbUnicode)
'/拆分字符串
sTemp = Split(sSource, Chr(0))
'/假使在拆分得到的字符串2中找到"\"(即工作薄已经保存)If
(sTemp(1), "\") Then
'/取得工作薄的名称
sWorkbook = Mid(sTemp(1),
(sTemp(1), "\") + 1)
'/取得工作薄的名称
sWorkbook = sTemp(1)
'/取得工作表的名称
sSheet = Left(sTemp(2),
(sTemp(2), "!") - 1)
'/取得单元格区域的地址
_To_A1(Mid(sTemp(2),
(sTemp(2), "!") + 1))
'/取得处于剪切或者复制状态的单元格
= Workbooks(sWorkbook).Sheets(sSheet).Range(sRange)
'/解锁 内存
'/假如未处于复制或者剪切状态
'/关闭剪切板
Exit Function
Debug.Print err.Number & err.Description
End Function
'//--------------------------------------------------------------------------
'//----用于将单元格的R1C1引用样式转换为A1样式------
'//--------------------------------------------------------------------------
Private Function
_To_A1( As
String) As String
Dim sTemp() As String
sTemp = Split( ,
_To_A1(sTemp(0)) & ":" &
_To_A1(sTemp(1))
sTemp = Split( ,
= Chr(64 + sTemp(1)) & sTemp(0)
End Function
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 worksheet change事件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信