2009-07-07 10 views
3

Ich habe 10 XLS, die jeweils ein paar hundert Zeilen von VBA enthalten, die das gleiche tun. Ich möchte diesen gemeinsamen Code in ein 11. XLS verschieben und die anderen 10 den Code im 11. XLS aufrufen lassen. Der allgemeine Code muss Zugriff auf alle Daten und Arbeitsblätter im aufrufenden XLS haben. Diese letzte Anforderung scheint von anderen Antworten auf diese Frage zu SO nicht beantwortet zu werden. Kann ich die Arbeitsblätter des aufrufenden XLS als Parameter oder ähnliches übergeben?Excel VBA - Verwenden Sie Modul in Arbeitsmappe B zum Aktualisieren von Daten in Arbeitsmappe A

Antwort

7

Anstatt dies in eine sekundäre XLS-Datei zu schreiben, würde ich empfehlen, eine XLA-Datei (ein Excel Add In) zu erstellen.

Dies ist das genaue Szenario, für das XLA vorgesehen war. XLA wird in diesem Fall so funktionieren, wie Sie es beabsichtigen.

Weitere Informationen zum Erstellen eines XLA finden Sie unter this page.

3

Ja, können Sie Verweise auf Arbeitsmappen, Arbeitsblätter übergeben, reicht usw. als Parameter für jede Funktion:

Public Sub CallMe(ByVal oWorkbook as Workbook) 

    Dim oWorksheet as Worksheet 
    Set oWorksheet = oWorkbook.Worksheets(1) 

    ' Do stuff... 

End Sub 

Beachten Sie, dass Sie wahrscheinlich eine Menge des Codes neu zu schreiben haben Sie kopieren aus den 10 Arbeitsmappen, da sie voller impliziter Verweise auf "diese" Arbeitsmappe sein werden, wie Worksheets(1) usw. Wie im obigen Beispiel müssen Sie jetzt oWorkbook.Workbooks(1) stattdessen sagen.