excel - Excel更改链接到加载项

标签 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设置为“ 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


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

最佳答案

试试这个-限定外接程序文件名:

.OnAction = "SPC_BUTTONS.xlam!EXPORTSPC"

我已经使用网络驱动器上的XLAM和台式机上的XLS文件对它进行了测试。我已经将XLS文件复制到了网络位置,并且仍然可以使用。我还做了一个SaveAs将XLS文件放在另一个网络驱动器上,该动作继续起作用。

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

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

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

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

关于excel - Excel更改链接到加载项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19161508/

相关文章:

VBA:整数数组到字符串数组,便于转换

excel - 在 Access 中嵌入生成的 Excel 图表

vba - VBA 中的评估()

vba - 如果从右上角关闭 Excel-VBA 表单的实例,则打开时会出现错误 红色 `X`

asp.net - 使用 Excel/VBA 抓取 ASP 页面

html - 无法将正确的网站数据导入excel

algorithm - 寻求有效的算法来分析类似于VBA中数据透视表的数据

arrays - 如何粘贴整个数组而不在VBA中遍历整个数组?

excel - 数据扩展时自动复制公式

excel - 使用 XMLHTTP 进行抓取会在特定类名处抛出错误