从复制的工作表中删除链接

我想做的事

我想在我的工作簿(wbDestination)中打开另一个工作簿(wbBosOriginal),并将整个工作表作为值(wbBosOriginal有很多代码,在模块和问题的工作表中,我不希望这个代码因为它引用了wbB中不存在的东西)。 作为值粘贴时,我遇到了很多问题,因为它不会粘贴当前隐藏的列和行。 所以这就是我决定导入整张纸的原因。

我尝试了什么,它有什么问题

这是我用来复制目标工作簿中最后一个索引位置的工作表的代码块。 与它的问题是,旧的工作簿(公式,validation列表,条件格式)仍然存在一些链接。 我删除了所有这些链接,但仍然当我粘贴工作表成功,保存并重新打开,我有一个错误,说一些内容是不可读的。 我相信还有一些元素与旧的工作簿有关。

Set wbBosOriginal = Workbooks.Open(strChosenPath, ReadOnly:=True) With wbBosOriginal.Sheets("BOS") .Visible = True 'Pastes the ws in last position in wbDestination .Copy after:=wbDestination.Sheets(wbDestination.Worksheets.Count) Set wsNewBos = Worksheets(Worksheets.Count) 'Deletes VBA code in the copied sheet ThisWorkbook.VBProject.VBComponents.Item(wsNewBos.CodeName).CodeModule.DeleteLines 1, _ ThisWorkbook.VBProject.VBComponents.Item(wsNewBos.CodeName).CodeModule.CountOfLines End With 

工作表已成功粘贴,没有任何代码,与之前的一切。 然后删除所有公式,条件格式和validation列表。 即使删除之后,打开工作簿时仍然出现错误。

我的问题

除了条件格式,validation列表,VBA代码和链接粘贴到新工作簿的工作表的公式之外,还有哪些其他元素可能导致工作簿每次都以修复方式打开,原因是存在旧工作簿的链接?

如果我的问题不清楚,我会澄清一下。

直接与VBE交易似乎有点重拳。 如果您的代码正在操作多个工作簿,那么我会将代码放在一个加载项中,而不是放在任何工作簿中。 (技术上* .xlam插件是工作簿,但是当我说“工作簿”的意思是正常* .xls,* .xlsx,* .xlsm等)

也就是说,如果只是复制不同工作簿之间的单元格值(可能是公式),则不应该在原始工作簿中具有除单元格引用,命名范围和用户定义函数以外的任何依赖项。 我会确保没有这些。 请同时分享如何确保您的配方不会有残缺的参考。

如果您遇到的问题是由于尝试避免隐藏的列和行不允许pastevalues而导致的,为什么不取消隐藏行和列,然后仅将值复制到新书?

只需循环浏览原书中的每张表格,然后使用方法.UsedRange.Hidden = False 。 据我所知,这应该取消隐藏工作表中的每个单元格,并允许您执行原始的pastevalues调用

这工作快速和平稳(删除所有数据Imo更难):

 Sub tests() Dim AllRange As Range: Set AllRange = ActiveSheet.UsedRange Dim ItemRange As Range Dim myWbDestination As Workbook: Set myWbDestination = ThisWorkbook Dim SheetDestination As String: SheetDestination = ("Sheet2") For Each ItemRange In AllRange With myWbDestination.Sheets(SheetDestination) .Range(ItemRange.Address) = ItemRange.Value End With Next ItemRange End Sub 

修复模式可以由很多因素触发,你需要发布代码来寻找解释,这就像问为什么vba可能会破坏 在这里输入图像说明