我需要将.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
因此,过程的某些部分仍然显得模糊,但至少现在我知道如何更好地跟踪我所看到的内容。
答案 0 :(得分:0)
试试这个 - 限定加载项文件名:
.OnAction = "SPC_BUTTONS.xlam!EXPORTSPC"
我在网络驱动器上使用XLAM和桌面上的XLS文件进行了测试。我已将XLS文件复制到网络位置,它仍然有效。我还做了SaveAs
将XLS文件放在另一个网络驱动器上,然后该操作继续有效。
这当然要求用户的Excel实例启用了加载项。
或者,尝试封闭路径&单引号中的文件名:
.OnAction = "'G:\NetworkLocation\SPC_BUTTONS.xlam'!EXPORTSPC"
此方法似乎保留了OnAction
绝对路径。