VBAPassword Eingabeaufforderung beim Schließen von Excel

8

Ich habe Code in einem Projekt, um Daten von einem Blatt in ein Recordset zu lesen. Der VBA-Code ist passwortgeschützt.
Zum Testen habe ich den Code wie folgt vereinfacht:

%Vor%

Immer wenn ich diesen Code von einem Benutzerformular aus ausführen lasse, werde ich nach dem Schließen von Excel nach dem VBAProject-Passwort gefragt. Abhängig von der, ich denke, Anzahl der Module in der Arbeitsmappe, muss ich mindestens zweimal abbrechen Ich habe mir in der letzten Woche den Kopf darüber gebrochen, habe jeden Beitrag im Netz gelesen, den ich finden konnte, aber ich habe noch keine Lösung gefunden.

    
Stefan 06.06.2014, 11:35
quelle

6 Antworten

2

Wie von Miqi180 angegeben, tritt dieses Problem auf, wenn Verweise auf die Arbeitsmappe nicht ordnungsgemäß gelöscht werden. siehe Microsoft Knowledge Database

Es kann auch auftreten, wenn Office AddIns installiert ist. Es gab / gibt bekannte Probleme:

R. Oosterholt 02.12.2016 11:18
quelle
1

Deaktivieren Sie 'OLE Automation' im Fenster 'Referenzen':

    
Tens 22.12.2015 18:54
quelle
1

Ich habe das gleiche Problem in einem Outlook-Projekt, das eine Excel-Datei öffnet, also im Gegensatz zu dem, was andere spekuliert haben, nicht direkt auf die Datenbank (ADO oder DAO) -Technologie bezogen.

Von der Microsoft Knowledge Database :

  

SYMPTOME

     

Nach dem Ausführen eines Makros, das eine Referenz für eine Arbeitsmappe übergibt   enthält ein passwortgeschütztes VBA-Projekt für eine ActiveX-Dynamic Link   Bibliothek (DLL), werden Sie aufgefordert, das VBA-Projektpasswort einzugeben   Excel wird beendet.

     

URSACHE

     

Dieses Problem tritt auf, wenn das ActiveX-DLL nicht ordnungsgemäß freigegeben wird   der Verweis auf die Arbeitsmappe, die den kennwortgeschützten VBA enthält   Projekt.

Das Problem tritt normalerweise auf, wenn ein Zirkelverweis zwischen Objekten vorhanden ist und die Kennworteingabeaufforderung angezeigt wird, wenn die Objekte eine Referenz für eine geschützte Arbeitsmappe enthalten, wenn Excel geschlossen wird.

Beispiel: ObjectA speichert einen Verweis auf objectB, und objectB speichert einen Verweis auf objectA. Die beiden Objekte werden nicht zerstört, es sei denn, Sie haben explizit set objectA.ReferenceToB = Nothing oder objectB.ReferenceToA = Nothing .

Da ich die Symptome nicht replizieren kann, indem ich den Code auf meinem Computer ausführe, vermute ich, dass Sie Ihren Code für Stackoverflow so geändert haben, dass das Problem behoben wird, z. durch Neudefinieren von öffentlichen Variablen im Rahmen des Verfahrens.

    
Miqi180 25.10.2015 17:32
quelle
1

Dies ist ein Problem, das meine eigenen Excel-VBA-Add-Ins für eine kleine Anzahl von Kunden zeitweilig geplagt hat. Ich habe das Problem in meiner Online-Dokumentation dokumentiert: VB Password Prompt .

Während ich an einer bestimmten Situation für einen Kunden gearbeitet habe, habe ich eine Lösung gefunden. Ich weiß nicht, ob es nur für seine Situation funktioniert (nur an meiner Maschine) oder ob es breiter anwendbar ist.

Fügen Sie am Ende des Workbook_BeforeClose-Ereignisses die Zeile "ThisWorkbook.Saved = True" ein:

%Vor%

Wenn jemand eine Chance hat, dies zu versuchen, können Sie mir mitteilen, ob es für Sie und / oder Ihre Kunden hilft.

    
Jon Peltier 19.08.2016 01:54
quelle
0

DAO ist keine großartige Plattform zum Lesen von Daten aus Excel-Dateien.

Tatsächlich ist keiner der verfügbaren Microsoft-Datenbanktreiber-Technologien - sie haben alle einige Speicherlecks, und die älteren erstellen eine versteckte Instanz von Excel.exe - so etwas im VBA-Projekt (wie z. B. a fehlende Bibliothek oder ein Ereignis, das nicht kompilierenden Code aufruft) wird die Art von Fehlern, die Excel denken lassen, dass Sie versuchen, auf den Code zuzugreifen, verursachen.

Hier ist ein Code, der ADODB verwendet, eine neuere Datenbanktechnologie, die bei bestimmten Problemen mit DAO funktioniert.

Ich hatte keine Zeit, um all die Dinge auszublenden, die für Ihre Anfrage irrelevant sind - Entschuldigung, es gibt eine Menge davon! - aber in all diesen alternativen Verbindungszeichenfolgen zu bleiben, ist wahrscheinlich ziemlich hilfreich für Sie: Jeder, der diese Art von Problem hat, muss ein wenig herumspielen und herausfinden, welche Technologie durch Versuch und Irrtum funktioniert:

%Vor%

Fall "xlsx"

%Vor%

Fall "xlsm"

%Vor%

Fall "xlsb"

%Vor%

Fall Else     Err.Raise 999, APP_NAME & amp; "GetRecordsetFromWorkbook", "#ERROR - Dateiformat nicht bekannt" Ende Wählen Sie

Bei Fehler GoTo ErrSub

%Vor%

ExitSub: Bei Fehler Fortsetzen Weiter

%Vor%

ErrSub:

%Vor%

'# lässt diese unzugängliche Anweisung für das Debugging unverändert:     Fortsetzen

Ende Funktion

Entschuldigung, wenn Sie Probleme mit Zeilenumbrüchen rund um die '_' Trennlinien haben.

Sie benötigen außerdem Deklarationen für die Konstante 'APP_NAME':

%Vor%

Und eine VBA-API-Deklaration für die 'Schlaf' Funktion:

%Vor%

Das Ausführen von SQL gegen Microsoft Excel wird am besten als eine schlechte Sache angesehen: Ja, SQL ist bei weitem das beste Werkzeug für große Mengen tabellierter Daten; Aber nein, Microsoft wird diese Speicherlecks nicht bald beheben. Niemand in Redmond interessiert sich für das, was Sie dort tun wollen - nicht, wenn Sie eine Kopie von MS-Access oder SQL Server kaufen und Ihre Daten übertragen könnten.

Allerdings ist es immer noch die schlechteste Lösung, wenn Sie keinen eigenen SQL Server bekommen und eine große Menge an Daten in der Tabelle eines anderen Benutzers haben. Oder Tabellenkalkulationen im Plural.

Also hier ist ein schrecklicher Hack, um Excel mit zu lesen SQL

Die Überschrift zu diesem Artikel lautet:

Ein warnendes Märchen von Dingen, die kein Entwickler jemals sehen oder tun sollte, mit Ablenkungen und Abschweifungen in Versagen der Geschäftslogik, Workarounds und schlechteren Umgebungen, Haushaltsfeen, Geschäftsanalytikern und skrofulösen Pilgern, die wundersame Heilung in der Aufzugshalle.

... und du solltest das als Warnung dafür behandeln, was du vorhast: ein langes und bitteres Code-Streiten, um etwas zu tun, was du wahrscheinlich anders machen hättest.

    
Nigel Heffernan 15.05.2015 20:23
quelle
0

Magie! Senden Sie das an eine E-Mail angehängte .xlsm. Senden Sie eine E-Mail an sich und laden Sie den Anhang herunter. Starten Sie, aktivieren Sie vom Internet empfangene Inhalte, aktivieren Sie die Makroausführung. Das Problem ist verschwunden.

    
VincS 20.11.2016 20:29
quelle

Tags und Links