Vba 复制工作表而不丢失引用
我目前的问题是,如果我复制工作簿中的工作表,那么复制的表就会失去引用 这是我用来复制工作表的代码:Vba 复制工作表而不丢失引用,vba,excel,excel-formula,Vba,Excel,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 'so
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!)))
有没有办法防止这种情况发生?或者是否有一个自动化的解决方法
目前,当我点击forumla CTRL-SHIFT-ENTER来计算数组,然后使用自动更正选项时,我会手动修复工作表。使用行(11:11);列(B:B)
。使用或
函数只是将序号返回到公式中<代码>行(A19)-8,行(19:19)-8
,行('Planning'!BI9)-8
和行(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)
如果你使用的是.xlsx而不是.xls,那么有效地将你的公式一分为二。@Jeeped很棒的输入。这大大简化了我的公式。我现在按照建议将其更改为:
=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
,但你的建议帮我找到了正确的方向
因此,现在我仍然存在一个问题,即当我复制选项卡时,引用被破坏,请参见下图:
问题是如何修复此复制错误 对于模板页的复制问题,我找到了解决方案 当我在表格中使用公式时,我将表格转换为一个范围 我采取了以下步骤: