首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >镜像excel工作表中的行VBA不是公式

镜像excel工作表中的行VBA不是公式
EN

Stack Overflow用户
提问于 2018-03-03 05:34:29
回答 1查看 318关注 0票数 0

我目前有一个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,但项目状态编号不匹配,则删除该行。我认为最好的方法是在每个工作表上添加一个按钮来更新它?如果这让人困惑,我很抱歉,这是我无法理解的!

非常感谢

用于复制行的代码

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-03-03 06:33:28

如果包含以下代码,则当预定义区域中的单元格发生更改时,将执行代码。只需在执行之前定义此范围:

代码语言:javascript
复制
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

祝你好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49077758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档