【问题标题】:Copy Values Between Tables on Cell Change在单元格更改时在表之间复制值
【发布时间】:2016-07-11 15:24:44
【问题描述】:

当“已调用”列下的该行中的值更改为“Y”时,我试图将第一张表上的一行中的值复制到另一张表上的另一个表中。每个表之间的列不匹配,因此我需要定义哪个列在另一个表中的位置。我想在第二个表中创建一个新行来粘贴,并且只复制其值更改为“Y”的行中的值。这是我最简单的代码来传达我在做什么,但我尝试了很多东西,包括一个数组。 “Table1”在第一张纸“Master”上,Table2 在第二张纸“Called List”上。

编辑:这是我的新代码,它成功地将值复制到“Table2”上的正确列,但它复制了所有行,而不仅仅是将“Called”更改为“Y”的当前行。有没有办法仅将“Table1”中插入“Y”的行复制到“Table2”上的新行?

 Private Sub Worksheet_Change(ByVal Target As Range)

   'Application.ScreenUpdating = False
Application.EnableEvents = False 'to prevent endless loop


Dim KeyCells As Range
Dim NewRow As ListRow

Set KeyCells = Range("Table1[Called]")

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then


     If Target.Value = "Y" Then

        Set NewRow = Worksheets("Called List").ListObjects("Table2").ListRows.Add '(AlwaysInsert:=True)

        Worksheets("Called List").Range("Table2[Lessor]").Value = Worksheets("Master").Range("Table1[Lessor]").Value
        Worksheets("Called List").Range("Table2[Phone]").Value = Worksheets("Master").Range("Table1[Phone Number]").Value
        Worksheets("Called List").Range("Table2[Address]").Value = Worksheets("Master").Range("Table1[Address]").Value
        Worksheets("Called List").Range("Table2[Sec]").Value = Worksheets("Master").Range("Table1[Sec]").Value
        Worksheets("Called List").Range("Table2[Twn]").Value = Worksheets("Master").Range("Table1[Twn]").Value
        Worksheets("Called List").Range("Table2[Rng]").Value = Worksheets("Master").Range("Table1[Rng]").Value
        Worksheets("Called List").Range("Table2[County]").Value = Worksheets("Master").Range("Table1[County]").Value
        Worksheets("Called List").Range("Table2[Legal Desc]").Value = Worksheets("Master").Range("Table1[Tract]").Value
        Worksheets("Called List").Range("Table2[Gross Acres]").Value = Worksheets("Master").Range("Table1[Gross Acres]").Value
        Worksheets("Called List").Range("Table2[Assumed NMA]").Value = Worksheets("Master").Range("Table1[Assumed NMA]").Value
        Worksheets("Called List").Range("Table2[Comments]").Value = Worksheets("Master").Range("Table1[Notes]").Value

    End If
 End If


Application.EnableEvents = True
'Application.ScreenUpdating = True

 End Sub

【问题讨论】:

  • 您当前的代码有什么问题或错误信息?
  • 我不明白你想用If Not Application.Intersect(KeyCells, Range("Table1[Called]")) Is Nothing 完成什么。您没有将KeyCells 设置为该特定表吗?你不应该检查与Target 范围相交吗?
  • 没有错误,就是不运行,这比错误更令人沮丧,因为我不知道哪里出了问题。
  • 根据我之前的评论,从您提供的代码来看,条件永远不会为真,因为 Range("Table1[Called]") 与自身的相交永远不会是什么。也许如果桌子是空的?再次不确定您要使用该条件检查什么。
  • 我正在尝试检查“已调用”列下的单元格是否更改为“Y”,如果是,则该当前行的所有相关值都将复制到“Table2”上的新行"

标签: excel vba


【解决方案1】:

" 有没有办法仅将 "Table1" 中插入 "Y" 的行复制到 "Table2" 上的新行?"

1) "Target.Row" 是您在主工作表上的参考行,在您的 "Worksheets("Master").Range("Table1[Notes]").Value" 中使用它声明

2) "NewRow" 是您在“被调用列表”表上的参考行,在您的“工作表(“被调用列表”)**.Cells(Range("Table2[Lessor] ").Value" 声明

3) 如果您将 Table?[...] 转换为命名范围,您可以使用以下内容:

Range("T2_Lessor").Cells(NewRow).Value = Range("T1_Lessor").Cells(KeyCells.Row).Value

例如。命名范围:

"Table1[Lessor]" 变为 'T1_Lessor' =OFFSET('Master'!$B$2,0,0,COUNTA('Master'!$B:$B),1)

“Table2[Lessor]”变为 'T2_Lessor' =OFFSET('调用列表'!$B$2,0,0,COUNTA('调用列表'!$B:$B),1)

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2021-09-08
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    相关资源
    最近更新 更多