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

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

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

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!))) 

无论如何要防止这种情况发生? 还是有一个自动化的解决方法。

目前我修复表单manualy,当我点击进入forumla CTRL-SHIFT-ENTER计算数组,然后使用AutocorrectOptions。

使用ROW(11:11); COLUMN(B:B) ROW(11:11); COLUMN(B:B) 。 使用ROW或COLUMN函数只需将一个序号返回到公式中。 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) 

IFERRORfunction有效地削减你的公式一半提供玉使用.xlsx而不是.xls。

@Jeeped伟大的投入。 这简化了我的公式很多。 我build议如下改变它:

 =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但你的build议帮助我走向了正确的方向。

所以,现在我仍然有问题,当我复制引用被打破的选项卡,请参阅下面的图片: 复制表与断参考

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

对于模板的复制问题,我find了一个解决scheme。

当我用表中的公式将表格转换为一个范围

我做了以下步骤:

  1. 在桌子上标记
  2. 转到表工具 – >devise
  3. 转换为范围
  4. 之后,我用公式标记第一行并填充到最后一行(我需要多less)

之后,我没有任何问题与破碎的参考。