我有一个Excel工作簿,其中有两个工作表:“未完成”和“完成”。在“未完成”工作表中,当Z列更改为“完成”时,我希望WorkSheet_Change函数将当前行移动到“完成”工作表中。而在“完成”工作表中,我希望WorkSheet_Change函数在Z列更改为Outstanding时将当前行移动到Outstanding工作表。如果在VBA中将宏放在某个工作表下,则可以对该工作表执行此操作,但如果宏位于工作簿的模块下,则无法使其工作。由于无法在一个工作簿的多个宏中使用WorkSheet_Change(即不能只在每个工作表下创建相同的宏)我必须弄清楚如何使它在模块下工作。这是当它在一个工作表下工作时的代码,但是它只对那个工作表有效。当它在工作簿的模块中时,我如何让它对两个工作表都有效?
'Remove Case Sensitivity
Option Compare Text
Sub Worksheet_Change(ByVal Target As Range)
' On Error Resume Next - I took this out of this code that I found on the internet because it apparently causes problems
Application.EnableEvents = False
'If Cell that is edited is in column Z and the value is Complete then
If Target.Column = 26 And Target.Cells(1).Value = "Complete" Then
'Define last row on Complete worksheet to know where to place the row of data
LrowCompleted = Sheets("Complete").Cells(Rows.Count, "A").End(xlUp).Row
'Copy and paste data
Range("A" & Target.Row & ":Z" & Target.Row).Copy Sheets("Complete").Range("A" & LrowCompleted + 1)
'Delete Row from the ActiveSheet
Range("A" & Target.Row & ":Z" & Target.Row).Delete xlShiftUp
ElseIf Target.Column = 26 And Target.Cells(1).Value = "Outstanding" Then
'Define last row on Outstanding worksheet to know where to place the row of data
LrowCompleted = Sheets("Outstanding").Cells(Rows.Count, "A").End(xlUp).Row
'Copy and paste data
Range("A" & Target.Row & ":Z" & Target.Row).Copy Sheets("Outstanding").Range("A" & LrowCompleted + 1)
'Delete Row from the ActiveSheet
Range("A" & Target.Row & ":Z" & Target.Row).Delete xlShiftUp
End If
Application.EnableEvents = True
End Sub
2条答案
按热度按时间dxxyhpgq1#
工作簿工作表变更:复制行
ThisWorkbook
模块中。xjreopfe2#
我做过这个测试。
1.在通用模块Module1中,我们创建子例程
DoWorksheet_Change()
,使用ActiveSheet
来标识我们正在编辑的工作表。1.在Outstanding和Complete表单私有模块中,我们放置相同的代码,调用公共宏
DoWorksheet_Change()
。