复制工作表而不会丢失引用

时间:2016-03-15 19:53:13

标签: excel vba excel-vba excel-formula

我目前的问题是,如果我在工作簿中复制工作表,则复制的表会丢失引用。

这是我用来复制工作表的代码:

Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Sheets("Template")
Dim wa As Worksheet: Set wa = wb.Sheets("NeedToKnow")
Dim newws As Worksheet, sh As Worksheet, newname
'some other code to create the name
ws.Copy after:=wa: Set newws = ActiveSheet: newws.Name = newname

上面的代码复制工作表“模板”并使用相应的“新名称”重命名。

模板有一个包含多个列的表。此列具有包含的数组公式:

=IF(ISERROR(INDEX(Table1[[Costobject]:[Total]];SMALL(IF($B$3=Table1[Costobject];ROW(Table1[Costobject])-MIN(ROW(Table1[ProjectName])-1));ROW('Planning'!BI9)-8);COLUMN('Planning'!BI9)));0;INDEX(Table1[[Costobject]:[Total]];SMALL(IF($B$3=Table1[Costobject];ROW(Table1[Costobject])-MIN(ROW(Table1[ProjectName])-1));ROW('Planning'!BI9)-8);COLUMN('Planning'!BI9)))

所以在vba运行并复制了工作表之后,上面的公式就像这样被破坏了:

=IF(ISERROR(INDEX(Table1[[Costobject]:[Total]];SMALL(IF($B$3=Table1[Costobject];ROW(Table1[Costobject])-MIN(ROW(Table1[ProjectName])-1));ROW('Planning'!#REF!)-8);COLUMN('Planning'!#REF!)));0;INDEX(Table1[[Costobject]:[Total]];SMALL(IF($B$3=Table1[Costobject];ROW(Table1[Costobject])-MIN(ROW(Table1[ProjectName])-1));ROW('Planning'!#REF!)-8);COLUMN('Resto Planning'!#REF!)))

反正有没有阻止这种情况发生?或者是否有自动解决方法。

目前,当我点击论坛中的CTRL-SHIFT-ENTER以计算数组然后使用AutocorrectOptions时,我手动修复了这些工作表。

3 个答案:

答案 0 :(得分:1)

使用ROW(11:11); COLUMN(B:B)。使用ROWCOLUMN函数只是将一个序数返回到公式中。 ROW(A19)-8ROW(19:19)-8ROW('Planning'!BI9)-8ROW(11:11)都是一样的;他们只是导致 11

=IFERROR(INDEX(Table1[[Costobject]:[Total]]; 
     SMALL(IF($B$3=Table1[Costobject]; ROW(Table1[Costobject])-MIN(ROW(Table1[ProjectName])-1)); ROW(11:11)); COLUMN(B:B))); 0)

IFERROR function有效地将你的公式削减了一半,前提是你使用的是.xlsx,而不是.xls。

答案 1 :(得分:0)

@Jeeped Great Input。这简化了我的配方。我现在按照建议更改了它:

=IFERROR(INDEX(Table1[[Costobject]:[Total]];SMALL(IF($B$3=Table1[Costobject];ROW(Table1[Costobject])-MIN(ROW(Table1[ProjectName])-1));ROW('Planning'!1:1));COLUMN('Planning'!BI:BI));0)

实际上它不是B19 BI但是你的建议帮助我找到了正确的方向。

所以现在我仍然有一个问题,当我复制参考文献被破坏的标签时,请参见下图: Copied Sheet with broken References

问题是我如何解决此复制错误?

答案 2 :(得分:0)

对于模板表的复制问题,我找到了解决方案。

当我在表格中使用公式时,我将表格转换为范围

我做了以下步骤:

  1. 标记表格
  2. 转到表格工具 - >设计
  3. 转换为范围
  4. 之后我用公式标记第一行并填充到 最后一行(我需要多少)
  5. 之后我没有任何关于参考文献被破坏的问题。