So rufen Sie ein Blatt-spezifisches Makro von einer Excel-Arbeitsmappe in einer anderen auf?

8

Ich versuche, ein Excel-Makro aufzurufen, das sich in einer anderen Arbeitsmappe befindet. Es handelt sich um ein Blatt-spezifisches Makro, aber die Syntax, die von der Microsoft-Dokumentation und den Recherchen im Internet gegeben wird, bietet nur eine Möglichkeit, auf ein Makro nur über die Arbeitsmappe zuzugreifen. Diese Syntax ist:

%Vor%

Was ich tun muss, ist ein Blatt Verweis in dort auch, etwas wie:

%Vor%

Ich habe dies und viele andere Varianten versucht, einschließlich einfacher oder doppelter Anführungszeichen, aber ich bekomme immer die Nachricht, dass das Makro nicht gefunden werden kann.

Bearbeiten: Mit all den Hinweisen und vielen Tests fand ich die Antwort. Sie können auf Sheet-spezifische Subs zugreifen, aber Sie müssen den kanonischen Namen wie 'Sheet1' verwenden, Sie können den tatsächlichen Sheetname nicht verwenden. Anscheinend greifen andere Arbeitsmappen nicht auf diese Informationen zu.

Das obige Format funktioniert also so lange, wie Sie nicht versuchen, den Blattnamen zu verwenden (und Sie müssen den Arbeitsmappen-Namen einfach angeben (indem Sie CHR(39) mit einem der beiden Enden verknüpfen).

    
Lance Roberts 17.02.2010, 17:28
quelle

3 Antworten

11

Ich weiß, dass Sie das herausgefunden haben, wahrscheinlich nach viel Haartrinken und Kaffee, aber ich wollte:

  • Geben Sie weitere Informationen darüber, warum dies
  • ist
  • Bietet Ihnen eine Möglichkeit, die Sie verwenden können Der Name deines Blattes, um was du zu bekommen will.

Zunächst ist der gewünschte Arbeitsblattname nicht identisch mit dem Namen des Codemoduls. In Ihrem VBE sehen Sie also, dass der Name des Codemoduls "Sheet1" ist, aber wenn es eine andere Eigenschaft von Name gibt, die anders ist, zum Beispiel " MySheet1 "(oder es kann auch dasselbe sein).

Um es mit Namen zu erhalten, müssen Sie einige Schleifen machen, Sicherheitseinstellungen ändern usw. Wenn Sie danach suchen (dies funktioniert in kleineren Umgebungen aufgrund des Problems mit der Sicherheitseinstellung), hier Gehen Sie als Beispiel:

  1. Ändern Sie Ihre Sicherheitseinstellungen in Vertrauen Sie dem programmatischen Zugriff auf VBA Projekte. Wechseln Sie in Excel 2007 zu Orb | Excel Optionen | Vertrauenszentrum | Vertrauensstellungseinstellungen | Makro Einstellungen und aktivieren Sie dann "Vertrauen" Zugriff auf das VBA-Projektmodell "
  2. Erstellen Sie eine Arbeitsmappe mit einem Arbeitsblatt. Benenne es um " MySheet1 ". Öffne die VBE (Alt + F11) und in " Tabelle1 (MySheet1) " erstellen Sie eine Untergruppe Routine, nennen Sie es TimesTen und in der Code setzen Sie einfach Debug.Print 10 * 10 . So:

    %Vor%
  3. Speichern Sie die Datei als Makro-aktiviert dokumentieren und nennen Sie es " MacroXSLX.xlsm ". Lass es offen.

  4. Öffnen Sie ein neues Excel-Dokument, navigieren Sie es ist VBE und in einem neuen Makro Irgendwo, erstellen Sie ein Sub namens %Code%. Im Körper dieses Codes, Stellen Sie dies: .

    %Vor%
  5. Drücken Sie F5, um Test und Sie auszuführen sollte in der Immediate 100 sehen Fenster.

Sie können in # 4 sehen, dass ich alle Komponenten (Module, Klassen usw.) durchlaufen habe und nach dem Objekt mit der Eigenschaft test mit dem Wert MySheet1 suche . Sobald ich das habe, kann ich dann den Namen dieser Komponente erhalten, der in diesem Fall Sheet1 ist, und diese verwenden, um meine Zeichenfolge zu erstellen, die das Makro des Sheets in MacroXSLX.xlsm . Der Code kann weiter bereinigt werden, um die For-Anweisung zu beenden, wenn Sie gefunden haben, was Sie wollen, usw.

Wie oben erwähnt, ist der einzige wirkliche Nachteil die Sicherheitseinstellungen, die sicherstellen, dass Sie programmatischen Zugriff auf das VBAProject haben - gut für einen bis zehn Computer, aber es könnte ein Aufwand sein, wenn Sie mehr als das sicherstellen müssen sind immer richtig eingestellt.

    
Todd Main 20.02.2010, 19:48
quelle
1

können Sie Ihr Makro anpassen, um einen Bogennamen als Parameter zu akzeptieren? Wenn Sie es dann in der Arbeitsmappe Ihres Originals aufrufen, können Sie es einfach MyMacro (me.name) nennen. Wenn Sie es dann von Ihrer anderen Arbeitsmappe aus aufrufen, könnten Sie es einfach als application.run ("testworkbook.xls! MyMacro", "sheetname") bezeichnen, wobei "sheetname" Ihr Parameter ist.

Ich bin mir nicht sicher, ob es anders geht.

    
Fink 17.02.2010 17:41
quelle
1

Besitzt das VBA-Projekt einen Passwortschutz? Ist das Sub ein privates Sub? Wenn ja, dann glaube ich nicht, dass das Makro gefunden wird.

    
guitarthrower 17.02.2010 18:10
quelle

Tags und Links