我想做什么
我希望我的工作簿中的代码(wbDestination)打开另一个工作簿(wbBosOriginal)并将整个工作表复制为值(wbBosOriginal中包含大量代码,模块和工作表中的代码,我不知道想要这个代码因为它引用wbB中wbDestination中不存在的东西。我在粘贴值时遇到了很大的问题,因为它不会粘贴当前隐藏的列和行。所以这就是我决定导入整张纸的原因。
我尝试了什么以及它有什么问题
这是我用于在最后一个索引位置复制目标工作簿中的工作表的代码块。它的问题是旧工作簿仍然存在一些链接(公式,验证列表,条件格式)。我删除了所有这些链接,但是当我成功粘贴工作表时,保存并重新打开,我有一个错误,说某些内容是不可读的。我相信仍有一些元素与旧工作簿相关联。
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
工作表已成功粘贴,其中没有任何代码,以及之前的所有内容。然后,我删除所有公式,条件格式和验证列表。即使在删除它们之后,打开工作簿时仍然会出错。
我的问题
除了条件格式,验证列表,VBA代码和链接粘贴到新工作簿的工作表的公式之外,由于现有的旧工作簿链接,其他哪些元素可能导致工作簿每次都以修复模式打开?
如果我的问题不明确,请发表评论并澄清。
答案 0 :(得分:1)
直接与VBE交易对我来说似乎有些苛刻。如果您的代码正在操作多个工作簿,我会将代码放在一个加载项中,而不是在任何工作簿中。 (技术上* .xlam插件是工作簿,但是当我说"工作簿"我的意思是正常* .xls,* .xlsx,* .xlsm等。)
也就是说,如果您只是在不同的工作簿之间复制单元格值(可能是公式),那么除了单元格引用,命名范围和用户定义的函数之外,您不应该有任何依赖关系。原始工作簿。我会确保没有这些。还请分享您如何确保您的配方没有破损的参考文献。
答案 1 :(得分:0)
如果您遇到的问题是由于试图避免隐藏的列和行不允许使用粘贴值,为什么不取消隐藏行和列,然后仅将值复制到新书?
只需循环浏览原始书籍中的每个工作表,然后使用.UsedRange.Hidden = False
方法。据我所知,这应该取消隐藏在工作表上的每个单元格,并允许您进行原始的pastevalues调用
答案 2 :(得分:0)
这可以快速顺利地工作(删除所有数据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