【问题标题】:Excel VBA code to populate summary sheet with formula linking cellsExcel VBA 代码用公式链接单元格填充汇总表
【发布时间】:2018-01-26 02:08:53
【问题描述】:

我正在尝试创建一个汇总表,其中将有 46 行数据,超过 7 列。因此,我将从 46 张表格中提取数据,并将有 7 个不同的数据点。

我可以使用偏移函数来简化此代码吗?例如

Sub AutoFillSheetNames()
    Dim ActRng As Range
    Dim ActWsName As String
    Dim ActAddress As String
    Dim Ws As Worksheet

    On Error Resume Next

    Set ActRng = Application.ActiveCell
    ActWsName = Application.ActiveSheet.Name
    ActAddress = ActRng.Address(False, False)

    Application.ScreenUpdating = False

    xIndex = 0
    For Each Ws In Application.Worksheets
        If Ws.Name <> ActWsName Then
            ActRng.Offset(xIndex, 0).Value = "='" & Ws.Name & "'!" & ActAddress
            xIndex = xIndex + 1
        End If
    Next

    Application.ScreenUpdating = True
End Sub

我想链接实际的单元格,以便它们可以自动更新,并且需要 VBA,因为它将为许多具有不同选项卡名的不同 Excel 工作簿完成。例如,当我将摘要表上的单元格 F2 链接到 48 张表的第一张表上的 F2 时,此处发布的代码有效,然后将剩余 47 个单元格的公式正确输入到 F48。但是,当我想将摘要表上的单元格 H2 链接到第一表上的 G7 时,我应该在上面的代码中进行哪些更改?

【问题讨论】:

  • 旁注:我几乎不建议在不使用适当错误处理的情况下避免使用On Error Resume Next。这样,您只会忽略错误消息,但错误仍然存​​在,您看不到出了什么问题。
  • 问题1)为什么你有47张?请考虑工作簿设计,因为这可以显着改善编码。话虽如此,您可以将所有工作表名称放入一个数组并循环遍历该数组

标签: vba excel formula offset


【解决方案1】:

我真的不明白你想要完成什么。下面的代码将链接摘要表中每个工作表的第一行中的 7 个单元格(即 A1:G1)。将有与表格一样多的行。但我不知道这是否是你真正想要的。

Sub AutoFillSheetNames()
    Dim CurrWorkBK As Workbook
    Dim CurrSheet As Worksheet
    Dim TheOtherSheets As Worksheet
    Dim MyRow As Long
    Dim MyCol As Long

    Set CurrWorkBK = ThisWorkbook
    Set CurrSheet = CurrWorkBK.Worksheets("Summary")

    MyRow = 1
    For Each TheOtherSheets In CurrWorkBK.Worksheets
        If TheOtherSheets.Name <> CurrSheet.Name Then
            For MyCol = 1 To 7
                CurrSheet.Cells(MyRow, MyCol).Value = "='" & TheOtherSheets.Name & "'!" & TheOtherSheets.Cells(1, MyCol).Address
            Next MyCol
            MyRow = MyRow + 1
        End If
    Next
End Sub

【讨论】:

  • 这很简单也很有帮助。我可以调整它以链接到不同的单元格,这可能导致代码效率低下,但它会产生预期的结果。
  • 很高兴为您提供帮助。如果我正确解释了您的帖子,您可以使用 CurrSheet.Cells(MyRow, MyCol).Value = "='" &amp; TheOtherSheets.Name &amp; "'!" &amp; TheOtherSheets.Cells(7, MyCol+6).Address 更改上述代码(这会将原点从 A1 转移到 G7)。但同样,我不确定这是否是你想要的。
  • 我已成功使用此代码 9 个月,但现在我收到错误消息“运行时错误'9':下标超出范围”。错误似乎在这里: Set CurrSheet = CurrWorkBK.Worksheets("Summary") 仅供参考:工作簿中有一张名为 Summary 的工作表。我需要采取哪些步骤来解决这个问题?感谢您的指导@CMArg
猜你喜欢
  • 1970-01-01
  • 2016-10-05
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
相关资源
最近更新 更多