【问题标题】:Mirroring column in one excel sheet to other multiple excel sheets with automatic updating将一张excel表格中的列镜像到其他多个excel表格并自动更新
【发布时间】:2012-08-27 18:35:11
【问题描述】:

我有一个 Excel 工作簿,其中包含多个工作表。为了这个问题,工作表被命名为 Sheet1、Sheet2、Sheet3 等。我希望将 sheet1 中的 A 列复制到其他工作表中,并且随着新单元格添加到 sheet1 中的 A 列,它们将自动输入到工作簿中的其他工作表中。我不希望为此设置“结束范围;即:A100000”。例如,如果我在 Sheet1 的单元格 A1 中输入 First,那么单词“First”现在也应该出现在 Sheet2 的单元格 A1 中。我使用了以下代码,它似乎不起作用。任何帮助将不胜感激。

Private Sub Worksheet_Change(ByVal Target As Range)
        Call UpdateFromSheet1
End Sub

Sub UpdateFromSheet1(ByVal Sh As Object, ByVal Target As Range)
    If Sh.CodeName = "Sheet1" Then
        If Not Intersect(Target(1, 1), Range("A1:A1000")) Is Nothing Then
            Sh.Range("A1:A1000").Copy Sheet2.Range("A1")
        End If
    End If
End Sub

【问题讨论】:

  • 您不能通过将后续工作表中的值(以 Col A 为例)设置为 "=Sheet1!A1" 并将该公式复制到足够数量的行和列来以公式方式执行此操作吗?跨度>
  • 您没有将 Target 参数(或 Sh 参数)传递给 UpdatefromSheet。

标签: excel vba mirror worksheet


【解决方案1】:

更新

对于一个干净的Non-VBA解决方案,您可以使用其他人提到的公式引用,但像这样输入。

在 Sheet2 单元格 A1 = If(Sheet1!A1="","",Sheet1!A1) 这样您就可以填写整个 A 列,如果 Sheet1 有一行没有数据,则不会弹出“0”。

我认为您有大致的想法,但我怀疑您的代码可能没有放在正确的位置。

对于 VBA 解决方案:

首先,你不需要从Worksheet_Change事件调用sub(当然,除非你出于其他原因想使用这个sub并传递变量给它。第二,如果您将此代码放在“Sheet1”的 VBE 中的工作表对象中,它将按照您的意愿进行:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("A")) Is Nothing Then

    Dim wks As Worksheet
    For Each wks In Sheets(Array("Sheet2", "Sheet3"))

        Target.EntireColumn.Copy wks.Columns(1)

    Next

End If


End Sub

【讨论】:

    【解决方案2】:

    这是 excel 的一个非常基本的用途。您可以将单元格设置为彼此相等。为此,您绝不需要 VBA 宏。

    如果你把它放在 Sheet2 和 Sheet3 的单元格“A1”中:

    =Sheet1!A1
    

    然后,当您在 A1 中键​​入内容时,它将被“镜像”到工作表 2 和 3。您可以将其自动填充到工作表 2 和 3 上 A 列中的所有单元格。

    您熟悉自动填充这个术语吗?

    如果你不明白我刚才所说的任何内容,并且只想运行一个宏,那么运行它并开始输入:

    Sub MacroBasicQuestion()
    
    Dim wbk As Workbook
    Set wbk = ThisWorkbook
    
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim ws3 As Worksheet
    Set ws1 = wbk.Sheets(1)
    Set ws2 = wbk.Sheets(2)
    Set ws3 = wbk.Sheets(3)
    
    Dim cell As Range
    
    Set cell = ws2.Range("A1:A1")
    ws2.Select
    cell.FormulaR1C1 = "=Sheet1!RC"
    cell.Select
    Selection.AutoFill Destination:=Range("A:A"), Type:=xlFillDefault
    
    Set cell = ws3.Range("A1:A1")
    ws3.Select
    cell.FormulaR1C1 = "=Sheet1!RC"
    cell.Select
    Selection.AutoFill Destination:=Range("A:A"), Type:=xlFillDefault
    
    End Sub
    

    祝你好运。

    【讨论】:

    • 如果源工作表中的行或列,自动填充无法正常工作 - 新行没有出现在“镜像”工作表中。
    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多