我需要将.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/