Excel VBA-更改图形的源数据

时间:2019-03-19 12:50:39

标签: excel vba

第一篇文章在这里,希望我做对了。

上下文::我正在尝试回收2018模板以插入2019数据。该模板由多个受保护的数据表(由他人设置密码)和多个不受保护的图形表组成。这些图形当前引用相关的2018年数据表。

为了摆脱保护,我克隆了(通过复制Pastespecial xlPasteall)受保护的工作表。我的代码的一部分(下面工作且未进行开发)包括创建一个新工作表,从源中复制/粘贴数据,并使用源工作表名称+后缀重命名工作表。最终,该代码还将在过时的情况下处理源工作表的破坏。

copySheet是2018数据源,unlockedSheet是2019数据源。生成克隆表时没有问题,克隆都不会从copySheet.name和“ suffix”组合继承名称。

目标:我正在尝试使所有图形均参考克隆表。我希望在所有图形源数据中将=“ nameOfTheSource”![range]替换为=“ nameOfTheClone”![same range]。

如此,我试图创建一个宏来查找和替换源数据中的图纸引用,但是我很难操纵ole对象的属性。这是代码:

Sub Copy2018()
Dim copySheet As Object, unlockedSheet As Object, graphSheet As Object, graph As OLEObject    
For Each graphSheet In Sheets
       For Each graph In graphSheet.OLEObjects
                If graph.OLEType = xlOLELink Then
                    graph.SourceName = Replace(SourceName, copySheet.Name, unlockedSheet.Name)
                End If
       Next graph
Next

代码运行无错误,但不执行任何操作。正如我提到的,最终将有多个源和图形必须从正确的源中选择,但我认为使用“克隆名=源名+后缀”系统,我可以处理它。

不是主题,而是我使用的另一种方法:可能有其他选择,例如:

  • 使用find =冻结图表中的公式并替换'=
  • 存储源名称
  • 禁止来源
  • 获取克隆名称与源名称相同(在隐藏工作表之前将其名称存储在某个地方)
  • 通过查找'=&replace =
  • 取消冻结图表中的公式

但是我也没有这种结果。我真的以为我使用的Ole对象属性错误,因为我知道这两个选项都适用于单元格中的公式。

如果有任何疑问/其他方法,请不要犹豫。谢谢你的忙。

[UPDATE] 我经历过Jon Peltier方法,结果是相同的(代码运行无错误,但不执行任何操作)。在这两种情况下,我都试图一步一步地运行代码,似乎循环没有考虑嵌套函数的最后两行。一旦该对象被识别为图形/ ole对象,代码便会忽略这些行和循环而无所作为。

0 个答案:

没有答案