我目前有一个excel文件,其中包含5张表,2018年投标,项目投标,项目获奖,项目损失,项目完成。
我所在部门的大部分工作都是在2018年的投标中完成的,其他的表格都是上层管理人员的明细。
2018年投标包含我们所有的项目,A栏包含“项目状态”,1,2,3或4.1。1=项目投标,2=项目获奖,3=项目失败,4=项目完成。
目前,我有一个代码,当我在"2018 Bids“表中输入一个新的行项目,并为其分配一个"Project Status”编号时,该行将在相应的工作表中重复。太棒了!
有两个问题,当行项目在"2018 Bids“中更新时,它不会在相应的工作表中更新;当项目状态改变时,行项目不会从旧工作表中删除(例如。一个项目从“投标”变为“获奖”,我将“项目状态”更新为"2",它仍然存在于“项目投标”中。)
所有工作表中的列都完全相同。寻找一段代码,将交叉检查两列,都“项目状态”和“客户ID”。如果"2018 Bids“表中的行包含与"Projects Bid”中的行相同的项目状态和客户ID,则会从2018 bids中复制该行,并将其粘贴到"Projects Bid“中相应行的顶部。如果存在匹配的客户ID,但项目状态编号不匹配,则删除该行。我认为最好的方法是在每个工作表上添加一个按钮来更新它?如果这让人困惑,我很抱歉,这是我无法理解的!
非常感谢
用于复制行的代码
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Row > 12 Then
Dim DestRow As Long
Select Case Target.Value
Case 1
DestRow = Sheets("Projects Bid").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row
Debug.Print Sheets("Projects Bid").Range(Sheets("Projects Bid").Cells(DestRow, "A"), Sheets("Projects Bid").Cells(DestRow, "M")).Address
Sheets("Projects Bid").Range(Sheets("Projects Bid").Cells(DestRow, "A"), Sheets("Projects Bid").Cells(DestRow, "M")).Value = Range(Cells(Target.Row, "A"), Cells(Target.Row, "M")).Value
Case 2
DestRow = Sheets("Projects Awarded").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row
Sheets("Projects Awarded").Range(Sheets("Projects Awarded").Cells(DestRow, "A"), Sheets("Projects Awarded").Cells(DestRow, "M")).Value = Range(Cells(Target.Row, "A"), Cells(Target.Row, "M")).Value
Case 3
DestRow = Sheets("Projects Lost").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row
Sheets("Projects Lost").Range(Sheets("Projects Lost").Cells(DestRow, "A"), Sheets("Projects Lost").Cells(DestRow, "M")).Value = Range(Cells(Target.Row, "A"), Cells(Target.Row, "M")).Value
Case 4
DestRow = Sheets("Projects Completed").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row
Sheets("Projects Completed").Range(Sheets("Projects Completed").Cells(DestRow, "A"), Sheets("Projects Completed").Cells(DestRow, "M")).Value = Range(Cells(Target.Row, "A"), Cells(Target.Row, "M")).Value
End Select
End If
End If
End Sub发布于 2018-03-03 06:33:28
如果包含以下代码,则当预定义区域中的单元格发生更改时,将执行代码。只需在执行之前定义此范围:
Sub WorksheetExecute(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("YOUR RANGE")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
Worksheet_Change
End If
End Sub祝你好运
https://stackoverflow.com/questions/49077758
复制相似问题