Excel更改链接到加载项

时间:2013-10-03 14:10:45

标签: excel vba excel-vba

我需要将.xls(必须没有宏)链接到我们网络上的宏。我以为我找到了一个很好的解决方案,它使用一个形状链接到一个在Excel中设置加载项的宏。这种方法运作了一年多,但现在事情开始真正起作用了。 Excel不断更改从网络到本地驱动器的链接!

基本上,在我的计算机上,我运行代码创建一个按钮并将.OnAction值设置为' SPC_BUTTONS.xlam!EXPORTSPC' excel有时更新为' G:\ NetworkLocation \ SPC_BUTTONS.xlam!EXPORTSPC' (有时会让它一个人留下)。我将加载项链接到网络运行(并且不要在本地复制),所以这是一个正确的地址。但是,当我将文件从计算机,网络移动到最终计算机时,链接将更改为“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的宏,并且在生存时已将名称与原始文件交换。当所有链接都被破坏时。我交换了名称并决定只交换代码,以防位置重要。仍然没有帮助链接。

我循环使用原始宏来重新设置每个文件上的按钮,但是无法解决问题。几个小时之后,在尝试了很多选项之后,我找到了设置.OnAction to' EXPORTSPC'再次得到一些文件再次链接,但只有我在本地计算机上做了。我曾尝试过完整的地址,一个本地地址(以及移动加载项位置)和SPC_BUTTONS.xlam!EXPORTSPC以及那些仍然以“C:/Networklocation.xlam!EXPORTSPC”结束的地址!即使在本地计算机上设置。

问题是,昨天,当有人用他在网络上修改的另一组文件替换更新的文件时,它再次发生。这一次,我并不惊讶地发现他们没有联系起来(虽然感到很失望)但是我的代码将更新循环到EXPORTSPC却未能及时感到惊讶。对于第二台计算机上的所有文件。其中只有少数实际上会更改为EXPORTSPC,我最终必须手动为最终计算机本地分配45个.xls文件中的每一个。

真的,我无法继续进行任何本地修复,因为它会造成机器停机。

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

真的,任何形式的见解都会有所帮助。谢谢!

编辑:

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

然而,深入挖掘,我觉得我有更好的理解。我使用下面的代码来确定我在“分配宏”和“#39;匹配存储的.OnAction值,但不匹配。在我的计算机上测试此代码:

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

会导致“分配宏”'即使调试

,也要更改为' EXPORTSPC'
debug.print exportButton.OnAction

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

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

我确实记得让加载项按钮随机取消选中,这可能是为什么链接一直在破坏并恢复到c:\,而我正在调试什么工作。我也不确定是什么原因造成的。但是,使用所有形式的出口似乎今天都有效。我仍然不相信我不会再次看到它,因为我不完全明白未经检查的盒子和交换链接的催化剂是什么。

    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

因此,过程的某些部分仍然显得模糊,但至少现在我知道如何更好地跟踪我所看到的内容。

1 个答案:

答案 0 :(得分:0)

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

.OnAction = "SPC_BUTTONS.xlam!EXPORTSPC"

我在网络驱动器上使用XLAM和桌面上的XLS文件进行了测试。我已将XLS文件复制到网络位置,它仍然有效。我还做了SaveAs将XLS文件放在另一个网络驱动器上,然后该操作继续有效。

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

或者,尝试封闭路径&单引号中的文件名:

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

此方法似乎保留了OnAction绝对路径。