Vba Excel更改外接程序的链接
我需要将一个.xls(不能有宏)链接到我们网络上的宏。我认为我已经找到了一个很好的解决方案,它使用一个形状链接到一个宏,该宏是在Excel中设置的外接程序。这种方法在一年多的时间里效果很好,但现在事情开始变得很奇怪。Excel不断更改我从网络到本地驱动器的链接 基本上,我在电脑上运行代码,创建一个按钮,并将.OnAction值设置为“SPC_BUTTONS.xlam!”!excel有时会更新为“G:\NetworkLocation\SPC\u BUTTONS.xlam!”!(有时它会把它单独留下)。我将外接程序链接到网络上运行(不要在本地复制),因此这是它的正确地址。但是,当我将文件从计算机移动到网络并移动到最终计算机时,链接将更改为“C:\NetworkLocation\SPC\U BUTTONS.xlam!”!“出口SPC”。文件的链接一直工作到它到达本地计算机的点Vba Excel更改外接程序的链接,vba,excel,Vba,Excel,我需要将一个.xls(不能有宏)链接到我们网络上的宏。我认为我已经找到了一个很好的解决方案,它使用一个形状链接到一个宏,该宏是在Excel中设置的外接程序。这种方法在一年多的时间里效果很好,但现在事情开始变得很奇怪。Excel不断更改我从网络到本地驱动器的链接 基本上,我在电脑上运行代码,创建一个按钮,并将.OnAction值设置为“SPC_BUTTONS.xlam!”!excel有时会更新为“G:\NetworkLocation\SPC\u BUTTONS.xlam!”!(有时它会把它单独留下
'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,并在上线时与原始宏交换了名称。那时所有的链接都断了。我调回了名字,并决定只交换代码,以防位置有问题。仍然没有帮助链接
我循环了原来的宏,它再次在每个文件上设置了按钮,但未能纠正问题。几个小时后,在尝试了许多选项后,我发现设置为“EXPORTSPC”的.OnAction再次获得了一些文件要重新链接,但前提是我在本地计算机上进行了链接。我尝试了完整地址、本地地址(并移动外接程序位置)和SPC_BUTTONS.xlam!EXPORTSPC和其中一个仍然以“C:/Networklocation.xlam”结尾!输出SPC'。。。即使在本地计算机上设置
问题是,昨天,当有人用他在网络上修改的另一组文件替换了更新的文件时,这种情况再次发生。这一次,我并不惊讶于它们没有连接(尽管很失望),但惊讶于将更新循环到EXPORTSPC的“我的代码”未能“接收”第二台计算机上的所有文件。实际上,只有少数几个文件会更改为EXPORTSPC,我最终不得不手动在最终计算机上为每个45.xls文件分配本地链接
真的,我不能继续做任何本地维修,因为它会造成机器停机
所以我的问题!有没有更好的方法来完成我想要完成的任务(.xls到附加模块)?你知道为什么移动这些文件会导致excel更改链接,迫使我在本地设置它们吗?为什么它突然只接受EXPORTSPC作为链接名?excel是否保存了宏/加载项/按钮的某种ID,而我不知道这些宏/加载项/按钮是意外损坏的
真的,任何一种见解都会有所帮助。谢谢
编辑:
我确实在循环代码中发现了一个错误,这影响了我在第二台计算机上遇到的问题。它在每个工作簿中循环并保存。。。但是在运行代码之前我没有激活工作簿,这非常重要(DOH!)。这只解决了我昨天遇到的手工编辑的问题
然而,再深入一点,我确实觉得我有了更好的理解。我使用下面的代码来确定我在“Assign Macro”中看到的内容是否与存储的.OnAction值匹配,而它不匹配。在我的计算机上测试此代码:
exportButton.OnAction = "'G:\NetworkLocation\SPC_BUTTONS.xlam!'EXPORTSPC"
将导致“Assign Macro”更改为“EXPORTSPC”,即使正在调试
debug.print exportButton.OnAction
仍然显示原始的OnAction值。当我将文件移动到车间计算机时,“分配宏”将显示“G:\NetworkLocation\SPC\U 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\u BUTTONS.xlam!EXPORTSPC”
我用网络驱动器上的XLAM和桌面上的XLS文件对此进行了测试。我已经将XLS文件复制到网络位置,它仍然有效。我还做了一个SaveAs
,将XLS文件放在另一个网络驱动器上,操作仍在继续
当然,这需要用户的Excel实例启用外接程序
或者,尝试用单引号括起路径和文件名:
.OnAction=“'G:\NetworkLocation\SPC\u BUTTONS.xlam'!EXPORTSPC”
这个方法似乎保留了
OnAction
绝对路径。实际上,这是我最初设置的,它已经工作了一段时间。但这已经不起作用了:(您如何知道链接正在更改?能否编辑您的问题以显示您是如何调试此链接的,以确定操作
路径正在更改为,例如,'g:\NetworkLocation\SPC\u BUTTONS.xlam!EXPORTSPC'
?请将其放入问题中,因为在注释中不容易阅读。我已添加了注释a。)bove和一个fe