Microsoft Excel

Herbers Excel/VBA-Archiv

Addins beim Datei öffnen per VBA deaktivieren | Herbers Excel-Forum


Betrifft: Addins beim Datei öffnen per VBA deaktivieren von: Gueni
Geschrieben am: 18.11.2009 18:33:34

Moin, moin,

ich suche eine Möglichkeit neben den Standardmenus und Symbolleisten von Excel, die auf einen Rechner evtl. weiterhin installierten Addins (mit entsprechenden Menus) beim öffnen einer Datei zu deaktivieren und beim beenden der Datei die ursprüngliche Installation des Rechners / Excel wieder herzustellen.
Bei folgendem Code (zusammengesucht und selbst erstellt) entstehen leider bei einigen addins _ Fehler:



Private Sub Workbook_Open()

Dim oBar As CommandBar
Dim wks As Worksheet
Dim iRow As Integer
Dim strFileName As String
Dim oPopUp As CommandBarControl
Dim sPopUp As String
Set wks = ThisWorkbook.Worksheets("CmdBars")
wks.Cells.ClearContents

For Each oBar In Application.CommandBars
    If oBar.Visible And oBar.Type <> msoBarTypeMenuBar Then
        iRow = iRow + 1
        wks.Cells(iRow, 1).Value = oBar.Name
        oBar.Visible = False
    End If
Next oBar

...

End Sub

so schreibt die Routine die installierten Symbolleisten in das entsprechende Dateiblatt
unter anderem auch die per addin installierte "Sun ODF Plugin"
wird nun jedoch beim schliessen der Datei die folgende Routine aufgerufen:



Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim oBar As CommandBar
Dim iRow As Integer
Dim oPopUp As CommandBarControl
Dim sPopUp As String
.....
iRow = 1
With ThisWorkbook.Worksheets("CmdBars")
    Do Until IsEmpty(.Cells(iRow, 1))
        Application.CommandBars(.Cells(iRow, 1).Value).Visible = True
        iRow = iRow + 1
    Loop
    .Cells.ClearContents
End With
...
End Sub

dann erscheint ein Laufzeitfehler '5' ungültiger Prozeduraufruf oder ungültiges Argument.
Mein Ansatz die addins zu deaktivieren, glückt leider nicht; evtl. mache ich da einen Fehler oder übersehe etwas:
Beim Open Workbook habe ich folgendes eingefügt:


Private Sub Workbook_Open()
Dim oVBP As Object
Dim oBar As CommandBar
Dim wks As Worksheet
Dim iRow As Integer
Dim strFileName As String
Dim oPopUp As CommandBarControl
Dim sPopUp As String
Set wks = ThisWorkbook.Worksheets("CmdBars")
wks.Cells.ClearContents
For Each oVBP In Application.VBE.VBProjects
    If Right(oVBP.Filename, 3) = "xla" Then
        iRow = iRow + 1
    If InStr(1, oVBP.Filename, "\") Then
      strFileName = Mid(oVBP.Filename, InStrRev(oVBP.Filename, "\") + 1)
      strFileName = Mid(strFileName, 1, Len(strFileName) - 4)
    End If
        wks.Cells(iRow, 2).Value = strFileName
        AddIns(strFileName).Installed = False
    End If
Next oVBP
    
iRow = 0
For Each oBar In Application.CommandBars
    If oBar.Visible And oBar.Type <> msoBarTypeMenuBar Then
        iRow = iRow + 1
        wks.Cells(iRow, 1).Value = oBar.Name
        oBar.Visible = False
    End If
Next oBar


End Sub

Es erscheint nun der Laufzeitfehler '9' Index ausserhalb des gültigen Bereichs ( in diesem Fall das Addin xlWebFinder)
Da ich nicht weiss, welche addins auf dem jeweiligen Rechner installiert sind und eine manuelle Deaktivierung eigentlich keinen Sinn macht (weiss ich ob dass auf Dauer von jedem User gemacht wird) suche ich eine Möglichkeit die von mir gewünschte Oberfläche zu erzeugen inklusiv Deaktivieren von crtl-c etc. und am Ende eine Wiederherstellung der Ausgangssituation.

Hat jemand einen Hinweis eine Idee oder gar Lösung???
für jeden Tipp dankbar

Gueni

  

Betrifft: Excel ohne AddIns starten oder diese deaktivieren von: NoNet
Geschrieben am: 18.11.2009 19:14:04

Hallo Gueni,

Du könntest die Datei auch per Verknüpfung zu Excel starten, ohne die AddIns mit zu laden ("Abgesicherter Modus") :

Excel.Exe /s : Startet Excel ohne AddIns

Das Gleiche mit einer geladenen Mappe :
"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /s "C:\Temp\DeineMappe.xls"

Oder aber Du deaktivierst die AddIns per VBA :

'18.11.2009, NoNet - www.excelei.de
Option Explicit

Sub AddInsDeaktivieren()
    Dim objAddIn As Excel.AddIn
    Dim objComAddIn As COMAddIn
    Dim lngZ As Long
    
    'Zuerst die "Normalen" AddIns :
    For Each objAddIn In Application.AddIns
        If objAddIn.Installed Then
            lngZ = lngZ + 1
            ThisWorkbook.Sheets("AddIns").Cells(lngZ, 1).Value = objAddIn.FullName
            objAddIn.Installed = False
        End If
    Next

    lngZ = 0
    'Jetzt die COM-AddIns :
    For Each objComAddIn In Application.COMAddIns
        If objComAddIn.Connect Then
            lngZ = lngZ + 1
            'ThisWorkbook.Sheets("AddIns").Cells(lngZ, 2).Value = objComAddIn.Description
            ThisWorkbook.Sheets("AddIns").Cells(lngZ, 2).Value = lngZ 'Nur die Nr. des COM- _
AddIns speichern
            objComAddIn.Connect = False
        End If
    Next
End Sub

Sub AddInsAktivieren()
    Dim objAddIn As Excel.AddIn
    Dim objComAddIn As COMAddIn
    Dim lngZ As Long
    
    With ThisWorkbook.Sheets("AddIns")
        lngZ = 1
        'Zuerst die "Normalen" AddIns :
        While .Cells(lngZ, 1) <> ""
            Application.AddIns(.Cells(lngZ, 1).Value) = True
            lngZ = lngZ + 1
        Wend

        lngZ = 1
        'Jetzt die COM-AddIns :
        While .Cells(lngZ, 2) <> ""
            Application.COMAddIns(.Cells(lngZ, 2).Value).Connect = True
            lngZ = lngZ + 1
        Wend
    End With
End Sub
Beachte aber bitte dass durch die Deaktivierung eines AddIns noch nicht automatische dessen Menü-/Smybolleiste gelöscht wird, das muss PROAKTIV im VBA-Code des AddIns erfolgen.
Bei "Sauber" programmierten AddIns ist das der Fall, aber die Erfahrung zeigt leider, dass mehr als 50% aller AddIns die Menü-/Symbolleisten bestehen lassen (bzw. sie wurden als "Temporary:=TRUE" erstellt, d.h. erst beim Schließen von Excel werden diese wieder gelöscht !

Gruß, NoNet


  

Betrifft: AW: Excel ohne AddIns starten oder diese deaktivieren von: Andre´
Geschrieben am: 19.11.2009 07:51:56

Hallo NoNet,

bei Deinem Code erhalte ich Laufzeitfehler '9' (Index außerhalb des gültigen Bereichs)

Sub AddInsAktivieren()
    Dim objAddIn As Excel.AddIn
    Dim objComAddIn As COMAddIn
    Dim lngZ As Long
    
    With ThisWorkbook.Sheets("AddIns")
        lngZ = 1
        'Zuerst die "Normalen" AddIns :
        While .Cells(lngZ, 1) <> ""
            Application.AddIns(.Cells(lngZ, 1).Value) = True  'hier kommt Laufzeitfehler  _
9
            lngZ = lngZ + 1
        Wend

        lngZ = 1
        'Jetzt die COM-AddIns :
        While .Cells(lngZ, 2) <> ""
            Application.COMAddIns(.Cells(lngZ, 2).Value).Connect = True
            lngZ = lngZ + 1
        Wend
    End With
End Sub
Wie kann man das ändern?

MFG Andre


  

Betrifft: AW: Excel ohne AddIns starten oder diese deaktivieren von: Gueni
Geschrieben am: 20.11.2009 10:31:14

Hallo NoNet,



erst einmal herzlichen Dank für die schnelle Reaktion;

ich bin nicht so schnell (mehrere andere Projekte die etwas mehr Zeitdruck haben).



Die Idee mit dem abgesicherten Modus hat m.E. den meisten Charme, weil ich so ja die Problematik mit den weniger sauber programmierten addins umgehen könnte.

Ein erster Test zeigt mir aber, das dabei eine für den Enduser verwirrende Systemmeldung erscheint (Excel wird neu installiert???). Damit - glaube ich - kann ich "nicht auftauchen"; das wird zu mehr Verwirrung führen als gewünscht.



Die andere Vorgehensweise habe ich noch nicht testen können. Werde ich erst Anfang nächster _ Woche zu kommen.

Bei "Sauber" programmierten AddIns ist das der Fall, aber die Erfahrung zeigt leider, dass mehr als 50% aller AddIns die Menü-/Symbolleisten bestehen lassen (bzw. sie wurden als "Temporary:=TRUE" erstellt, d.h. erst beim Schließen von Excel werden diese wieder gelöscht !
Gibt es denn eine (andere) Möglichkeit, die Menu/Symbolleisten einfach komplett zu deaktivieren und erst dann die von mir gewünschten Menus zu aktivieren???

Ich danke allen, die hier mit Tipps und Hinweisen mir weiterhelfen.



Ich wünsche mir mehr Zeit, um endlich tiefer in die VBA-Geheimnisse einzusteigen, aber bei diesen Problemstellungen komme ich nicht mit der sog. Fachliteratur weiter.

Da hilft das Forum deutlich mehr (bisher habe ich viel über die Suchfunktion gelernt/abgekupfert)!!



Ich hoffe weiter auf eure Hilfe



Danke Gueni


  

Betrifft: AW: Excel ohne AddIns starten oder diese deaktivieren von: Detlef
Geschrieben am: 24.11.2009 15:25:17

Hallo Gueni,

das mit dem kompletten Ausblenden der Menü-/Symbolleiste könnte so funktionieren. Als neues Menü habe ich nur speichern zugelassen.

Microsoft Excel Objekt DieseArbeitsmappe

' CommandBar-NewMenu.xls, Modul »DieseArbeitsmappe« 
Option Explicit 
Dim visibleCommandBars As New Collection 
 
Private Sub Workbook_Open() 
    Dim cb As CommandBar, c As CommandBarControl 
    Application.Caption = "MyExcel" 'Ersatz für Microsoft Excel 
    ActiveWindow.Caption = "MusterAnwendung" 'Ersatz für Dateinamen 
     
    On Error Resume Next 
     
    ' Symbolleiste mit Basisdaten unsichtbar 
    Application.CommandBars("Commandbar-New").Visible = False 
    Set cb = Application.CommandBars.Add(Name:="NewMenu", MenuBar:=True, Position:=msoBarTop) 
    For Each c In Application.CommandBars("Commandbar-New").Controls 
      c.Copy cb 
    Next 
     Application.DisplayFormulaBar = False 
     
    '** Hinzufügen von Symbolen zur Symbolleiste 
    With Application.CommandBars("NewMenu").Controls 
         .Add Type:=msoControlButton, ID:=3, Before:=1  'speichern 
    '       .Add Type:=msoControlButton, ID:=4, Before:=2 'drucken 
    End With 
End Sub 
 
' Aufräumarbeiten 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    On Error Resume Next 
    ' Symbolleiste löschen 
    Application.Caption = " Microsoft Excel" 
    Application.CommandBars("Commandbar-New").Delete 
    ' neue Menüleiste löschen (dabei wird automatisch die Standardmenü aktiv) 
    Application.CommandBars("NewMenu").Delete 
    Application.DisplayFormulaBar = True 
End Sub 
 
Private Sub Workbook_Activate() 
    Dim cb As CommandBar 
    ' neue Menüleiste sichtbar 
    Application.CommandBars("NewMenu").Visible = True 
    ' alle Symbolleisten abschalten 
    For Each cb In Application.CommandBars 
      If cb.Type = msoBarTypeNormal And cb.Visible = True Then 
        visibleCommandBars.Add cb, cb.Name 
        cb.Visible = False 
      End If 
    Next 
    Application.DisplayFormulaBar = False 
End Sub 
 
Private Sub Workbook_Deactivate() 
    Dim cb As Object 
    On Error Resume Next 
    Application.CommandBars("NewMenu").Visible = False 
    ' alle Symbolleisten abschalten 
    For Each cb In visibleCommandBars 
      cb.Visible = True 
    Next 
    Set visibleCommandBars = Nothing 
End Sub 
 



Gruß Detlef


Beiträge aus den Excel-Beispielen zum Thema "Addins beim Datei öffnen per VBA deaktivieren "