似乎无法可靠地移动工作表的内容

现在已经成为我的第一个StackOverflow三部曲的第四部分了:)希望将它们结合在一起会导致答案,或certificate它不能被处理。

快速总结

(进一步的细节和结论见背景 。)

我有一个带有数字签名的VBA项目的Excel工作簿,供我的客户使用。 其中一个function是用户可以复制工作表(模板),我的代码可以识别模板和复制本身(用于进一步处理)。 工作表本身包含工作表范围的命名范围,工作表使用公式中各处的名称。 他们也都使用表(ListObject之一)。 此外,我的意图是用户可以随意添加任何他们想要的这些表。

我的第一个设置是通过代码名称find这些表单,但是由于使用代码名称意味着具有代码模块的表单(即使它们没有任何代码),将这些表单复制到他们的计算机上(没有启用数字证书它)将打破VBA项目的签名。 我的客户在保存并重新打开工作簿后,将从此获得macros观安全警告。 没人要。

修复1是调整我的代码,以通过在表单上使用特殊名称中的代码来识别这些表单。 这样我就不依赖任何VBA的工作表细节。 而且由于工作表可能有一个缺失的VBA模块(再次看到背景 – 基本上创build一个新的工作表,并从此打开VBA IDE),我的希望是find一种方法从这些工作表擦洗VBA。 我现在使用它来交付解决scheme时,以及将来在工作簿的实时生产版本中升级代码时。 全自动化,以减less错误的机会。

那么问题是如何移动现有的Excel工作表内容? 我看到两个选项:

  1. 将图纸的内容移到新的图纸上
  2. 将工作表移动到另一个(不含VBA的.xlsx)工作簿并返回

将内容移至新工作表

我已经开始在这个单独的职位 。 目前仍在继续,但我高度怀疑这是一个死路一条。 我使用了下面的伪代码:

sheetName = sourceSheet.Name Set destSheet = ThisWorkbook.Worksheets.Add Call sourceSheet.Cells.Cut(destSheet.Cells) Call sourceSheet.Delete destSheet.Name = sheetName Call fixBrokenFormulasAndOtherStuff(ThisWorkbook) 

简介:将工作表的内容移动到新工作表中会造成工作表范围名称的混乱, 在移动之后,你留下了分叉的名称定义,这两个分支正在使用,而不是一个简单的方法来实现上面的fixBrokenFormulasAndOtherStuff

将内容移至新工作簿

这个选项我试图解决我的另一个问题在这里 。 这个post也似乎没有去任何地方,但是…

为此,我使用了下面的伪代码:

 Set scrubWorkbook = Workbooks.Add(1) Set allSheets = CollectSpecialSheets(ThisWorkbook) Call MoveSheets(allSheets, ThisWorkbook, scrubWorkbook) Call SaveAndReopenScrubWorkbook(scrubWorkbook) Set allSheets = CollectSpecialSheets(scrubWorkbook) Call MoveSheets(allSheets, scrubWorkbook, ThisWorkbook) 

在MoveSheets的实现中,表格非常糟糕。 虽然Excel可以一次移动多个工作表,但是保留链接时,工作表中的任何表格都会拒绝。 因此Worksheets(Array(<all names>)).Move不会削减它。

单独移动Worksheet.Move (通过Worksheet.Move ),但是当我们移动工作表本身的内容时,我们又得到了相同的范围名称。 所以我们再次留下了一个不必要的强制性Call fixBrokenFormulasAndOtherStuff

移动不起作用,但我们也可以复制,对不对? 但是,复制表格与移动表格有相同的限制,所以在这里我们也必须一张一页地完成。 这又意味着在工作表副本上使用公式的所有范围名称都仍然指向原始工作簿工作表,这些工作表需要被删除,从而杀死这些公式。 换句话说:另一个需要Call fixBrokenFormulasAndOtherStuff

问题

现在我不能相信我是第一个签署他的VBA项目的人/公司,也有他的用户可以复制他们的表? 别人怎么解决这个困境? 还是他们只是不签署VBA项目,并指导用户减less他们的macros安全设置?

我不太喜欢写一个fixBrokenFormulasAndOtherStuff函数的原因是我真的无法理解我需要把它放进去。 当然,我可以遍历所有表单上的所有单元格,并修复任何公式,但是有很多公式可以使用。 数据validation列表,表单控件链接值,…? 现在我是一个精通Excel的专家,但我不敢声称我知道每一个最后的Excel细节; 每隔一段时间,用户总是使我甚至不知道在Excel中的东西让我感到惊讶:)或者,也许我只是比平均水平有更多的创造性用户…:P