复制工作表而不会丢失引用
我当前的问题是,如果我复制工作簿中的工作表,则复制的表丢失引用。
这是我用来复制工作表的代码:
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)-8
, ROW(19:19)-8
, ROW('Planning'!BI9)-8
和ROW(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。
当我用表中的公式将表格转换为一个范围
我做了以下步骤:
- 在桌子上标记
- 转到表工具 – >devise
- 转换为范围
- 之后,我用公式标记第一行并填充到最后一行(我需要多less)
之后,我没有任何问题与破碎的参考。