3

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

基本上,在我的计算机上,我运行创建一个按钮并将 .OnAction 值设置为 'SPC_BUTTONS.xlam!EXPORTSPC' 的代码,它有时会更新为 '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 设置为“EXPORTSPC”确实再次让一些文件再次链接,但前提是我在本地计算机上这样做。我已经尝试过完整地址、本地地址(并移动加载项位置)和 SPC_BUTTONS.xlam!EXPORTSPC 以及那些仍然以 'C:/Networklocation.xlam!EXPORTSPC' 结尾...即使设置为本地计算机。

问题是,昨天,当有人用他在网络上修改的另一组文件替换了更新的文件时,再次发生了这种情况。这一次,我对他们没有链接起来并不感到惊讶(尽管很失望),但令我惊讶的是,我循环更新到 EXPORTSPC 的代码未能“获取”第二台计算机上的所有文件。其中只有少数实际上会更改为 EXPORTSPC,我最终不得不为 45 个 .xls 文件中的每一个手动在最终计算机上本地分配链接。

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

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

真的,任何形式的洞察力都会有所帮助。谢谢!

编辑:

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

但是,再深入一点,我确实觉得我有了更好的理解。我使用下面的代码来确定我在“分配宏”中看到的内容是否与存储的 .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

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

4

1 回答 1

0

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

.OnAction = "SPC_BUTTONS.xlam!EXPORTSPC"

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

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

或者,尝试将路径和文件名括在单引号中:

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

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

于 2013-10-03T14:53:48.553 回答