场景:由于敏感 Material ,我无法发布实际的工作簿,但我会尽可能地解释它。
每个工作表都分为分支,即:Sheet2 是分支 2,Sheet3 是分支 3,依此类推。
对于每张纸,列是相同的。
A 列中包含分支编号。
B 列有不相关的信息,所以我只是隐藏该列。
C 列有一个系统编号(特定于每个帐户。
意图:我想创建另一个名为 CallOuts
的工作表.
我想复制一些行(来自各个分支)并将它们粘贴到“主表”(CallOuts
)我可以在 CallOuts
上工作表而不是去每个分支。因此,每当我编辑一个单元格时,它也会更新/更改分支表中完全相同的单元格,反之亦然。
问题:我知道 MS Exccel 有一个“选择性粘贴”功能,它可以在其中添加单元格。问题在于它链接了单元格#,因此如果我对主表进行排序,它将将该行替换为错误的分支表。
例如:如果 System# J112 在分支 2 表的第 2 行中,并且我将链接粘贴在主表的第 4 行中,如果我在主表上进行更新然后重新排序并且系统#现在移动到行2(在主表上)第 4 行(在主表上)中的任何内容现在都将在第 2 行,第 2 行表中。
我在想也许是一个宏,我可以在其中复制和粘贴主表中的整行。进行某种类型的案例选择以检查 A 列中的哪个分支,然后在分支表上找到相同的系统 #,然后粘贴整行。
我的 VBA 水平充其量只是新手,因此将不胜感激。
最佳答案
好的,所以我在下面看到了您的尝试。我不确定您的代码是如何工作的,但似乎您走在了正确的轨道上。但是,我认为 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”表中。祝你好运。
关于Excel VBA - 链接来自不同工作表的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12807198/