我在公司里有一个小任务。任务非常简单,但是却很混乱。许多年前,我们有人为Excel创建小型VBA代码。当时的格式为Excel 97-2003。今天,我们使用的是Office365。现在,像这样,加载项图标在启动过程中从Excel中消失,还有其他图标不会消失,并且是“邻居”我们的图标。我可以添加它,下次启动Excel时就可以了,但是下次启动Excel时不可用。在Excel加载项中仍处于选中状态,但只是没有出现。我向Google搜寻了解决方案,但是解决方法不是我想要的。一些解决方法是将文件保存在受信任的位置,我做到了,但这就是结果。实际上,该文件现在位于受信任的位置。因此,我认为是导致问题的实际代码。下面的代码是原始的。我什么都没做。
Option Base 1
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim cb As CommandBars
Dim name As Variant
Dim j As Integer
Dim i As Integer
On Error Resume Next
Set cb = Application.CommandBars
For j = cb.Count To 1 Step -1
If cb(j).name = "iSeries Access" Or cb(j).name = "Client Access" Then
cb(j).Visible = False
name = cb(j).name
With cb(name)
For i = .Controls.Count To 1 Step -1
If .Controls(i).Caption = "Format BPCS Bill Of Material..." Then
.Controls(i).Delete
GoTo nn
End If
If .Controls(i).Caption = "Custom" Then
.Controls(i).Enabled = True
.Controls(i).Visible = True
End If
If .Controls(i).Caption = "&Dialog" Then
.Controls(i).Enabled = True
.Controls(i).Visible = True
End If
nn:
Next
End With
cb(j).Visible = True
j = 1
End If
Next
With cb("Data").Controls.Item("Transfer &Data To iSeries...")
.Enabled = True
.Visible = True
End With
With cb("Data").Controls.Item("T&ransfer Data From iSeries...")
.Enabled = True
.Visible = True
End With
Set cb = Nothing
End Sub
Private Sub Workbook_Open()
Dim ad As AddIns
Dim found As Boolean
Dim CBar As CommandBars
Dim Mbar As CommandBar
Dim CMbar As CommandBarControl
Dim i As Integer
Dim warn As Dialog
Dim j As Integer
Set CBar = Application.CommandBars
'On Error Resume Next
Set ad = Application.AddIns
'Application.DisplayAlerts = True
'found = False
found = True
Application.DisplayAlerts = True
'For i = ad.Count To 1 Step -1
' If ad(i).name = "cwbtfcai.dll" Then
' found = True
' If ad(i).Installed = False Then
' ad(i).Installed = True
' End If
' Exit For
' End If
'Next
'Set ad = Nothing
If found = False Then
warn = MsgBox("Couldn't find 'iSeries...' or 'Client Access Data Transfer' addin!", vbCritical + vbOKOnly)
Application.AddIns("Simple_Excel_iSeries").Installed = False
Workbooks("Simple_Excel_iSeries.xla").Close
Else
For i = CBar.Count To 1 Step -1
If CBar(i).name = "IBM i Access" Or CBar(i).name = "iSeries Access" Then
Do
If CBar(i).Visible = True Then
Exit Do
End If
Loop
'CBar(i).Visible = False
For j = 1 To CBar(i).Controls.Count
With CBar(i).Controls(j)
' .Enabled = False
End With
Next
With CBar(i).Controls.Add(Type:=msoControlButton, before:=1)
.Caption = "Format BPCS Bill Of Material..."
.OnAction = "Format_BPCS_Excel"
.FaceId = 173
.Visible = True
.Enabled = True
End With
CBar(i).Visible = True
End If
Next
End If
'With CBar("Data").Controls.Item("Transfer &Data To iSeries...")
' .Enabled = False
'End With
'With CBar("Data").Controls.Item("T&ransfer Data From iSeries...")
' .Enabled = False
'End With
Set CBar = Nothing
Application.DisplayAlerts = False
End Sub
答案 0 :(得分:1)
我使用外接程序工作,并且在过去也遇到了同样的问题-外接程序列表中选择了外接程序,但在Excel打开时不会加载。下面的方法可能无法解决您的特定问题,但可能会对遇到类似问题的其他人有所帮助。我试图用Workbook_Open
代码来加载加载项,但这并不能解决我的问题。
症状:您在共享驱动器上有一个Excel加载项(.xlam
,.xla
)。您将其添加到Excel中的加载项列表。第一次执行此操作时,它不会出现问题。重新启动Excel后,尽管外接程序在外接程序列表中显示为选中状态,但外接程序不会加载。
假设:您正在使用Windows,.xlam
,.xla
文件位于共享驱动器上的文件夹中,每个用户都将访问该文件。
选项1(必须在用户计算机上完成):
复制文件夹路径并将其粘贴到Excel中的Trusted Locations
中。您需要选中显示Allow trusted locations on my network
的框。 (位于“文件”->“选项”->“可信中心”->“信任中心设置”->“可信位置”下)
接下来,您还必须将此位置添加为Intranet上的受信任位置。为此,您必须打开Internet Explorer
,然后转到“设置”->“ Internet选项”->“安全性”->“本地Intranet”->“站点”->“高级”。在那里,您应该粘贴加载项的文件夹路径,添加并保存。 IE
的那部分令我感到非常惊讶,经过大量的谷歌搜索,我花了两天时间才找到答案。
将您的加载项添加到Excel中的列表。当提示您将文件复制到个人文件夹时,选择否。如果应该假定外接程序的所有用户都使用共享驱动器中相同版本的外接程序,则请确保他们始终选择“否”。如果已经选择了加载项,则可能值得检查Excel是否实际使用了预期的副本而不是“个人文件夹”副本。
选项2(必须在用户计算机上完成):
Startup
文件夹。在选项->高级->常规下,您可以添加文件夹路径,Excel将打开该文件夹中的所有文件。您可以仅提供一个带有加载项的文件夹,但是请记住,Excel会打开指定文件夹中的所有Excel文件,可能并非每个用户都希望这样做,因此您可能必须配置一个单独的Startup
文件夹对于每个用户来说,它可能会变得麻烦很多用户,而且添加了一个外接程序,因此这更像是一种解决方法。同样,这可能无法解决您的问题,但对其他人可能有用。