# Excel Sicherheitswarnung verhinder



## Yoah (1. August 2005)

Moin,

ich habe da mal wieder eine Frage, und zwar:

Wie verhinder ich, wenn ich eine Excel-Datei öffne, dass sich das Fenster
für die Sicherheitswarnung hinsichtlich der gefährlichkeit der Makros öffnet?

Und zwar habe ich folgenden Code:

```
ToolName = ToolName + ".xls"
	Dim ExcelSheet
	Set ExcelSheet = GetObject(ToolName)
	ExcelSheet.Application.Visible=False
	ExcelSheet.Parent.Windows(1).Visible=False
```
 
In Excel sollen Berechnungen laufen, die jedoch keiner sehen soll.
Ich habe es schon mit

```
ExcelSheet.Application.DisplayAlerts=False
```
versucht, jedoch ohne Erfolg, das funktioniert nur beim beenden von Excel,
wo er fragt, ob man speichern möchte.


----------



## duckdonald (1. August 2005)

Hi,

die Meldung über die Warnung zu Makros ist eine Programmeinstellung:

Extras -> Optionen -> Register Sicherheit -> Button Makrosicherheit

dort kann die Meldung abgeschaltet werden.


Eine Umgehung dieser Frage mittels eines Makros hätte wohl wenig Sinn!!


----------



## Yoah (1. August 2005)

Das ist klar, das sind jedoch Programmeinstellungen und
das bringt mir leider nichts, da die Exceldatei nicht nur
von einem Rechner aufgerufen wird, sondern von mehreren,
auf denen Excel installiert ist.

Der Sinn des Ganzen, ist es ja, nichts zu sehen.


----------



## Orakel (1. August 2005)

Hi Yoah,

sorry, aber da sehe ich keine Möglichkeit. Solange Du nur die Exceldatei weitergibst, obliegt es dem Anwender seine Sicherheitseinstellungen nach seinem Gutdünken festzulegen. Und wenn die eben nicht auf "niedrig" stehen, kommt diese Abfrage. Ist ja auch Aufgabe von Sicherheitseinstellungen

Gruß
Das Orakel


----------



## Yoah (1. August 2005)

Schon klar, trotzdem Danke!

Weißt du zufällig ab welcher Version automatische
Sicherheitswarnungen angezeigt werden?


----------



## Orakel (1. August 2005)

Hi bin mir jetzt nicht absolut sicher, aber ich glaub bereits in der 97 er Version konnte dies durch diverse Patche aktiviert werden.

Gruß
Das Orakel


----------



## Ein_Freund (1. August 2005)

Hellas,

ich hatte mal ein ähnliches Problem. Als Lösung hatte ich mir dann ein Programm geschrieben, welches den zuständigen Wert in der Registry zunächst geändert und anschliessend die Excel-Datei geöffnet hat. Mag umständlich klingen, aber ist auf die Dauer doch angenehmer, als jedes mal :  Excel starten --> Sicherheit runter --> Excel schliessen --> Excel wieder starten. (jetzt werden sich einige Leute zurecht fragen, warum das jedesmal nötig war: ganz einfach, wir haben an der Uni eine Art HDD-Sheriff)

Mit einem Makro selbst, kannst Du das nach meinem Wissensstand nicht realisieren - natürlich nicht, sonst grenzte die ganze Geschichte an Sinnfreiheit, wenn sich ein Makro selbst die Erlaubnis geben könnte, sich zuzulassen


----------



## Yoah (2. August 2005)

Hast du das Programm zufällig parat, könnte mir echt weiter helfen!


----------



## Ein_Freund (2. August 2005)

Hallo,

nein, dass Programm an sich existiert nicht mehr, da es inzwischen nicht mehr benötigt wird. Aber ich habe noch den Kern-Quellcode (wat'ne Wortbildung  ) und mit dem solltest Du das hinbekommen.

Folgender Quellcode ändert den Wert auf eins (also auf niedrig). Ist natürlich für meine Konfiguration erstellt worden, aber mit ein wenig adaptiver Arbeit ist das kein Problem. Das Hauptproblem, das ich hatte, war herauszubekommen, wo der Schlüssel in der Registry liegt. Und das Problem habe ich auch damals nicht lösen können. 

Der Schlüssel: HKEY_CURRENT_USER, "Software\Microsoft\Office\11.0\Excel\Security" , "Level"
Die Werte 1-4 stehen dann halt für niedrig bis sehr hoch...

```
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByVal ulOptions As Integer, ByVal samDesired As Integer, ByRef phkResult As Integer) As Integer

    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer

    Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As Integer, ByRef lpData As Integer, ByVal cbData As Integer) As Integer

    Private Declare Function RegSetValueEx_Str Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As Integer, ByVal lpData As String, ByVal cbData As Integer) As Integer

    Const KEY_READ As Boolean = &H1S Or &H8S Or &H10S
    Const KEY_ALL_ACCESS As Boolean = &H1S Or &H2S Or &H4S Or &H8S Or &H10S Or &H20S
    Const ERROR_SUCCESS As Short = 0
    Const HKEY_CURRENT_USER As Integer = &H80000001
    Const REG_DWORD As Short = 4
    Const REG_SZ As Short = 1

    Private RegRoot As Integer

    Private Sub setLEVEL()
        Dim Result, LngInt As Integer
        LngInt = 1
        Result = RegValueSet(HKEY_CURRENT_USER, ("Software\Microsoft\Office\11.0\Excel\Security"), ("Level"), LngInt)

        If Result = 0 Then
            MsgBox("Wert wurde gesetzt", MsgBoxStyle.OKOnly + MsgBoxStyle.Information)
        Else
            MsgBox("Fehler beim setzen des Wertes", MsgBoxStyle.OKOnly + MsgBoxStyle.Information)
        End If
    End Sub

    Function RegValueSet(ByRef Root As Integer, ByRef Key As String, ByRef Field As String, ByRef Value As Object) As Integer
        Dim hKey, Result, l As Integer
        Dim s As String
        'Wert in ein Feld der Registry schreiben
        Result = RegOpenKeyEx(Root, Key, 0, KEY_ALL_ACCESS, hKey)
        If Result = ERROR_SUCCESS Then
            Select Case VarType(Value)
                Case VariantType.Short, VariantType.Integer
                    l = CInt(Value)
                    Result = RegSetValueEx(hKey, Field, 0, REG_DWORD, l, 4)
                Case VariantType.String
                    s = CStr(Value)
                    Result = RegSetValueEx_Str(hKey, Field, 0, REG_SZ, s, Len(s) + 1)
            End Select
            Result = RegCloseKey(hKey)
        End If

        RegValueSet = Result
    End Function
```

Schaut erstmal vielleicht bissl kompliziert aus, aber so schlimm ist das nicht.


----------

