【问题标题】:Formula that relates to sheet name in current workbook与当前工作簿中的工作表名称相关的公式
【发布时间】:2015-11-26 13:29:33
【问题描述】:

说有

  1. wbA.sheet1wbA.sheet2(带有 sheet1 和 sheet2 的工作簿 A)
  2. wbB.sheet1wbB.sheet2(带有 sheet1 和 sheet2 的工作簿 B)

wbA.sheet1 中,单元格A1 具有公式=Sheet2!B1。 当您将此单元格A1 复制到wbB.sheet1 时,它将与wbA.sheet2 中的B1 相关。

但是,是否可以更改公式(可能使用 VBA)以使单元格 A1 与工作表 "Sheet2"在当前所在的工作簿中相关?

这意味着无论A1被复制到哪个工作簿单元格中,它都会在工作簿中搜索工作表"Sheet2"并从中获取B1。并且不给REF!错误。

关于我的案例的更多细节:

在单元格A1wbA.sheet1 公式中计算工人的日薪。它是以下产品:

  • 上一个单元格(您在其中输入小时数)和
  • 小时费率系数

最新的是wbA.sheet2 中的值。您可以将任何wb 中的sheet2 视为系数的主列表。但是,不同的工作簿在sheet2 中具有不同的系数。因此,当我将单元格 A1 复制到任何其他工作簿时,我希望将其调整为当前工作簿中的小时费率,而不是从初始工作簿中拖动费率。

【问题讨论】:

  • 这是一次性的事情还是动态的事情? (即您需要更改这些引用一次,还是需要它们随时更改?)如果是前者,那么您可以通过 GUI 使用查找和替换来删除链接到差异的引用部分工作簿。如果是后者,那么类似 INDIRECT() 函数的东西会起作用,但不推荐(性能开销,文本是静态链接)。您能否将您的用例描述为您正在从一个稍微不正统的角度处理某些事情?
  • 你需要使用类似[Workbook_Name]SheetName!Cell的东西。如果工作表的名称中有空格,则应像 'Sheet Name' 这样将其包围,您还可以在放置工作簿名称的位置包含工作簿的完整路径! ;)
  • @R3uK 这与 OP 想要的相反,我认为。它总是引用特定的工作簿,而 OP 希望它始终是相对的
  • @Cor_Blimey:我的错!由于 pasteSpecial 公式对此不起作用,您是否尝试将 Cells(1,1).Formula 作为字符串传输?
  • 有趣的事实,定义的名称可以在每个中使用(例如,名称 Sheet2 cell1 类似_coefficient1)然后一个公式将可选地指向目标名称,所以如果第二个工作簿有一个名为同样的东西,复制过来的任何公式都可以使用它

标签: vba excel


【解决方案1】:

一种解决方法是使用 VBA 复制范围的确切公式。

为方便起见,您可以为此设置一个热键。选择要复制的单元格,然后运行宏。它会提示您选择要将其复制到的位置。

Sub CopyExactFormula()
    Dim sRng As Range, dRng As Range
    Set sRng = Selection.Areas(1)
    On Error Resume Next
    Set dRng = Application.InputBox("Select destination output range (Top left cell)", "Output range", , , , , , 8)
    If dRng Is Nothing Then Exit Sub
    On Error GoTo 0
    Set dRng = dRng.Parent.Range(dRng.Cells(1, 1), dRng.Cells(sRng.Rows.Count, sRng.Columns.Count))
    dRng.Formula = sRng.Formula
End Sub

另一种解决方法是在公式中为系数使用定义的名称。它们将更改为新工作簿中定义的名称,但会出现没有“全部同意”选项的恼人消息框提示!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 2014-05-14
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多