Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1116to1120
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Addins beim Datei öffnen per VBA deaktivieren

Addins beim Datei öffnen per VBA deaktivieren
Gueni
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Excel ohne AddIns starten oder diese deaktivieren
18.11.2009 19:14:04
NoNet
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
Anzeige
AW: Excel ohne AddIns starten oder diese deaktivieren
19.11.2009 07:51:56
Andre´
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
Anzeige
AW: Excel ohne AddIns starten oder diese deaktivieren
20.11.2009 10:31:14
Gueni
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
Anzeige
AW: Excel ohne AddIns starten oder diese deaktivieren
24.11.2009 15:25:17
Detlef
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
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige