Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehler: "Sub oder Function nicht definiert"

Forumthread: Fehler: "Sub oder Function nicht definiert"

Fehler: "Sub oder Function nicht definiert"
26.03.2015 10:08:44
tobi
Hallo,
ich erhalte immer die Fehlermeldung, dass "Sub oder Function" nicht definiert sei?

Public Sub CmdAbbruch_Click()
Unload frmNoten
End Sub
Public Sub CmdUebernehmen_Click()
Dim Einzelnote(7 To 12) As Variant
Dim Durchschnittsnote As Integer
For i = 7 To 12
Einzelnote(i) = Me.Controls("ComboBox" & i).Value
Next i
MsgBox Fach(0)
'For i = 1 To 6
'        If Me.Controls("ComboBox" & i).Value = Fach(0) Then
'            MsgBox "Klappt"
'        End If
'Next i
Unload frmNoten
End Sub
Public Sub UserForm_Initialize()
Dim i As Integer
Dim n As Integer
Dim Fach() As Variant
Fach = Array("Fach1", "Fach2", "Fach3", "Fach4", "Fach5", "Fach6")
Dim Notenwert() As Variant
Notenwert = Array("1,0", "1,3", "1,7", "2,0", "2,3", "2,7", "3,0")
For i = 1 To 6
For n = 0 To 5
Me.Controls("ComboBox" & i).AddItem Fach(n)
Next n
Next i
For i = 7 To 12
For n = 0 To 6
Me.Controls("ComboBox" & i).AddItem Notenwert(n)
Next n
Next i
End Sub

Das muss doch irgendwie daran liegen, dass ich die Variable bzw. das Array Fach( ) bei "Public Sub UserForm_Initialize()" definiert habe und nun bei "Public Sub CmdUebernehmen_Click()" anzeigen bzw. weiterverarbeiten möchte. Hab doch extra ein public sub erstellt (globale Variable?).
Arbeite mich gerade erst in VBA ein...
Vielen Dank für Eure Hilfe
Grüße

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Public Sub oder Public Variable
26.03.2015 10:22:13
EtoPHG
Hallo Tobi,
Da verstehst du die Anweisung Public komplett miss.
Public Sub... VBA-Hilfe: Optional. Auf die Sub-Prozedur kann von allen anderen Prozeduren in allen Modulen zugegriffen werden. Bei Verwendung in einem Modul (mit einer Option Private-Anweisung) kann auf die Prozedur nur innerhalb des Projekts zugegriffen werden.
Public Variable... VBA-Hilfe: Wird auf Modulebene verwendet, um öffentliche Variablen zu deklarieren und den dafür erforderlichen Speicher zu reservieren.
Eine Variable innerhalb einer Public Subbleibt Private für dieser Sub und wird nicht automatisch zu einer Public Variablen! Eine Variable, die für alle Sub/Function innerhalb eines Moduls gültig sein soll, muss ausserhalb solcher ganz einfach mit DIM deklariert werden!
Option Explicit
Dim Fach() As Variant
Public Sub CmdAbbruch_Click()
...
Vor allem solltest du als Anfänger die Option Explicit Anweisung als erste Codezeile in jedes Modul setzen.
Gruess Hansueli

Anzeige
AW: Public Sub oder Public Variable
26.03.2015 10:38:56
tobi
Hallo Hansueli,
Danke für deine schnelle Nachricht.
1) Ich habe links in der VBA Entwicklungsumgebung in meinem "Strukturbaum" :
Formulare
frmNoten
Module
Modul1
Wieso kann ich
Option Explicit
Dim Fach() As Variant
Fach = Array("Masterarbeit", "Windenergie", "Faserverbund", "Raumfahrtantriebe 1", "Composites", "Wahlfach")
Nicht einfach in Modul1 definieren? Das müsste doch auf Modulebene möglich sein?
Sub FormularAufruf()
Option Explicit
Dim Fach() As Variant
Array("Fach1", "Fach2", "Fach3", "Fach4", "Fach5", "Fach6")
frmNoten.Show
End Sub

2) Und wieso meckert er mir hier wenn ich das alles außerhalb der Subs definiere?
Option Explicit
Dim Fach() As Variant
Array("Fach1", "Fach2", "Fach3", "Fach4", "Fach5", "Fach6")
Public Sub CmdAbbruch_Click()
Unload frmNoten
End Sub
Public Sub CmdUebernehmen_Click()
Dim Einzelnote(7 To 12) As Variant
Dim Durchschnittsnote As Integer
For i = 7 To 12
Einzelnote(i) = Me.Controls("ComboBox" & i).Value
Next i
MsgBox Fach(1)
Unload frmNoten
'Notenausgabe.Show
End Sub

Anzeige
AW: Public Sub oder Public Variable
26.03.2015 10:56:26
EtoPHG
Hallo Tobi,
Benutz doch als Anfänger bitte so oft wie möglich die eingebaute VBA-Hilfe (F1) im VB-Editor.
Warum du das nicht kannst: Weil du in deinen erneuten Beispiel, die geforderte Reihenfolge und Struktur von VBA in keinster Art und Weise einhälts.

'Fehler: Innerhalb einer Prozedur ungültig
Option Explicit
' Deklariert eine Variable für die Sub Formularaufruf, kann also nur innerhalb dieser gebraucht  _
werden!
Dim Fach() As Variant
'Fehler ist keine gültige Anweisung
Array("Fach1", "Fach2", "Fach3", "Fach4", "Fach5", "Fach6")
Die Fehlermeldungen des Compilers sollte man nicht einfach wegklicken, sondern lesen und verstehen!
Den Cursor auf das Keywort (z.B. Option) setzen und F1 -> Hilfe lesen und verstehen!
Besucht einen VBA-Grundkurs, oder kauf ein Buch, oder erkundige dich im Netz über Grundstrukturen von VB.
Gruess Hansueli

Anzeige
AW: Public Sub oder Public Variable
26.03.2015 11:02:17
Rudi
Hallo,
außerhalb einer Prozedur kannst du nur Konstanten belegen.
Das geht aber nicht mit Arrays und Objekten.
Du brauchst also eine Art Initialisierungsroutine oder belegst die Var in einer anderen Prozedur (z.B. UserForm_Initialize). Hier darfst du die Var aber nicht erneut deklarieren.
Gruß
Rudi

Anzeige
AW: Public Sub oder Public Variable
26.03.2015 11:05:48
Nepumuk
Hallo Rudi,
du hast noch die Funktion als "intelligente" Variable vergessen. Die kann nämlich sehr wohl ein Array zurückgeben.
Gruß
Nepumuk

AW: Public Sub oder Public Variable
26.03.2015 11:24:13
Nepumuk
Beispiel:
Option Explicit

Public Function Fach() As Variant
    Fach = Array("Fach1", "Fach2", "Fach3", "Fach4", "Fach5")
End Function

Public Sub Test()
    MsgBox Fach(0)
End Sub

Anzeige
aah, ooh
26.03.2015 12:55:19
Rudi
Hallo,
du bist wirklich ein Fuchs!
Auf die Idee wäre ich nie gekommen.
Gruß
Rudi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Fehlerbehebung: "Sub oder Function nicht definiert" in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Verwendung von Option Explicit: Beginne jedes Modul mit Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden müssen. Dies hilft, Fehler wie "VBA Sub oder Function nicht definiert" zu vermeiden.

    Option Explicit
  2. Globale Variablen definieren: Wenn du Variablen für mehrere Subroutinen verwenden möchtest, definiere sie außerhalb der Subs, aber innerhalb des Moduls. Zum Beispiel:

    Dim Fach() As Variant
  3. Initialisierung von Arrays in einer Sub: Initialisiere dein Array in einer Sub wie UserForm_Initialize() oder einer ähnlichen Initialisierungsroutine.

    Public Sub UserForm_Initialize()
       Fach = Array("Fach1", "Fach2", "Fach3")
    End Sub
  4. Zugriff auf Variablen: Wenn du in einer anderen Sub auf diese Variablen zugreifen möchtest, stelle sicher, dass du sie nicht erneut deklarierst. Beispiel:

    Public Sub CmdUebernehmen_Click()
       MsgBox Fach(0)
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Sub oder Function nicht definiert: Dieser Fehler tritt häufig auf, wenn du versuchst, auf eine Sub oder Funktion zuzugreifen, die nicht deklariert ist. Achte darauf, dass die Namen korrekt geschrieben sind und die Prozeduren im richtigen Modul stehen.

  • Fehler beim Kompilieren: Wenn du beim Kompilieren auf diesen Fehler stößt, kann das an einer nicht deklarierten Variablen oder einem falschen Zugriffsbereich liegen. Verwende Option Explicit, um solche Fehler leichter zu finden.


Alternative Methoden

  • Verwendung von Funktionen: Überlege, ob du eine Funktion anstelle einer Sub verwenden möchtest, wenn du einen Wert zurückgeben musst. Eine Funktion hat den Vorteil, dass sie direkt in Berechnungen verwendet werden kann.

    Public Function GetFach() As Variant
       GetFach = Fach
    End Function
  • Private Subs: Falls eine Sub nur innerhalb eines Moduls benötigt wird, verwende Private Sub, um die Sichtbarkeit einzuschränken und den Code sauberer zu halten.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du ein Array in einem Public Sub verwenden kannst:

Option Explicit
Dim Fach() As Variant

Public Sub UserForm_Initialize()
    Fach = Array("Mathematik", "Physik", "Chemie")
End Sub

Public Sub CmdUebernehmen_Click()
    MsgBox "Das gewählte Fach ist: " & Fach(0)
End Sub

In diesem Beispiel wird das Array Fach initialisiert und kann in anderen Subs verwendet werden.


Tipps für Profis

  • Verwende die VBA-Hilfe: Nutze die integrierte Hilfe (F1) im VBA-Editor, um mehr über die Verwendung von Public Sub und Variablen zu lernen.

  • Strukturierung deines Codes: Halte deinen Code gut strukturiert und dokumentiert. Verwende Kommentare, um die Funktionalität deiner Subs zu erklären.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Probleme zu lösen. Zum Beispiel:

    On Error GoTo Fehlerbehandlung

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Sub und Function in VBA?
Eine Sub führt eine Aktion aus, gibt jedoch keinen Wert zurück, während eine Function einen Wert zurückgeben kann.

2. Warum kann ich Variablen nicht außerhalb von Subs initialisieren?
Außerhalb von Subs kannst du nur Konstanten definieren. Für Arrays oder Objekte benötigst du eine Initialisierungsroutine innerhalb einer Sub.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige