2017-01-25 3 views
2

Ich habe eine Excel-Datei erstellt, die ein Modul enthält, das sich auf Powerpoint bezieht.Vermeiden "Projekt oder Bibliothek nicht finden" auf dem Computer ohne installierte App

Ich mag auf einem Server die anderen Module in dieser Datei verwenden, die nicht Powerpoint (lange Geschichte ...) installiert ist, aber kann dies nicht tun, ohne die gefürchteten entstehen Kann Projekt oder Bibliothek nicht Fehlermeldung finden .

Natürlich kann ich einfach eine andere Version mit dem fehlerhaften Modul löschen, die offensichtlich gut funktioniert.
Es gibt jedoch mehrere Gründe, warum ich das nicht tun möchte, nicht zuletzt, dass ich nicht mehrere Versionen pflegen will, wenn ich helfen kann.

Gibt es einen Weg, z. Excel wird gebeten, dieses Modul zu ignorieren und nicht zu versuchen, es zu kompilieren, wenn es nicht aufgerufen wird?

Ich habe durch 41 Beiträge auf Stackoverflow zu diesem Thema watete, ohne etwas zu finden, das hilft, das macht mich vermuten, dass ich das Unmögliche bin zu fragen.

Es gibt einige Vorschläge, dass eine späte Bindung helfen könnte, aber es scheint keinen Unterschied zu machen. Hier ist der Fehlercode:

Keines der anderen Module bezieht sich auf Powerpoint.

+0

Können Sie einfach die Täterzeilen kommentieren? Oder verwenden Sie diese auf einem anderen Computer? – R3uK

Antwort

2

Gibt es einen Weg, z. Excel wird gebeten, dieses Modul zu ignorieren und nicht zu versuchen, es zu kompilieren, wenn es nicht aufgerufen wird?

Sie bedingte Kompilierung versuchen könnte, das ist ziemlich genau das, was sie tut.

eröffnen die Projekteigenschaften Dialog und definieren eine Projektebene bedingte Kompilierung Konstante:

Project Properties dialog

nun die Powerpoint-abhängige Modul mit #If Richtlinien wickeln:

Option Explicit 
#If HAS_POWERPOINT = 1 Then 
'... entire module body ... 
#End If 

Dann, überall, wo Sie ein Stück Code haben, das in das bedingt kompilierte Modul ruft, umgeben Sie es mit #If Richtlinien:

#If HAS_POWERPOINT = 1 Then 
    MyProcedureThatRunsOffPowerPoint "foo", "bar", 42 
#Else 
    'PowerPoint-dependent module doesn't exist, what do we do instead? 
#End If 

Nun, wenn Sie das Makro an die Maschine zu verteilen, die nicht Powerpoint installiert ist, gehen Sie zu Projekteigenschaften und stellen Sie die Konstante auf 0, dann das Projekt neu kompilieren.

+0

Vielen Dank. Dies scheint genau das zu sein, wonach ich gesucht habe. Ich werde das morgen testen. – Knackiedoo

+0

Ich wusste über bedingte Kompilierung bei der Verwendung verschiedener Versionen von Excel, 64/32 Bit Art Zeug. Ich wusste jedoch nie über die Argumentoption in den Eigenschaften. 18 Jahre mit Excel und noch lernen. Prost. :) –

+2

@ DarrenBartrup-Cook Sie können auch Precompiler-Konstanten auf Modulebene mit '# Const' definieren, z. '#Const DEBUG_MODE = 1'. Auch mein [Rubberduck] (http: // rubberduckvba.com) addin sieht leider keine Konstanten auf Projektebene (sie sind nirgendwo in der verfälschten VBIDE API!), wertet aber "dead code" (aus '# If' Direktiven) als solche korrekt aus und ignoriert sie ... Wenn Sie also Rubberduck verwenden, ist es wahrscheinlich besser, '# Const'-Anweisungen anstelle von Konstanten auf Projektebene zu verwenden. –

Verwandte Themen