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

Forumthread: Makro im Modul kann nicht ausgeführt werden

Makro im Modul kann nicht ausgeführt werden
07.02.2007 12:21:54
Mathias
Hallo Leute,
ich hoffe es kann mir wer helfen.
Ich möchte den unten stehenden Code für mehrere Unserforms innerhalb einer Anwendung verwenden.
Ich lasse den Code mittels eines Change-Ereignisses aus der Userform starten. Jedoch wird die Verarbeitung nicht zugelassen, und statt dessen folgende Fehlermeldung ausgegeben:
"Fehler beim Kompilieren" ... " Unzulässige Verwendung des Schlüsselwortes Me"
Der Code steht in einem Modul, welches beim Change-Ereignis der Textbox ausgeführt wird.
Ich dachte mir, dass ich hier Me als eine Art Genaralist verwenden kann, der den Namen des Userform ersetzt.
Kann mir vielleicht einer sagen, wie es besser geht, oder wie ich den Namen einer Userform deklariere?
Grüße
Mathias
Public

Sub Gradtage1()
'   Hiermit werden die Textboxen ohne "1" belegt
Dim WkSh       As Worksheet  ' Zuordnung des Tabellenblattes
Dim lLetzte    As Long       ' letzte belegte Zeile in Spalte A
Dim DatumStrt  As Date       ' das eingegebene Start-Datum aus txtZeitraumBeginn
Dim DatumEnde  As Date       ' das eingegebene  Ende-Datum aus txtZeitraumEnde
Set WkSh = Worksheets("Gradtage") ' <== den Blattnamen ggf. anpassen !!!
lLetzte = IIf(WkSh.Range("A65536") <> "", 65536, WkSh.Range("A65536").End(xlUp).Row)
DatumStrt = CDate(WkSh.Range("A1").Value)          ' das niedrigste Datum speichern
DatumEnde = CDate(WkSh.Range("A" & lLetzte).Value) ' das    höchste Datum speichern
'   die Eingabe in der TextBox1 auf Datum und Einhaltung der Datumsgrenzen prüfen
If Me.ZeitraumBeginn.Value <> "" Then
If IsDate(Me.txtZeitraumBeginn.Value) And _
CDate(Me.txtZeitraumBeginn.Value) >= DatumStrt And CDate(Me.txtZeitraumBeginn.Value) <= DatumEnde Then
Else
MsgBox "Das Beginndatum ist nicht in Ordnung !", _
48, "   Hinweis für " & Application.UserName
With (Me.txtZeitraumBeginn.Value)
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
Exit Sub
End If
End If
'   die Eingabe in der TextBox2 auf Datum und Einhaltung der Datumsgrenzen prüfen
If (Me.txtZeitraumEnde.Value) <> "" Then
If IsDate(Me.txtZeitraumEnde.Value) And _
CDate(Me.txtZeitraumEnde.Value) >= DatumStrt And CDate(Me.txtZeitraumEnde.Value) <= DatumEnde Then
Else
MsgBox "Das Enddatum ist nicht in Ordnung !", _
48, "   Hinweis für " & Application.UserName
With (Me.txtZeitraumEnde.Value)
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
Exit Sub
End If
'   prüfen, ob das Datum der TextBox2 größer/gleich dem Datum TextBox1 ist
If CDate(Me.txtZeitraumEnde.Value) > CDate(Me.txtZeitraumBeginn.Value) Then
Else
MsgBox "Das Beginndatum ist nicht größer" & vbCrLf & _
" als das Datum Enddatum !", _
48, "   Hinweis für " & Application.UserName
Exit Sub
End If
'   über die 

Function wird das Ergebnis der Addition der Werte, die den
'   einzelnen Datumswerten zugeordnet sind, durchgeführt und eingestellt.
Me.txtGradtage.Value = CDbl(DatAdd(CDate(Me.txtZeitraumBeginn.Value), CDate(Me.txtZeitraumEnde.Value)))
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro im Modul kann nicht ausgeführt werden
07.02.2007 12:30:20
Uduuh
Hallo,
Me kannst du nur im Klassenmodul der UF verwenden.
Übergib die aktuelle UF als Objekt an den Code:
Sub Gradtage1(frmTemp as Userform)
und ersetze im Code alle Me durch frmTemp.
Aufruf in den UFs dann mit
Call Gradtage1(Me)
Gruß aus’m Pott
Udo

Anzeige
AW: Makro im Modul kann nicht ausgeführt werden
07.02.2007 14:35:45
Mathias
Ich weiß leider nicht, wie ich die UF als Objekt übergeben soll? Wo muss das denn hin?
AW: Makro im Modul kann nicht ausgeführt werden
07.02.2007 23:09:09
Lars
Hi,
auch bei VBA "bescheiden" wirst du doch Udos Antwort lesen können, oder?
Da steht alles drin, was du wissen musst.
mfg Lars
@Uduuh -OT- wichtig!
08.02.2007 04:30:17
Luc:-?
Morn Udo,
was hältst du davon?
Gruß Luc :-?
Anzeige
AW: @Uduuh -OT- wichtig!
08.02.2007 13:31:46
Uduuh
Hallo,
Hallo Luc,
dumm, das hier zu fragen (nicht du!). Wozu gibt es Suchmaschinen?
Ich schütze Codes und Tabellen mittlerweile nur noch, damit sie nicht durch dumme Fehler zerschossen werden. Weiterhin nehme ich immer das gleiche PW, weil ich selbst schon oft genug Tabellen- und VBA-Passwörter aushebeln musste.
Wie du ja weißt: Die größte Fehlerquelle sitzt meist vor dem Bildschirm.
Gruß aus’m Pott
Udo

Anzeige
OT: Da hast du sicher recht,...
08.02.2007 23:29:30
Luc:-?
...Udo,
hatte bloß das Gefühl, dass der Antworter noch was anderes will... ;-)
Gruß Luc :-?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro im Modul: Fehlerbehebung und Lösungen


Schritt-für-Schritt-Anleitung

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Finde das Modul mit deinem Makro:

    • Suche im Projekt-Explorer auf der linken Seite das Modul, das dein Makro enthält.
  3. Überprüfe den Code:

    • Achte darauf, dass du das Schlüsselwort Me nur im Klassenmodul der Userform verwenden kannst. Wenn du im Standardmodul arbeitest, wird die Fehlermeldung "Das Makro kann nicht ausgeführt werden" angezeigt.
  4. Ändere den Code:

    • Ändere die Funktionsdefinition von Sub Gradtage1() zu Sub Gradtage1(frmTemp As UserForm).
    • Ersetze alle Vorkommen von Me im Code durch frmTemp.
  5. Aufruf des Makros:

    • Rufe das Makro in deiner Userform mit Call Gradtage1(Me) auf.

Häufige Fehler und Lösungen

  • Fehler: "Das Makro kann nicht ausgeführt werden":

    • Ursache: Verwendung von Me im falschen Kontext.
    • Lösung: Stelle sicher, dass Me nur in Userforms verwendet wird. Nutze stattdessen ein Objekt, um auf die Userform zuzugreifen.
  • Fehler: "Fehler beim Kompilieren":

    • Ursache: Syntaxfehler oder falsche Verwendung von Variablen.
    • Lösung: Überprüfe den gesamten Code auf Schreibfehler und Syntaxprobleme.

Alternative Methoden

  • Verwendung von Public Variablen:

    • Anstatt Me zu verwenden, kannst du öffentliche Variablen innerhalb der Userform deklarieren, um auf Werte zuzugreifen.
  • Ereignisprozeduren:

    • Überlege dir, ob du Ereignisprozeduren für verschiedene Steuerelemente nutzen möchtest, um die Logik deines Makros zu strukturieren.

Praktische Beispiele

Hier ist ein Beispiel, wie du den geänderten Code umsetzen kannst:

Sub Gradtage1(frmTemp As UserForm)
    ' Verwendung von frmTemp anstelle von Me
    If frmTemp.txtZeitraumBeginn.Value <> "" Then
        ' Logik hier...
    End If
End Sub

Rufe das Makro in deiner Userform wie folgt auf:

Private Sub txtZeitraumBeginn_Change()
    Call Gradtage1(Me)
End Sub

Tipps für Profis

  • Code-Dokumentation: Dokumentiere deinen Code, um zukünftige Fehlerquellen schnell zu identifizieren.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung mit On Error Resume Next, um die Ausführung bei Fehlern nicht zu stoppen.
  • Testen: Teste deine Makros regelmäßig in verschiedenen Szenarien, um sicherzustellen, dass sie unter allen Bedingungen funktionieren.

FAQ: Häufige Fragen

1. Warum kann das Makro nicht ausgeführt werden? Die Fehlermeldung tritt auf, wenn Me im falschen Kontext verwendet wird. Stelle sicher, dass du im richtigen Modul arbeitest.

2. Wie übergebe ich die Userform als Objekt? Ändere die Sub-Prozedur, um die Userform als Parameter zu akzeptieren, und ersetze Me durch den Parameter.

3. Was kann ich tun, wenn ich weiterhin Fehler bekomme? Überprüfe den Code auf Syntaxfehler und stelle sicher, dass alle Variablen korrekt deklariert sind.

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