Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Workbook-open findet Sub nicht

VBA: Workbook-open findet Sub nicht
06.06.2007 10:30:08
Jürgen

Hallo Leute,
ich habe folgendes Phänomen:
ich habe in 12 Mappen jeweils ein neues Modul erstellt und dort überall die gleiche Privat Sub definiert;
danach habe ich bei DieseArbeitsmappe unter Workbook_open den parameterlosen Routinenaufruf eingefügt.
Das für mich nicht erklärbare Verhalten:
bei der Mappe bei der ich das zuerst gemacht habe funktioniert es,
d.h. die Routine wird aufgerufen.
Bei allen anderen Mappen funktioniert es nicht:
statt des Routinenaufrufes erhalte ich eine Fehlermeldung vom Compiler bei Workbook_open, das die Routine unbekannt sei.
woran liegt das?
Dank an alle die mir antworten,
Grüsse alle die dies lesen
Jürgen

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Workbook-open findet Sub nicht
06.06.2007 10:51:00
Hajo_Zi
Hallo Jürgen,
"ich habe in 12 Mappen jeweils ein neues Modul erstellt und dort überall die gleiche Privat Sub definiert;"
Damit kommt Excel nicht klar. Der Name für eine Prozedur in einem Modul darf nur 1x vorkommen.

AW: VBA: Workbook-open findet Sub nicht
06.06.2007 10:56:21
Jürgen
Hallo,
daran liegt es nicht:
erstens ist es private,
und zweitens habe ich es mit geänderten Namen bereits erfolglos versucht!
Gruss
Jürgen

Anzeige
AW: VBA: Workbook-open findet Sub nicht
06.06.2007 11:03:42
Hajo_Zi
Hallo Jürgen,
dann kann ich nur noch schreiben das ich es ablehne über das Internet auf fremde Rechner zu schauen.
Gruß Hajo

AW: VBA: Workbook-open findet Sub nicht
06.06.2007 11:36:42
c0bRa
Hio...
Genau deshalb gibts nen Fehler... Weils Private ist...
Code aus Microsoft Excel Objekt DieseArbeitsmappe:
Option Explicit
Private Sub Workbook_Open()
    Call test 'Erzeugt Fehler
    Call test2 'Läuft durch
End Sub

Code aus Modul Modul1:
Option Explicit
Private Sub test()
    MsgBox "private"
End Sub
Public Sub test2()
    MsgBox "public"
End Sub

Rückmeldung nicht vergessen...
c0bRa
Perl ist die einzige Sprache, die vor und nach einer RSA-Verschlüsselung gleich aussieht.

Anzeige
AW: VBA: Workbook-open findet Sub nicht
06.06.2007 11:49:00
Jürgen
Hallo c0bRa,
ich habe mehrere verknüpfte Mappen in der diese Routine aufgerufen werden muss.
darf ich sie nur in einer einzigen Mappe als ein einziges Modul und als einzige Public Sub einfügen und kann sie dann aus allen Mappen von Workbook-open aus aufrufen
oder wie muss ich dazu vorgehen?
Gruss
Jürgen

Anzeige
AW: VBA: Workbook-open findet Sub nicht
06.06.2007 12:11:39
c0bRa
Hio...
IMHO muss sie überall dort liegen, wo sie aufgerufen wird.
Oder willst du von Mappe 1 das Sub für Mappe 2 starten?
c0bRa

AW: VBA: Workbook-open findet Sub nicht
06.06.2007 12:57:00
Jürgen
Hallo c0bRa,
ich verstehe das nicht.
mach mir doch bitte mal eine prinzipielle Übersicht für 3 Mappen die einzeln oder zusammen offen sein können,
was mit welchem Namen WAS genau WO stehen muss damit alles funktioniert.
Ich danke dir schon im Voraus.
Gruss
Jürgen

Anzeige
AW: VBA: Workbook-open findet Sub nicht
06.06.2007 14:29:24
c0bRa
Hio...
also von vorn: Willst du nur, dass innerhalb einer Mappe beim Start was ausgeführt wird? Oder was willst du machen?
Rückmeldung nicht vergessen...
c0bRa
Perl ist die einzige Sprache, die vor und nach einer RSA-Verschlüsselung gleich aussieht.

Anzeige
AW: VBA: Workbook-open findet Sub nicht
06.06.2007 14:35:00
Jürgen
Hallo c0bRa,
die Routine soll beim ersten Öffnen jeder Mappe, entweder einzeln oder zusammen,
einmal aufgerufen werden und für alle Fenster jeder Mappe die Fensterteilung fixieren.
Gruss
Jürgen

AW: VBA: Workbook-open findet Sub nicht
06.06.2007 14:44:48
c0bRa
Hio...
Das sollte so funkionieren. Damit Setzt er beim Öffnen die Fixierung der gerade geöffneten und aller offenen auf Spalte A und Zeile 1.
Code aus Microsoft Excel Objekt DieseArbeitsmappe:
Option Explicit
Private Sub Workbook_Open()
    Dim wkb As Workbook
    For Each wkb In Workbooks
        Dim wks As Worksheet
        For Each wks In wkb.Sheets
            wkb.Activate
            wks.Activate
            ActiveWindow.FreezePanes = False
            wks.Range("B3").Select
            ActiveWindow.FreezePanes = True
        Next
    Next
End Sub

Rückmeldung nicht vergessen...
c0bRa
Perl ist die einzige Sprache, die vor und nach einer RSA-Verschlüsselung gleich aussieht.

Anzeige
AW: VBA: Workbook-open findet Sub nicht
06.06.2007 16:51:37
Jürgen
Hallo c0bRa,
eine funktionierende Routine habe ich,
mein Problem ist:
ich bekomme sie nicht ohne die anfänglich geschilderten Probleme in die verschiedenen Mappe ohne das sie mir der Compiler anmeckert.
bitte sage mir was ich in den folgenden prinzipiellen Beispiel falsch gemacht habe:
Mappe 1:
======
Modul1:
---------

Private Sub Fensterfix ()
End Sub


Diese Arbeitsmappe:
-----------------------


Private Sub Workbook-Open:
fensterfix
End Sub


Mappe 2:
======
Modul1:
---------


Private Sub Fensterfix ()
End Sub


Diese Arbeitsmappe:
-----------------------


Private Sub Workbook-Open:
fensterfix
End Sub


Mappe 3:
======
Modul1:
---------


Private Sub Fensterfix ()
End Sub


Diese Arbeitsmappe:
-----------------------


Private Sub Workbook-Open:
fensterfix
End Sub


Mappe 1 funktioniert.
Mappe 2 und 3 bringen den Compilerfehler.
die Routinen in Mappe 2 und 3 mit unterschiedlichen Namen umzubenennen brachte keine Änderung.
wo liegt der Fehler?
Gruss
Jürgen

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

VBA: Fehlerbehebung beim Workbook_Open und Sub-Aufrufen


Schritt-für-Schritt-Anleitung

  1. Modul erstellen: Öffne die Excel-Datei, in der du den Code erstellen möchtest. Gehe zu Entwicklertools > Visual Basic, um den VBA-Editor zu öffnen. Füge ein neues Modul hinzu.

  2. Private Sub definieren: Definiere eine Private Sub in deinem Modul, z.B.:

    Private Sub Fensterfix()
       ' Dein Code hier
    End Sub
  3. Workbook_Open erstellen: Gehe zu DieseArbeitsmappe im VBA-Editor und füge die folgende Routine hinzu:

    Private Sub Workbook_Open()
       Fensterfix
    End Sub
  4. Mehrere Mappen: Wenn du dieselbe Routine in mehreren Mappen benötigst, stelle sicher, dass jede Mappe ihren eigenen Private Sub hat. Beachte dabei, dass die Namen der Subroutinen einzigartig sein müssen, wenn sie in demselben Modul definiert sind.


Häufige Fehler und Lösungen

  • Fehler: "Routine unbekannt" beim Aufruf von Workbook_Open.

    • Lösung: Stelle sicher, dass die Subroutine, die du aufrufst, im richtigen Modul definiert ist und dass der Name der Routine in jeder Mappe unterschiedlich ist, wenn du mehrere Mappen verwendest.
  • Fehler: Compilerfehler durch Private Sub.

    • Lösung: Nutze Public Sub, wenn du die Routine von anderen Modulen oder Mappen aus aufrufen möchtest. Beispiel:
      Public Sub Fensterfix()
      ' Dein Code hier
      End Sub

Alternative Methoden

  • Öffnen von Subroutinen: Wenn du eine Subroutine aus einer anderen Arbeitsmappe aufrufen möchtest, verwende den Befehl Application.Run. Beispiel:

    Application.Run "'Mappe2.xlsm'!Fensterfix"
  • Using vba excel workbooks.open: Um eine andere Arbeitsmappe zu öffnen und eine Routine darin auszuführen, kannst du folgendes verwenden:

    Workbooks.Open Filename:="C:\Pfad\zu\Mappe2.xlsm"
    Application.Run "'Mappe2.xlsm'!Fensterfix"

Praktische Beispiele

Hier ist ein Beispiel, wie du die Fixierung der Fenster für alle offenen Arbeitsmappen durchführen kannst:

Private Sub Workbook_Open()
    Dim wkb As Workbook
    For Each wkb In Workbooks
        Dim wks As Worksheet
        For Each wks In wkb.Sheets
            wkb.Activate
            wks.Activate
            ActiveWindow.FreezePanes = False
            wks.Range("B3").Select
            ActiveWindow.FreezePanes = True
        Next
    Next
End Sub

Tipps für Profis

  • Benennung: Achte darauf, dass du eindeutige Namen für deine Public Sub verwendest, um Konflikte zu vermeiden.
  • Fehlersuche: Verwende Debug.Print oder MsgBox, um den Status deiner Variablen und Routinen während der Ausführung zu überprüfen.
  • Code modularisieren: Halte deinen Code modular, indem du Subroutinen für spezifische Aufgaben erstellst. Dies verbessert die Wartbarkeit und Lesbarkeit.

FAQ: Häufige Fragen

1. Kann ich eine Private Sub in einer anderen Mappe aufrufen? Nein, Private Sub ist nur innerhalb der gleichen Mappe sichtbar. Verwende Public Sub, um sie von anderen Mappen aus aufzurufen.

2. Wie kann ich sicherstellen, dass der Code in allen Mappen funktioniert? Stelle sicher, dass alle Subroutinen in den jeweiligen Mappen korrekt definiert sind und keine Namenskonflikte bestehen. Außerdem sollte die Struktur der Mappen gleich sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige