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

Forumthread: Code hinter Tabelle oder in Modul - Unterschied

Code hinter Tabelle oder in Modul - Unterschied
16.11.2007 18:11:00
Peter
Guten Abend
Nachfolgenden Code habe ich in der Tabelle "Import". Er wird ausgeführt, wenn ich die Tabelle verlasse und funktioniert.
Wenn ich nun den gleichen Code in einem Modul habe, hat er ein Problem bei "Set Bereich" (anwendungs/objektdefinierter Fehler)
Weshalb?
Danke für ein Hinweis.
Peter

Sub worksheet_deactivate()   'Code in Tabelle funktioniert


Sub ausModul()                      'Code in Modul funktioniert nicht
Application.StatusBar = ""
Dim lngSpa As Long, lngAnf As Long, lngEnd As Long, i As Long, lngSpalte, lZeile As Long, c As  _
Range
Dim Bereich As Range
lngAnf = [iStart].Row
lngSpa = [iStart].Column
lngEnd = Sheets("Import").Cells(65536, lngSpa).End(xlUp).Row
Set Bereich = Worksheets("Import").Range(Cells(lngAnf, [soh].Column), Cells(lngEnd, [soh]. _
Column))
ActiveWorkbook.Names.Add _
Name:="SOLLHABEN", _
RefersTo:=Bereich, Visible:=True
End Sub


Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Code hinter Tabelle !
16.11.2007 18:24:25
Matthias
Hallo.
Code gehört hinter die Tabelle!
Sub Worksheet_Deactivate()
siehe Bild:
Userbild
Userbild

Anzeige
AW: Code hinter Tabelle oder in Modul - Unterschied
16.11.2007 18:53:00
IngGi
Hallo Peter,
wenn sich das Makro nicht im Codemodul des betreffenden Tabellenblattes befindet, musst du das Tabellenblatt nicht nur vor der Range-Anweisung, sondern auch vor den beiden Cells-Anweisungen angeben. Um das Ganze abzukürzen, packst du die Set-Anweisung am Besten in einen With...End With-Block, dann brauchst du vor Range und Cells jeweils nur noch einen Punkt zu setzen:


With Worksheets("Import")
  Set Bereich = .Range(.Cells(lngAnf, [soh].Column), .Cells(lngEnd, [soh].Column))
End With

@Matthias: Hallo Matthias, da hast du natürlich völlig recht! Da in dem Makro von Peter aber auch ein Makrokopf "Sub ausModul()" steht, möchte Peter das Makro vielleicht auch "von Hand" starten und ist sich darüber im Klaren, dass das Makro in einem allgemeinen Modul nicht als Ereignismakro funktioniert. Daher noch meine Erklärung zu dem anderen Problem.
Gruß Ingolf

Anzeige
AW: Code hinter Tabelle oder in Modul - Unterschied
16.11.2007 21:45:41
Peter
Hallo zusammen
Vielen Dank euch beiden. Es ist so wie Ingolf es sagt. Auf der einen Seite muss der Code beim Verlassen des Worksheets "Import" ausgeführt werden und dann gibt es noch eine andere Situation, wo der gleiche Code ausgeführt werden muss.
Die Lösung von Ingolf hat mir für den zweiten Fall gehlolfen. Super.
Darf ich vielleicht doch noch aus "Neugierde" fragen, weshalb der erste Code nicht funktioniert hat. Ich habe dort ja auch das Worksheet "Import" angesprochen. Oder könnte ich beim Code, der im Sub Worksheet Deactivate steht bei der entsprechenden Codezeile auf "Worksheets("Import") verzichten und gleich bei Range anfangen?
Nochmals besten Dank für die Hilfe.
Peter
Set Bereich = Worksheets("Import").Range(Cells(lngAnf, [soh].Column), Cells(lngEnd, [soh]. _
Column))
With Worksheets("Import")
Set Bereich = .Range(.Cells(lngAnf, [soh].Column), .Cells(lngEnd, [soh].Column))
End With

Anzeige
AW: Code hinter Tabelle oder in Modul - Unterschied
17.11.2007 12:34:37
Daniel
Hi
mal keine konkrete Antwort auf dein Problem, aber mal ein paar Grundlagen, aus denem du dir vielleicht deine Problemlösung ableiten kannst.
1. jeder Zellbezug, dh. RANGE oder CELLS benötigt eigentlich seine vollständige Objekt-Bezeichnung, dh:
WorKbook.Sheet.Range oder Workbook.Sheet.Cells
dh. wennd du ein RANGE über 2 CELLS angibst, müssen diese Angaben auch vor den Cells innerhalb der Range gemacht werden.
2. man kann aber Workbook und Sheet weglassen, es genügt RANGE oder CELLS zu schreiben.
Excel ergänzt die fehlenden Angaben durch die DEFAULT-Werte.
3. jetzt die grosse, Frage, was sind die Default-Werte:
- steht der Code im allgemeinen Modul, ist der Default-Wert immer das gerade AKTIVE SHEET, bzw das AKTIVE WORKBOOK.
- steht der Code aber im Modul einer Tabelle/Sheet, so ist der Default-Wert genau das SHEET bzw WORKBOOK, in dem der Code steht. (das gilt dann natürlich für alle event-gesteuerten Makros)
ich hoffe, du kannst daraus deine Schlüsse ziehen.
Gruß, Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Unterschied zwischen Code hinter Tabelle und in Modul


Schritt-für-Schritt-Anleitung

Um den Unterschied zwischen Code hinter einer Tabelle und einem Modul zu verstehen, gehe wie folgt vor:

  1. Code hinter Tabelle einfügen:

    • Öffne das entsprechende Tabellenblatt in Excel.
    • Klicke mit der rechten Maustaste auf den Tab des Blattes und wähle „Code anzeigen“.
    • Füge den gewünschten Excel-Code ein, wie zum Beispiel:
      Sub Worksheet_Deactivate()
       ' Dein Code hier
      End Sub
  2. Code in ein Modul einfügen:

    • Klicke im Menü auf „Entwicklertools“ und dann auf „Visual Basic“.
    • Wähle „Einfügen“ und dann „Modul“.
    • Füge deinen Excel-Code ein:
      Sub ausModul()
       ' Dein Code hier
      End Sub
  3. Testen:

    • Teste den Code, indem du das Blatt verlässt (bei Code hinter der Tabelle) oder das Makro manuell startest (bei Code im Modul).

Häufige Fehler und Lösungen

  • Fehler: Anwendungs-/Objektdefinierter Fehler:

    • Wenn der Code im Modul nicht funktioniert, stelle sicher, dass du die vollständige Referenz in deinem Code verwendest.
    • Beispiel:
      Set Bereich = Worksheets("Import").Range(Worksheets("Import").Cells(lngAnf, [soh].Column), Worksheets("Import").Cells(lngEnd, [soh].Column))
  • Lösung:

    • Verwende einen With...End With-Block, um den Code lesbarer zu machen:
      With Worksheets("Import")
      Set Bereich = .Range(.Cells(lngAnf, [soh].Column), .Cells(lngEnd, [soh].Column))
      End With

Alternative Methoden

  • Excel Code einfügen über das Ribbon:

    • Du kannst den Code auch direkt über das Ribbon einfügen, indem du „Entwicklertools“ und dann „Makros“ wählst.
  • Verwendung von Named Ranges:

    • Um Bereiche zu definieren, kannst du auch benannte Bereiche verwenden, die den Code einfacher und flexibler machen.

Praktische Beispiele

  1. Ereignismakro in Tabelle:

    Sub Worksheet_Deactivate()
       MsgBox "Das Blatt wurde verlassen!"
    End Sub
  2. Modul-Makro:

    Sub ausModul()
       MsgBox "Makro im Modul wurde ausgeführt!"
    End Sub

Beide Codes zeigen unterschiedliche Einsatzmöglichkeiten für den Code in der Tabelle und im Modul.


Tipps für Profis

  • Sauberer Code: Halte deinen Code organisiert. Verwende Kommentare, um zu erklären, was jeder Abschnitt macht.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem Code, um unerwartete Fehler zu vermeiden.
  • Code wiederverwenden: Lagere häufig verwendete Funktionen in ein Modul aus, um den Code in verschiedenen Arbeitsmappen wiederverwenden zu können.

FAQ: Häufige Fragen

1. Warum funktioniert mein Makro nicht, wenn es im Modul ist? Der Standardwert für Range und Cells ist das aktive Blatt, wenn der Code in einem Modul steht. Daher musst du das spezifische Blatt angeben.

2. Kann ich den Code in der Tabelle und im Modul kombinieren? Ja, du kannst in einem Modul allgemeine Funktionen definieren und diese dann in den ereignisgesteuerten Makros innerhalb der Tabellenblätter verwenden.

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