2010-07-07 14 views
7

Ich entwickelte eine Access-Anwendung mit VBA. Jedesmal, wenn ich Zugang öffnen, erhalte ich folgende:Wie VBA-Sicherheitswarnung loswerden

https://lh5.googleusercontent.com/wgn5B5PllVXGuG6W4_xiFa1rouSpDSn27MC0nzPkgJ5CPN8BKpAn-gDFsVS4GZtepY-c4jtbEupKeV227ogICQlzcg=s512

Ich habe klicken Optionen ->Inhalt aktivieren meinen Makros ausführen. Diese Anwendung wird unter ein paar Leuten bei der Arbeit geteilt, die nicht so technisch versiert sind. Also nach Anforderungen muss ich es entfernen. Ich habe versucht, die Datenbank zu signieren/zu packen, aber die Warnung wird trotzdem nicht gelöscht.

+0

Aus dem Aussehen Ihres Screenshots ist Access 2007 und nicht 2003 oder 2010. – jdw

Antwort

11

Um dies zu tun, müssen Sie den Ort hinzufügen, von dem der Excel in den "vertrauenswürdigen Orten" gestartet wird.

Um dies zu tun, gehen Sie wie folgt vor:

  • In Excel-Optionen, um Trust Center gehen und dann Standorte
  • Fügen Sie den Standort Trusted.

Dies müsste auf einer PC-Basis erfolgen.

Darüber hinaus gibt es keine Möglichkeit, dies aus der Sicht einer Excel-Datei zu tun, da dies die Sicherheitsfeature, den Benutzer den VBA-Code ausführen zu lassen, völlig aufhellen würde.

Auch eine kleine Randbemerkung, wenn Sie Ihre Excel-Datei unterschreiben, benötigen Sie immer noch den Empfänger, Ihnen als Herausgeber zu vertrauen, deshalb hat Ihre Lösung wahrscheinlich nicht funktioniert.

Edit:

Ange Kommentare, es scheint eine Möglichkeit zu sein, es programmatisch zu tun. Wie von XpertsExchange übernommen,

Warum nicht einfach den Registrierungseintrag aus Code festlegen, ohne Shell aufrufen? Verwenden Sie die CRegistry Klasse hier:

http://www.vbaccelerator.com/home/VB/Code/Libraries/Registry_and_Ini_Files/Complete_Registry_Control/article.asp

VBA-Code:

Dim c As New cRegistry 
    With c 
     .ClassKey = HKEY_CURRENT_USER 
     .SectionKey = "Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\YourTrustedLocationName" 
     .ValueKey = "Path" 
     .ValueType = REG_DWORD 
     .Value = "Full path to Trusted Folder" 
    End With 

Der einzige Nachteil ist, dass YourTrustedLocationname eindeutig sein muss ...

Sie müssten versuchen, wenn es sollte .ValueType = REG_DWORD oder REG_SZ sein. Da bin ich mir nicht sicher.

+0

danke. Gibt es eine Möglichkeit, es einzubetten? Ich habe nicht den Luxus, einen vertrauenswürdigen Ort hinzuzufügen. – masfenix

+1

Ja Kumpel. Andernfalls würden Sie den Zweck des Sicherheitsmerkmals als Ganzes vereiteln. Stellen Sie sich vor, ich mache das, packe einen VBA-Virus und sende Ihnen die Datei. Wenn die Datei Makros automatisch ausführen würde, ohne mich vorher zu fragen, wäre es sinnlos, dieses zusätzliche Sicherheitsmerkmal zu haben. – Trefex

+0

Ich sehe Ihren Punkt, danke sehr. – masfenix

2

Lassen Sie Ihr Makro von einer vertrauenswürdigen Stelle signieren.

+0

Access 2007 lässt das Signieren von Code in Datenbankdateien der Typen .accdb, .accdr und .accde nicht zu. MS hat das Feature entfernt (und in Version 2010 zurückgebracht). Version 2007 ermöglicht das Signieren von Code in Datenbanken vom Typ .mdb, andernfalls kann nur ein Installationspaket signiert werden (was nicht gut ist, wenn der Endbenutzer Access Runtime verwendet und keinen einfachen Zugriff zum Hinzufügen eines vertrauenswürdigen Speicherorts hat). – jdw

3

Es ist eine benutzerspezifische Option. Jeder müsste Ihrem Arbeitsbuch "vertrauen".

Klicken Sie in Excel auf die Menüschaltfläche, und wählen Sie Excel-Optionen. Wählen Sie in diesem Fenster Vertrauensstellungscenter und dann Vertrauensstellungseinstellungen aus. Wählen Sie in diesem Fenster Vertrauenswürdige Speicherorte.

Auf diesem Bildschirm sollten Sie wahrscheinlich die Option "Vertrauenswürdige Standorte in meinem Netzwerk zulassen" aktivieren und dann auf Standort hinzufügen klicken und den Netzwerkpfad Ihrer Arbeitsmappe hinzufügen.

0

Ich habe ein Setup-Projekt mit Visual Studio 2010 erstellt (unter Setup & Deployment-Projekte).In diesem Projekt konfigurieren Sie, die MS Access-Anwendung zu "C: \ Ntapps \ MsOffice \ Office12 \ ACCWIZ \" zu installieren/zu kopieren. Dies ist ein Ordner für vertrauenswürdige Datenbanken. Erstellen Sie dann eine Verknüpfung zu der MS Access-Anwendung, und installieren Sie diese an dem gewünschten Speicherort.

Wenn alles in Ordnung ist und die Installation abgeschlossen ist, vertraut MS Access (bei Standardkonfiguration) jetzt der Datenbank.

Good Luck;)

Grtz, Tom

+0

Der Standardinstallationsstandardspeicherort für den Ordner, den Sie erwähnen (für Access 2007) ist "% ProgramFiles (x86)% \ Microsoft Office \ Office12 \ ACCWIZ". Ihr Pfad ist kein standardmäßiger Standardpfad und höchstwahrscheinlich einzigartig für Ihre Installation. Beachten Sie, dass dieser Ordner keinen Schreibzugriff für einen Benutzer ohne Administratorrechte hat, falls sich jemand fragt, ob dies eine Sicherheitslücke darstellt. – jdw

5

Obwohl diese Frage Jahre alt ist, nur für den Fall kann es, hier helfen ist, was ich tat. Es ist eine andere Herangehensweise als die bereits vorgeschlagenen, und es kann jemand anderem dienen. In meinem Fall wurde MsAccess nicht direkt vom Benutzer geöffnet. Stattdessen wurde MsAccess mithilfe von Automatisierung aus einer anderen benutzerdefinierten Anwendung gestartet. Anstatt also den Benutzer auf "Inhalt aktivieren" zu setzen, haben wir diese benutzerdefinierte Anwendung angewiesen, MsAccess mitzuteilen, dass die Makros aktiviert werden sollen. Etwas ähnliches wie folgt aus:

cli = create_object("Access.Application") 
cli.AutomationSecurity = 1    # 1 = msoAutomationSecurityLow 
cli.visible = true 
cli.opencurrentdatabase("c:/Users/jmperez/AppData/Local/Temp/DB_TMP.mdb") 

(traurig über den obigen Code, es ist nicht von einer ‚Standard‘ oder ‚populäre‘ Programmiersprache, aber es sollte nicht schwierig sein, Visual Basic oder irgendetwas anderes zu adaptieren)

+0

Dieser Code ist genau das, was ich wollte. Ich habe nach einer Möglichkeit gesucht, eine Access-Datenbankdatei zu öffnen, die mit dem Anwendungsobjekt für eine lange Zeit ausgeblendet wurde. Das Festlegen der Eigenschaft 'AutomationSecurity' auf 1 war der Schlüssel zum Unterdrücken des Warndialogfelds für vertrauenswürdige Speicherorte. –