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

code in Modul oder in das arbeitsblatt?

Forumthread: code in Modul oder in das arbeitsblatt?

code in Modul oder in das arbeitsblatt?
02.01.2023 23:00:15
Holger
Hallo zusammen,
ich benötige etwas Nachhilfe bzw Erklärung weil ich es einfach nicht kapiere.
Onur hat meine Beispieldatei 156933.xlsm erfolgreich zu rennen gebracht, Daür nochmal Danke habe viel gelernt!
Dann kahm ich auf die Idee das ich den Button auf einem anderen Tabellenblatt haben wollte. Ging zuerst nicht bis ich den Button neu erstellt habe und dann mit dem Makro auf Page 1 verknüpft habe. Super ich dachte ich wäre fertig. Aber als ich dann den gleichen Code in eine neues Tabellenblatt transformiert habe rennt nix mehr!
Namen der Tabellenblätter habe ich natürlich angepaßt schon klar. Aber im Debug Modus rennt er so durch und ich habe den Eindruck
das die Zeile If Cells(z1, 10) = .Cells(z2, 1) Then Cells(z1, 10).Interior.Color = .Cells(z2, 1).Interior.Color zb mit
If Cells(z1, 10) = .Cells(z2, 1) Then Cells(Worksheets("Page 1").Columns(z1), 10).Interior.Color = .Cells(z2, 1).Interior.Color
versucht zu ersetzen. Also alles Vollqualifiziert.
Also habe ich mehrere Fragen 1. wo muss der Code rein in das Tabellenblatt page 1 oder in ein Modul?
Wen Page 1 warumgeht dann der code der in der Testtabelle einwandfei ging nicht mehr? Tabellenblätternamen und Spalten sind ja gleich! Ich habe lediglich ein weiteres
Tabellenblatt hinzugefügt wo die Buttons mit Erklärungen da sind. Also Page 1 Buttons NamenFarben.
Ich hoffe ich konnte meine Fragen klar erörtern so das ich Hilfe bekommen kann. Das wäre sehr nett!
Vg Holger
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: code in Modul oder in das arbeitsblatt?
02.01.2023 23:10:26
onur
WO ist denn die Datei?
AW: code in Modul oder in das arbeitsblatt?
02.01.2023 23:33:51
onur
Welche ALTE? Soll ich das auch noch suchen?
Anzeige
AW: code in Modul oder in das arbeitsblatt?
02.01.2023 23:18:49
ralf_b
Das liegt daran das der Code im einem Kontext(Mappe, Blatt) läuft.
Darauf beziehen sich dann auch die Notwendigkeiten bei den Bezeichnungen bzw. Objektreferenzen.
Du könntest den Code für einen Button in ein allgemeines Modul und dort in eine Sub oder function auslagern.
Im button_click auf der Tabelle rufst du dann den Code im allgemeinen Modul auf.
Dort sind Makros von allen Blättern aus zugreifbar ohne eine Referenz auf das Blatt davor zu setzen, wenn man das Makro aufrufen möchte.
Leider muß man dann alle Zellreferenzen in diesem Code dann auf die jeweiligen Blätter setzen. Am besten mit Parameterübergabe. Andernfalls wird immer das gerade aktive Blatt als Referenz vom System genutzt.
Anzeige
AW: code in Modul oder in das arbeitsblatt?
02.01.2023 23:37:19
Holger
Hallo Danke für Deine Antwort
aber ab Übergabe von Zellreferenzen hat gerade mein Hirn zugemacht. Hast Du eventuell ein VBA Beispiel?
VG
Holger
AW: code in Modul oder in das arbeitsblatt?
02.01.2023 23:45:12
onur
Du hast nicht nur das Blatt verändert, sondern auch noch geschafft, dass der Button keinerlei Funktion mehr hatte.
AW: code in Modul oder in das arbeitsblatt?
03.01.2023 00:31:49
ralf_b

'makro im Tabellenblattmodul
sub button1_click()
call makroimModul( Worksheets("Tabelle1"))
end sub
'hier im allgemeinen Modul
sub makroimModul(sh as Worksheet)
msgbox sh.name
end sub

Anzeige
AW: code in Modul oder in das arbeitsblatt?
03.01.2023 01:28:09
Yal
Hallo Holger,
wenn Du im Menü "Entwicklertools" den "Entwurfsmodus" einschaltest, dann kannst Du auf der Schaltfläche "CommandButton1" rechtsklicken und "Code anzeigen" auswählen. Es öffnet sich eine komplett leere Prozedure "Private Sub CommandButton1_Click" in einer VBA-Codepane "Tabelle3" (lesbare Blattname "Buttons").
Warum ist es so? Schaltfläche sind Objekte der jeweilige Arbeitblatt. Jede dazugehörende Code ist im Codepane der jeweilige Arbeitsblatt zu finden.
Wenn verschiedene Schaltfläche auf verschiedene Arbeitsblätter dieselbe "Aktion" aufrufen sollen, aber mit jeweils das eigene Arbeitsblatt als Wirkungsbereich, dann wie von Ralf schon vorskizziert, mit Übergabe der Zielblatt als Parameter (ich war so frei es zu übernehmen):

'Makro zum "CommmandButton1" im Tabellenblattmodul von "Tabelle1"
Sub CommandButton1_Click()
Call MakroImModul(Worksheets("Tabelle1"))
'MakroImModul Worksheets("Tabelle1") 'alternative Schreibweise ohne "Call" und ohne Klammer
'MakroImModul Me 'alternative Verweis auf Tabelle1 im Codepane von Tabelle1: Tabelle1 ist hier "ich", also "me"
End Sub
'Makro zum "CommmandButton2" im Tabellenblattmodul von "Tabelle2"
Sub CommandButton1_Click()
MakroImModul Worksheets("Tabelle2")
'MakroImModul Me 'alternative Verweis auf Tabelle2 im Codepane von Tabelle2: Tabelle2 ist hier "ich", also "me"
End Sub
'hier im allgemeinen Modul
Sub MakroImModul(Zielblatt As Worksheet)
Dim Z As Range 'Z wie Zelle
Dim F As Range 'F wie Finden
With Zielblatt
For Each Z In Range(.Range("J10"), .Cells(Rows.Count, "J").End(xlUp))
Set F = Nothing
Set F = Worksheets("NamenFarbe").Columns(1).Find(Z.Value)
If Not F Is Nothing Then Z.Interior.Color = F.Interior.Color
Next
End With
End Sub
VG
Yal
Anzeige
AW: code in Modul oder in das arbeitsblatt?
03.01.2023 08:28:59
Holger
Hallo Yal,
Super das mit dem Modul habe ich hinbekommen und die jeweilige Zelle wird eingefärbt.
Allerdings wollte ich die komplette Zeile mit dem in den Trefferwert einfärben.
Das hab ich noch nicht hinbekommen. Meistens scheitere ich an der Schreibweise.
VG
Holger
AW: code in Modul oder in das arbeitsblatt?
03.01.2023 08:57:23
ralf_b
Z.Interior.Color
Z is nur eine Zelle. die mußt du auf deine Spaltenbreite erweitern.
z.b. z.resize(1,anzahlspalten)
wenn du anzahlspalten nicht kennst, kannst du sie auch ermitteln.
Anzeige
AW: code in Modul oder in das arbeitsblatt?
03.01.2023 11:46:09
Yal
Hallo Holger,
für die komplette Zeile, auf Englisch "entire row", dann so:

If Not F Is Nothing Then Z.EntireRow.Interior.Color = F.Interior.Color
Schau ins Objektkatalog* (Ansicht, Objektkatalog) welchen Eigenschaften und Methoden das Objekt Range zur Verfügung stellt. Alternativ: nach dem "Z." Strg+Leertaste um die Liste über den sog. "IntelliSense" zu sehen.
*: Ich bin dabei unschlüssig, ob Dativ oder Akkusativ verwendet werden soll: muss ich zuerst "ins" Objektkatalog gehen, um dann "im" Objektkatalog etwas zu schauen, oder beinhaltet die Aktion nach etwas zu schauen, die Bewegung "ins" Objektkatalog intus? :-)
VG
Yal
Anzeige
AW: code in Modul oder in das arbeitsblatt?
03.01.2023 12:43:49
Holger
Hallo Yal ,
Super Dankeschön das ist genau das was ich gesucht habe!
Ich finde es immer toll, was man hier, von den Profis lernen kann!
Dankeschön an alle!
VG
Holger
AW: code in Modul oder in das arbeitsblatt?
03.01.2023 09:23:31
Daniel
Hi
Der unterschied zwischen Code im Tabellenblattmodul und Code in einem allgemeinen Modul ist, dass bei Cells, Range, Columns, Rows ohne Tabellenblattangabe davor:
- in einem allgemeinen Modul das aktive Tabellrnblatt verwendet wird
- in einem Tabellenblattmodul das Modul des Tabellenblatts.
Das muss man in der Programmierung berücksichtigen.
In einem allgemeinen Modul kann man so in der Tabelle2 arbeiten:

Sheets("Tabelle2").Select
Cells(1, 1).value = "Hallo Welt"
Steht der Code im. Modul Tabelle1, müsste man das so machen:

Sheets("Tabelle2").Select
ActiveSheet.Cells(1, 1).value = "Hallo Welt"
Oder noch besser

Sheets("Tabelle2").value = "Hallo Welt"
Gruß Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Code im Modul oder im Arbeitsblatt: Die richtige Wahl treffen


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei: Stelle sicher, dass du die Datei im .xlsm-Format verwendest, da Makros benötigt werden.

  2. Entwicklertools aktivieren: Gehe zu "Datei" → "Optionen" → "Menüband anpassen" und aktiviere "Entwicklertools".

  3. Code eingeben:

    • In einem Modul: Gehe zu "Entwicklertools" → "Visual Basic" → "Einfügen" → "Modul". Hier kannst du deinen VBA-Code eingeben.
    • In einem Tabellenblatt: Doppelklicke auf das gewünschte Arbeitsblatt im Projektfenster und füge den Code in das Codefenster ein.
  4. Code testen: Füge Schaltflächen hinzu und verknüpfe sie mit deinen Makros, um die Funktionalität zu überprüfen.

  5. Blattnamen anpassen: Stelle sicher, dass alle Blattnamen korrekt sind, um Fehler beim Auslesen des Excel-Blattnamens zu vermeiden.


Häufige Fehler und Lösungen

  • Fehler: Code läuft nicht: Überprüfe, ob der Code im richtigen Modul (Tabellenblatt oder allgemeines Modul) eingegeben wurde. Der Code im Tabellenblattmodul hat einen anderen Kontext als im allgemeinen Modul.

  • Lösung: Vollqualifizierte Zellreferenzen: Verwende vollständige Verweise, wie Worksheets("Page 1").Cells(z1, 10), um Missverständnisse zu vermeiden.

  • Fehler: Button funktioniert nicht: Stelle sicher, dass der Button mit der richtigen Sub-Prozedur verknüpft ist und dass du im Entwurfsmodus den Code angezeigt hast.


Alternative Methoden

  • Code im allgemeinen Modul: Wenn du möchtest, dass dein Makro von mehreren Blättern aus zugreifbar ist, solltest du es in ein allgemeines Modul verschieben. Beispiel:

    Sub BeispielMakro()
      MsgBox "Das ist ein allgemeines Modul."
    End Sub
  • Verwendung von Parametern: Übergebe den Zielarbeitsblattnamen als Parameter, um den Code flexibler zu gestalten:

    Sub Button_Click()
      Call BeispielMakro(Worksheets("Tabelle1"))
    End Sub

Praktische Beispiele

  1. Farbänderung einer Zelle:

    Sub Farbwechsel()
       If Cells(1, 1).Value = "Test" Then
           Cells(1, 1).Interior.Color = RGB(255, 0, 0) ' Rot
       End If
    End Sub
  2. Komplette Zeile einfärben:

    Sub ZeileEinfärben()
       Dim Z As Range
       Set Z = Worksheets("Tabelle1").Cells(1, 1)
       If Not Z Is Nothing Then
           Z.EntireRow.Interior.Color = RGB(0, 255, 0) ' Grün
       End If
    End Sub

Tipps für Profis

  • Verwende Me: In einem Arbeitsblattmodul kannst du Me verwenden, um auf das aktive Blatt zuzugreifen. Das reduziert Fehler bei Blattnamen.

  • IntelliSense nutzen: Drücke Strg + Leertaste, um eine Liste der Eigenschaften und Methoden anzuzeigen, die du für das Objekt verwenden kannst.

  • Objektkatalog: Nutze den Objektkatalog in VBA, um die verfügbaren Eigenschaften und Methoden schnell zu finden.


FAQ: Häufige Fragen

1. Wo sollte ich meinen Excel-Code eingeben?
Du kannst deinen Code entweder in ein allgemeines Modul oder in das spezifische Modul eines Arbeitsblattes eingeben. Das hängt davon ab, ob der Code nur für ein Blatt oder für mehrere Blätter verwendet werden soll.

2. Wie kann ich den Namen eines Arbeitsblatts auslesen?
Du kannst den Namen eines Arbeitsblattes mit Worksheets("Blattname").Name auslesen. Stelle sicher, dass du den korrekten Blattnamen verwendest.

3. Was sind die Vorteile eines allgemeinen Moduls?
Ein allgemeines Modul ermöglicht den Zugriff auf Makros von jedem Blatt in der Arbeitsmappe, ohne dass eine spezifische Blattreferenz erforderlich ist, was die Wiederverwendbarkeit erhöht.

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