Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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?
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

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.
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige