首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我在带有标题“Status”的表中将下拉值更改为“已完成”(这将对整个列运行),但只能对单元格执行。

如果我在带有标题“Status”的表中将下拉值更改为“已完成”(这将对整个列运行),但只能对单元格执行。
EN

Stack Overflow用户
提问于 2021-03-02 07:51:13
回答 2查看 76关注 0票数 1

我正在尝试编写宏代码,当在带有标题"Status“的表中的列下的值下降时,更改为”已完成“,那么Sub Completedarc将自动运行。当操作状态在一列中更改为已完成时,而不能在表中的整个列中完成时,我可以编写代码。另外,Sub Completedarc()只是在另一个工作表中剪切粘贴值,而不是删除超呼行,它是空的。

代码语言:javascript
运行
复制
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = Range "Open_Project_Details[[#Headers],[Status]]") Then
   Select Case Target.Value
      Case "Completed"
        Call Completedarc
   End Select
 End If
End Sub

代码语言:javascript
运行
复制
Sub Completedarc()
Rows(ActiveCell.Row).EntireRow.Cut
Sheets("Completed Archive").Select
Range("Completed_Archive[[#Headers],[Stack Rank]]").Select
Selection.End(xlDown).Select
If ActiveCell = "" Then
   ActiveSheet.Paste
Else
   ActiveCell.Offset(1).Activate
   ActiveSheet.Paste
End If
End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-02 08:40:21

如果我很好地理解了你的问题,这个改变的事件会做你需要做的事情:

代码语言:javascript
运行
复制
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Target.ListObject Is Nothing Then
    If Intersect(Target.ListObject.HeaderRowRange, _
            Target.EntireColumn).value = "Status" Then
        If Target.value = "Completed" Then
             Call Completedarc(Target) 'added an argument...
        End If
    End If
 End If
End Sub

关于Completedarc,我不明白该做些什么。您的"Open_Project_Details“表是否从A:A列开始,并且希望在"Completed_Archive”表/列"Stack“的第一个空单元格中复制表Target行?是否要复制它,在表的最后一行之后插入新行?

如果最后一个假设是您想要的,请使用下面的代码:

代码语言:javascript
运行
复制
Sub Completedarc(Target As Range)
  Dim TRows As Long, shCA As Worksheet
  
  Set shCA = Worksheets("Completed Archive")
  TRows = shCA.Range("Completed_Archive[Stack Rank]").cells.count 
  If TRows = 1 Then TRows = TRows + 1
  Intersect(Target.ListObject.DataBodyRange, Target.EntireRow).Copy _
                 shCA.Range("Completed_Archive[Stack Rank]").cells(TRows)
  'the next code line only selects the row to be deleted. If it selects what you need
  'you would only replace `Select` with `Delete` and the code will delete such rows
  Target.EntireRow.Select 'Delete
End Sub
票数 0
EN

Stack Overflow用户

发布于 2021-03-02 09:13:44

剪切/粘贴表格行的单元格变化

代码语言:javascript
运行
复制
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    completeArchive Target
End Sub

Sub completeArchive(ByVal Target As Range)
    If Target.Cells.CountLarge = 1 Then
        Dim ws As Worksheet: Set ws = Target.Worksheet
        Dim rg As Range
        Set rg = Intersect(Target, ws.Range("Open_Project_Details[Status]"))
        If Not rg Is Nothing Then
            If rg.Value = "Completed" Then
                Set rg = Intersect(ws.Rows(rg.Row), _
                    ws.Range("Open_Project_Details"))
                With ws.Parent.Worksheets("Completed Archive")
                    With .Range("Completed_Archive[Stack Rank]")
                        rg.Copy .Cells(.Rows.Count + 1)
                        rg.Delete
                    End With
                End With
            End If
        End If
    End If
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66435310

复制
相关文章

相似问题

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