【问题标题】:Excel VBA - link rows from different sheetsExcel VBA - 链接来自不同工作表的行
【发布时间】:2012-10-09 19:37:06
【问题描述】:

场景:由于敏感材料,我无法发布实际的工作簿,但我会尽可能解释清楚。

每个工作表都分为分支,即:Sheet2 是分支 2,Sheet3 是分支 3,依此类推。 对于每张纸,列是相同的。 A 列中包含分支编号。 B 列有不相关的信息,所以我只是隐藏该列。 C 列有一个系统编号(特定于每个帐户。

意图:我想创建另一个名为CallOuts 的工作表。 我想复制一些行(来自各个分支)并将它们粘贴到“主工作表”(CallOuts)我可以在CallOuts 工作表上工作,而不是去每个分支。因此,每当我编辑一个单元格时,它也会更新/更改分支表中完全相同的单元格,反之亦然。

问题:我知道 MS Exccel 有一个“选择性粘贴”功能,它可以在其中添加单元格。问题在于它链接了单元格#,所以如果我对主表进行排序,它将将该行替换为错误的分支表。

例如:如果 System# J112 在分支 2 表的第 2 行中,并且我将链接粘贴在主表的第 4 行中,如果我在主表上进行更新然后重新排序它和 System# 现在移动到第 2 行(在主工作表上)第 4 行(在主工作表上)现在将在第 2 行,分支 2 工作表中。

我在想可能是一个宏,我可以在其中复制和粘贴主表中的整行。进行某种类型的案例选择以检查 A 列中的哪个分支,然后在分支表上找到相同的系统 #,然后粘贴整行。

我的 VBA 水平充其量只是新手,因此我们将不胜感激。

【问题讨论】:

    标签: excel vba copy selection


    【解决方案1】:

    好的,所以我在下面看到了您的尝试。我不确定您的代码是如何工作的,但似乎您走在了正确的轨道上。但是,我认为 Case 语法不适合这种情况。您只需要一个宏来读取“CallOuts”表中的内容并使用该数据更新您的各个分支表。这个宏应该适合你:

    Sub UpdateRecordsFromMasterSheet()
    
    Dim wksht As Worksheet
    Dim wkb As Workbook
    Dim row As Range
    Dim Row_to_Update As Range
    
    Dim sysnum As Variant
    
    Set wbk = ThisWorkbook
    
    Application.ScreenUpdating = False
    
    For Each row In Sheets("CallOuts").UsedRange.Rows
        row.EntireRow.Copy
        sysnum = row.Cells(1, 3).Value
        For Each wksht In ActiveWorkbook.Worksheets
            For Each Row_to_Update In wksht.UsedRange.Rows
                If Row_to_Update.Cells(1, 3).Value = sysnum Then
                    Row_to_Update.PasteSpecial
                End If
            Next Row_to_Update
        Next wksht
    Next row
    
    Application.ScreenUpdating = True
    
    End Sub
    

    这假设您在“C”列中有您的系统编号。所以这就是我的想象:每次您为员工分配一堆行时 - 您的员工会更新这些行 - 然后您将这些数据粘贴回“CallOuts”表中。然后运行此宏,它将根据“CallOuts”表中的内容更新各个分支表。

    如果你是一个有视觉效果的人,它会是什么样子:

    这是更新后的标注表:

    这是分支在宏之前的外观:

    这是宏运行后更新的分支:

    试一试,告诉我它是如何工作的。注意:这只是向您展示如何执行此类操作的开始 - 您可以通过使宏循环通过员工提交给您的实际工作簿来提高此过程的效率,这样您就不必复制和粘贴每次都将数据放入您的“CallOuts”表中。祝你好运。

    【讨论】:

    • 好的,所以我会尽力解释布局。每张表都是分支#,所有分支都有第1行作为这个标题:ColumnA = Br#(Branch#); ColB = 2 选项下拉列表; ColC = CS#(客户系统#); ColD = 最后检查日期; ColE = 帐户状态(下拉菜单),然后 ColF 到 Z 是帐户特定信息,如电话号码、姓名等。在 col E 中是带有下拉菜单的帐户状态;其中一种状态是“需要呼叫”,我们必须联系客户。超过 10,000 个帐户分布在 84 个分支机构中。
    • 我希望将所有“需要通话”的帐户放在另一张纸上,以便有人拨打电话。如果通话完成,那么我将编辑状态。我所指的反之亦然部分是,如果我在分支表上进行编辑,它也会在主表上自动更改它。但是,如果我以后不再需要母版表时可以以某种方式反转效果,则不需要这部分。
    • 我关心的主要问题是有时我需要对主表进行排序。如果我在 excel 中使用特殊的“粘贴链接”,system# 将不再位于正确的分支表中。所以我在想当我需要更新分支表时我可以执行一个宏,宏将复制整行数据(在主控中)找出它来自哪个分支并在该表中找到匹配的系统#然后粘贴整行。然后它会回到主表并执行下一个。
    • 因此您似乎正在尝试找到一种方法来允许某人(或许多人)在帐户信息列表上进行数据输入。然后稍后将该数据合并到帐户信息的主工作簿中 - 这样做不会创建具有不同信息的重复数据行。这是许多编程情况下的常见问题“多个用户如何编辑相同的信息?” “哪个优先?”。最常见的答案并不复杂。他们让一个用户一次编辑某些内容 - 他们将其他用户锁定在该用户完成之前。
    • 所以你有几个选择。现在,您可以使用 Excel 执行此操作的一种方法是将所有分支拆分为单独的工作簿 - 这样您就可以为每个人分配一个分支,他们只会处理该分支。后来,有一些宏可以将所有单独的工作簿再次合并到一个工作簿中。如果您愿意,可以使用宏将工作簿中的所有工作表合并到一张工作表中。因此,如果您想这样做,则可以这样做。我假设您将有多个人同时执行此操作。所以这是我推荐的最佳选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 2016-01-02
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多