我的Excel加载项添加后不断消失

时间:2018-12-06 10:30:43

标签: excel vba

我在公司里有一个小任务。任务非常简单,但是却很混乱。许多年前,我们有人为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

1 个答案:

答案 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(必须在用户计算机上完成):

  • 这更多是一种解决方法-您可以给Excel一个Startup文件夹。在选项->高级->常规下,您可以添加文件夹路径,Excel将打开该文件夹中的所有文件。您可以仅提供一个带有加载项的文件夹,但是请记住,Excel会打开指定文件夹中的所有Excel文件,可能并非每个用户都希望这样做,因此您可能必须配置一个单独的Startup文件夹对于每个用户来说,它可能会变得麻烦很多用户,而且添加了一个外接程序,因此这更像是一种解决方法。

同样,这可能无法解决您的问题,但对其他人可能有用。