我目前有一份excel文件,其中包含5张,2018年投标,项目投标,获奖项目,项目遗失,项目已完成。
我的部门工作大部分是在2018年的投标中完成的,其他表是上层管理人员的故障。
2018年投标包含我们的所有项目,A栏包含“项目状态”,1,2,3或4. 1 =项目投标,2 =项目获奖,3 =项目丢失,4 =项目已完成。
目前我有一个代码,当我在“2018 Bids”工作表中添加一个新的行项目并为其分配一个“项目状态”编号时,该行在相应的工作表中重复。大!
两个问题,当行项目在“2018年投标”中更新时,相应的工作表中没有更新,当项目状态发生变化时,行项目不会从旧工作表中删除(示例。项目从“出价”移动“to”获奖“,我将”项目状态“更新为”2“,它仍然出现在”项目投标“中
所有工作表中的列完全相同。寻找可以交叉检查两列的代码,包括“项目状态”和“客户ID”。如果“2018出价”表格中的行包含与“项目出价”中的行相同的项目状态和客户ID,则该行将从2018个出价中复制并粘贴到“项目出价”中相应行的顶部。如果存在匹配的客户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
如果包含以下代码,则当预定义范围中的单元格发生更改时,将执行代码。只需在执行前定义此范围:
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
祝它好运