Excel更改链接到加载项

我需要将.xls(不能有macros)链接到我们networking上的macros。 我以为我已经find了一个很好的解决scheme,它使用一个形状链接到一个在Excel中设置加载macros的macros。 这种方法运行了一年多了,但现在事情开始变得非常奇怪了。 Excel不断改变我的链接从networking到本地驱动器!

基本上,在我的电脑上,我运行代码创build一个button,并将.OnAction值设置为“SPC_BUTTONS.xlam!EXPORTSPC”,它有时会更新为“G:\ NetworkLocation \ SPC_BUTTONS.xlam!EXPORTSPC”(有时会使其独立) 。 我链接加载项从networking运行(不要复制到本地),所以这是一个正确的地址。 但是,当我从我的电脑,到networking,并在最后一台计算机上移动文件,链接将更改为'C:\ NetworkLocation \ SPC_BUTTONS.xlam!EXPORTSPC'。 该文件的链接工作,直到它在本地计算机上的点。

'Check if SPC Button already exists Dim exportButton As Shape On Error Resume Next Set exportButton = InspectionWS.Shapes("SPC Button") On Error GoTo 0 If Not exportButton Is Nothing Then 'Delete the old button InspectionWS.Shapes("SPC Button").Delete End If 'Create "SPC Button" InspectionWS.Shapes.AddShape(msoShapeRectangle, 770, 600, 160, 36).Name = "SPC Button" Set exportButton = InspectionWS.Shapes("SPC Button") With exportButton .ShapeStyle = msoShapeStylePreset34 .TextFrame2.TextRange.Characters.Text = "Export SPC Data" .TextFrame2.TextRange.Font.Size = 20 .TextFrame2.WordArtformat = msoTextEffect8 .OnAction = "EXPORTSPC" End With 

我第一次看到这个问题的时候是我改变了加载项。 我在那个名为EXPORTSPC2的文件中创build了另一个macros,并且在上线的时候把原来的名字换成了原来的名字。 那时所有的链接都被破坏了。 我换回了名字,并决定只交换代码,以防位置非常重要。 仍然没有帮助的连接。

我使用原来的macros来重新设置每个文件上的button,但是没有解决问题。 几个小时后,尝试了很多选项后,我发现设置.OnAction只是'EXPORTSPC'再次获得一些文件再次链接,但只有当我在本地计算机上做。 我已经尝试了完整的地址,一个本地地址(和移动插件的位置)和SPC_BUTTONS.xlam!EXPORTSPC和那些仍然以'C:/Networklocation.xlam!EXPORTSPC'结束…即使设置本地计算机。

问题是,昨天,当有人用他在networking上修改的另一组文件replace了更新的文件时,它又发生了。 这一次我并不感到惊讶,看到他们没有联系(虽然失望),但感到惊讶的是,我的代码循环更新到EXPORTSPC未能“采取”第二台计算机上的所有文件。 其中只有less数实际上会更改为EXPORTSPC,并且我最终不得不在本地最终计算机上为每个45 .xls文件分配链接。

真的,我不能继续做任何本地修复,因为它造成机器停机。

所以我的问题! 有没有更好的方法来做我想要完成的(.xls加载项)? 任何想法,为什么移动这些文件导致excel改变链接,迫使我在本地设置它们? 为什么突然不接受任何东西,只是EXPORTSPC作为链接名称? Excel是否保存某种types的macros/插件/button的ID我不知道我意外打破?

真的,任何forms的见解都会有帮助。 谢谢!

编辑:

我在循环代码中发现了一个错误,这影响了我在第二台计算机上的问题。 这是循环通过每个工作簿罚款和保存…但我没有激活工作簿之前运行的代码,这是非常重要的(DOH!)。 这只能解决我昨天遇到的问题,我必须手工编辑。

但是,深入一点,我觉得我有更好的理解。 我使用下面的代码来确定我在“分配macros”中看到的内容是否与存储的.OnAction值相匹配。 在我的电脑上testing这个代码:

 exportButton.OnAction = "'G:\NetworkLocation\SPC_BUTTONS.xlam!'EXPORTSPC" 

会导致“分配macros”更改为“EXPORTSPC”,即使debugging

 debug.print exportButton.OnAction 

仍然显示原始的OnAction值。 当我将文件移动到车间计算机时,“分配macros”将显示“G:\ NetworkLocation \ SPC_BUTTONS.xlam!”EXPORTSPC,直到我点击它,然后它将切换到EXPORTSPC。

因此,Excel似乎一旦检测到正确的位置,就会跟踪macros所在的位置。 我换了macros,似乎已经打破了连接。 我的猜测是优秀的,然后修改位置的C:\一旦它的内部链接被打破。 如果有人对此有任何阐述/证实,我很乐意听到。

我记得随着插件button变得没有任何检查,这可能是为什么当我debugging什么工作时,为什么链接不断打破和恢复到C:\。 我不确定是什么原因造成的。 但是,今天使用各种forms的出口似乎是有效的。 我还是不相信我不会再看到它,因为我不完全明白未经检查的盒子和互换链接的催化剂是什么。

  If Not exportButton Is Nothing Then With exportButton .OnAction = "'SPC_BUTTONS.xlam'!EXPORTSPC" '.OnAction = "EXPORTSPC" '.OnAction = "'G:\NetworkLocation\SPC_BUTTONS.xlam'!EXPORTSPC" End With Debug.Print exportButton.OnAction End If 

因此,这个过程的一部分似乎仍然模糊,但至less现在我知道如何更好地跟踪我所看到的。

试试这个 – 限定加载项文件名:

.OnAction = "SPC_BUTTONS.xlam!EXPORTSPC"

我已经使用networking驱动器上的XLAM和桌面上的XLS文件进行了testing。 我已经将XLS文件复制到networking位置,它仍然有效。 我也做了SaveAs把XLS文件放在另一个networking驱动器上,并且这个动作继续工作。

这当然要求用户的Excel实例启用加载项。

或者,尝试将path和文件名用单引号括起来:

.OnAction = "'G:\NetworkLocation\SPC_BUTTONS.xlam'!EXPORTSPC"

这种方法似乎保留了OnAction绝对path。