将Excel-Formula复制到不同的工作簿,而不保留参考

时间:2015-09-03 14:24:47

标签: excel excel-vba vba

在Workbook1中,我在工作表“New Table1”

中的Cell AG9中有以下公式

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

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

=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中的工作表一起复制。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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