【问题标题】:Copying Excel-Formula to different Workbook, without keeping reference将 Excel 公式复制到不同的工作簿,而不保留参考
【发布时间】:2015-09-03 14:24:47
【问题描述】:

在 Workbook1 中,我在工作表“New Table1”的单元格 AG9 中有以下公式

=COUNTIF('New Table2'!B:B;"D")

它应该计算“新表 2”B 列中的所有 D。 使用 VBA 我想将整个工作表“新表 1”复制到另一个工作簿(工作簿 2)中,但是当我这样做时,工作簿 2 中的复制公式变为

=COUNTIF('C:\Users\a.hopf\Desktop\[Workbook1.xlsx]New Table2 '!B:B;"D")

如何防止公式引用原始工作簿? Workbook2 中的公式也应该引用 Workbook2 中的 New Table2。我尝试使用 $ 创建绝对引用,但 =COUNTIF($'New Table2'!$B:$B;"D") 不起作用。

我知道我可以使用 VBA 将公式写入 Workbook2,但我更愿意将它与 Workbook1 中的工作表一起复制。

【问题讨论】:

  • 公式是否应该包含逗号而不是分号?我收到一个分号错误。
  • 您是从打开的工作簿中复制工作表吗?

标签: excel vba


【解决方案1】:

尝试像这样复制工作表:

Option Explicit

Sub copyFormulasWithoutExternalLinks()

    Dim r1 As Range, r2 As Range

    Set r1 = Workbooks("Book1.xlsm").Worksheets(1).UsedRange
    Set r2 = Workbooks("Book2.xlsm").Worksheets(1).UsedRange

                            'Range("G1") in r1: =COUNTIF('New Table2'!B:B/"D")

    r1.Copy r2              'Range("G1") in r2: =COUNTIF('[Book1.xlsm]New Table2'!B:B/"D")

    '-------------------------------------------------------------------------------------

    Set r2 = Workbooks("Book2.xlsm").Sheets(1).UsedRange    'reset used range in Book2


    Application.DisplayAlerts = False

    r2.Formula = r1.Formula 'Range("G1") in r2: =COUNTIF('New Table2'!B:B/"D")

    Application.DisplayAlerts = True


    '(all formulas in Book2 will be invalid if 'New Table2' sheet is missing)

End Sub

【讨论】:

    【解决方案2】:

    诀窍是使用 INDIRECT()。例如:

    =COUNTIF(INDIRECT("'New Table2'!B:B");"D")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多