VBA Code je nach Reihe ausführen
Hallo!
Folgendes:
Ich habe einen (ziemlich langen) VBA - Code, der für 35 Zeilen gleich aussieht nur, dass stadt die Reihenbezeichnung halt anders aussieht.
Sprich einmal werden A15, C15, D15 und G15 bearbeitet und ein anderes mal A18, C18, D18 und G18, je nachdem in welcher Reihe eine Änderung stattfindet.
Also: wird B15 verändert --> Änderungen in A15, C15, D15 und G15
wird B18 verändert --> Änderungen in A18, C18, D18 und G18
Also gäbe es eine möglichkeit den selben Code zuverwenden, in dem halt einfach die passenden Reihen eingesetzt werden, durch eine Art "activeRow." oder so!
Ich hoffe, es ist verständlich, was ich meine.
LG mike
Folgendes:
Ich habe einen (ziemlich langen) VBA - Code, der für 35 Zeilen gleich aussieht nur, dass stadt die Reihenbezeichnung halt anders aussieht.
Sprich einmal werden A15, C15, D15 und G15 bearbeitet und ein anderes mal A18, C18, D18 und G18, je nachdem in welcher Reihe eine Änderung stattfindet.
Also: wird B15 verändert --> Änderungen in A15, C15, D15 und G15
wird B18 verändert --> Änderungen in A18, C18, D18 und G18
Also gäbe es eine möglichkeit den selben Code zuverwenden, in dem halt einfach die passenden Reihen eingesetzt werden, durch eine Art "activeRow." oder so!
Ich hoffe, es ist verständlich, was ich meine.
LG mike
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 147874
Url: https://administrator.de/contentid/147874
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
26 Kommentare
Neuester Kommentar
Moin xaumichi,
ich bin nicht ganz sicher, welche neuen Erkenntnisse du nun von den Antwortenden erhoffst...
Die meisten Fünftklässler, ausgenommen diese unnützige Blagen meiner Nachbarin, würden dir sofort erzählen.
"Hey, auch in VBA, was immer das sein mag, gibt es doch bestimmt so was wie 'Function' oder 'Sub' oder 'Procedur' oder 'Method'.
Halt irgendwas, dass sich a) aufrufen lässt b) noch dem Aufruf und Rumrödeln wieder eine Zeile nach dem Aufruf weitermacht c) vielleicht auch noch einen Parameter 'Reihe' akzeptiert und verwursten kann."
Ehrlich, ich verstehe entweder die Frage nicht oder die Erwartungshaltung, die du hast.
Wenn du dir einen "(ziemlich langen) VBA-Code" zusammengeharkt hast, dann musst du bei VBA zwangsläufig schon mal in die Hilfe geschaut haben. Anders kommt niemand auf mehr als 3 Zeilen Code.
Bitte formulier doch mal um, was wir dir jetzt antworten können, das dir neue Aspekte oder Horizonte eröffnet.
Grüße
Biber
ich bin nicht ganz sicher, welche neuen Erkenntnisse du nun von den Antwortenden erhoffst...
Die meisten Fünftklässler, ausgenommen diese unnützige Blagen meiner Nachbarin, würden dir sofort erzählen.
"Hey, auch in VBA, was immer das sein mag, gibt es doch bestimmt so was wie 'Function' oder 'Sub' oder 'Procedur' oder 'Method'.
Halt irgendwas, dass sich a) aufrufen lässt b) noch dem Aufruf und Rumrödeln wieder eine Zeile nach dem Aufruf weitermacht c) vielleicht auch noch einen Parameter 'Reihe' akzeptiert und verwursten kann."
Ehrlich, ich verstehe entweder die Frage nicht oder die Erwartungshaltung, die du hast.
Wenn du dir einen "(ziemlich langen) VBA-Code" zusammengeharkt hast, dann musst du bei VBA zwangsläufig schon mal in die Hilfe geschaut haben. Anders kommt niemand auf mehr als 3 Zeilen Code.
Bitte formulier doch mal um, was wir dir jetzt antworten können, das dir neue Aspekte oder Horizonte eröffnet.
Grüße
Biber
Wenn du dir einen "(ziemlich langen) VBA-Code" zusammengeharkt hast, dann musst du bei VBA
zwangsläufig schon mal in die Hilfe geschaut haben. Anders kommt niemand auf mehr als 3 Zeilen Code.
-->Makro aufzeichnen-->5 Zellen formatieren -->gefühlte 2.000 Zeilen Codezwangsläufig schon mal in die Hilfe geschaut haben. Anders kommt niemand auf mehr als 3 Zeilen Code.
Man braucht die Hilfe höchstens um rauszufinden wie man den Rekorder startet
Bitte formulier doch mal um, was wir dir jetzt antworten können, das dir neue Aspekte oder Horizonte eröffnet.
Schau Dir das Beispiel von vorhin noch mal an: VBA - 2 Change-Ereignisse verknüpfen
Da steckt auch schon die halbe Antwort drin.
Gruß F1
Hallo xaumichi!
Versuch mal anstatt
das
Gruß Dieter
Versuch mal anstatt
Range("ZZ, activeCell.Row").Interior.Color=RGB(255,0,0) |
Cells(ActiveCell.Row, "ZZ").Interior.Color=RGB(255,0,0) |
Gruß Dieter
... oder auch
BTW: Die Adress(bestandteil)e und den ursprünglichen Farbwert der zuletzt eingefärbten Zelle solltest Du (in globalen Variablen) zwischenspeichern - Du wirst ja vermutlich bei einer Änderung der aktiven Zelle die Umfärbung auch wieder rückgängig machen wollen ...
Grüße
bastla
Cells(ActiveCell.Row + 13, ActiveCell.Column).Interior.Color = RGB(255, 0, 0)
Grüße
bastla
Hi,
das war ja die ursprüngliche Frage:
Erstelle eine Prozedur und übergebe als Parameter die zu bearbeitende Range.
gruß F1
das war ja die ursprüngliche Frage:
Also gäbe es eine möglichkeit den selben Code zuverwenden, in dem halt einfach die passenden Reihen eingesetzt werden,
Erstelle eine Prozedur und übergebe als Parameter die zu bearbeitende Range.
Sub test()
Färben Range("A15:G15")
Färben Range("A18:G18")
End Sub
Sub Färben(rng As Range)
rng.Interior.Color = RGB(255, 0, 0)
rng.Font.Size = 18
'usw
End Sub
gruß F1
Hallo bastla!
Gruß Dieter
Zitat von @bastla:
BTW: Die Adress(bestandteil)e und den ursprünglichen Farbwert der zuletzt eingefärbten Zelle solltest Du (in globalen
Variablen) zwischenspeichern - Du wirst ja vermutlich bei einer Änderung der aktiven Zelle die Umfärbung auch wieder
rückgängig machen wollen ...
Das könnte sich als etwas problematisch erweisen, falls z.B. das Worbook geschlossen und wieder geöffnet wird, dann ist die Variable nicht verfügbar/initialisiert, was wiederum zu einem Fehler führt. Insofern würde ich einfach die ganze Spalte oder entsprechenden Range-Bereich vor dem Neusetzen erst zurücksetzen.BTW: Die Adress(bestandteil)e und den ursprünglichen Farbwert der zuletzt eingefärbten Zelle solltest Du (in globalen
Variablen) zwischenspeichern - Du wirst ja vermutlich bei einer Änderung der aktiven Zelle die Umfärbung auch wieder
rückgängig machen wollen ...
Gruß Dieter
Hallo Dieter!
Grüße
bastla
falls z.B. das Worbook geschlossen und wieder geöffnet wird, dann ist die Variable nicht verfügbar/initialisiert
Doch (wenn sie vor dem Code unter "Allgemein / Deklarationen" deklariert wird - sie soll ja global sein); sie hat dann nur den Wert 0, der sich ja abfragen lässt ...Grüße
bastla
Hallo bastla!
Gruß Dieter
Zitat von @bastla:
> falls z.B. das Worbook geschlossen und wieder geöffnet wird, dann ist die Variable nicht verfügbar/initialisiert
Doch (wenn sie vor dem Code unter "Allgemein / Deklarationen" deklariert wird - sie soll ja global sein); sie hat dann
nur den Wert 0, der sich ja abfragen lässt ...
Ich verstehe schon, was Du meinst, aber angenommen die Zelle A18 ist rot und das Workbook wird geschlossen, dann ist die Zelle beim öffnen immer noch rot und die Variable mit Wert 0 entspricht keiner gültigen Zell-Adresse. Oder steh ich jetzt irgendwie auf der Leitung? > falls z.B. das Worbook geschlossen und wieder geöffnet wird, dann ist die Variable nicht verfügbar/initialisiert
Doch (wenn sie vor dem Code unter "Allgemein / Deklarationen" deklariert wird - sie soll ja global sein); sie hat dann
nur den Wert 0, der sich ja abfragen lässt ...
Gruß Dieter
Hallo Dieter!
Damit hast Du dann natürlich Recht - so global, dass sie auch im "
Die Möglichkeit, die eine oder andere ohnehin nur nutzlos herumlungernde Zelle einer sinnvollen Verwendung zuzuführen und dort, flankiert durch ein Zahlenformat ";;;", die Werte zu hinterlegen, würde ich im Fall des Falles vermutlich auch noch erwägen, aber beim Gedanken, in die Registry (Stichwort "
Grüße
bastla
Damit hast Du dann natürlich Recht - so global, dass sie auch im "
Workbook_BeforeClose
"-Ereignis verfügbar wäre, bekomme ich die Variable wohl nicht hin (aber auf einen definierten Standard-Farbwert könnte die eingefärbte Zelle - per "ActiveCell
" und Offsetwert - immer noch gebracht werden) ...Die Möglichkeit, die eine oder andere ohnehin nur nutzlos herumlungernde Zelle einer sinnvollen Verwendung zuzuführen und dort, flankiert durch ein Zahlenformat ";;;", die Werte zu hinterlegen, würde ich im Fall des Falles vermutlich auch noch erwägen, aber beim Gedanken, in die Registry (Stichwort "
SaveSetting
") zu schreiben, wäre dann Schluss mit lustig ... Grüße
bastla
Hallo bastla!
Gruß Dieter
Zitat von @bastla:
Damit hast Du dann natürlich Recht - so global, dass sie auch im "
wäre, bekomme ich die Variable wohl nicht hin...
Doch per Modul-Public-Variable geht das schon, aber wenn der betroffene Bereich eine standardmäßige gleiche Einfärbung hat, ist es doch viel einfacher, diesen Bereich erst zurückzusetzen und dann erst die Active Zeile neu einzufärben...z.B.Damit hast Du dann natürlich Recht - so global, dass sie auch im "
Workbook_BeforeClose
"-Ereignis verfügbarwäre, bekomme ich die Variable wohl nicht hin...
Range("A15:Z35").Interior.ColorIndex = xlNone
ActiveCell.Offset(13, 0).Interior.Color = RGB(255, 0, 0)
Gruß Dieter
Hallo xaumichi!
Wenn z.B. die Zelle A10 die aktive Zelle ist, dann wird mit dieser Codezeile der Bereich A23:H23 eingefärbt.
Gruß Dieter
Wenn z.B. die Zelle A10 die aktive Zelle ist, dann wird mit dieser Codezeile der Bereich A23:H23 eingefärbt.
Range(ActiveCell.Offset(13, 0), ActiveCell.Offset(13, 7)).Interior.Color = RGB(255, 0, 0)
Gruß Dieter
Hallo xaumichi!
Bei mir funktioniert übrigens
Grüße
bastla
nö, bekomm ich auch einen fehler.
Nur für den unwahrscheinlichen Fall, dass dieser Fehler irgendeine Bedeutung haben könnte - wäre es dann ev sinnvoll, den Inhalt der Fehlermeldung hier wiederzugeben?Bei mir funktioniert übrigens
Range(Cells(ActiveCell.Row, "A"), Cells(ActiveCell.Row, "N")).Interior.Color = RGB(255, 0, 0)
bastla
Hallo xaumichi!
Noch ein Tipp: Vermutlich nicht ganz das, was Du erreichen willst, aber vielleicht trotzdem interessant: SmartTools CellSpot 2.0
Grüße
bastla
Noch ein Tipp: Vermutlich nicht ganz das, was Du erreichen willst, aber vielleicht trotzdem interessant: SmartTools CellSpot 2.0
Grüße
bastla
Hallo Mike!
Irgendwie steige ich da nicht so ganz durch?
Also, was willst Du nun mit dieser Tatsache (Maus, XY-Taste) den nun genau anfangen? Nenn mal ein explizites Beispiel!
Gruß Dieter
Irgendwie steige ich da nicht so ganz durch?
Zitat von @xaumichi:
Ich habe jetzt ein bisschen mit dem "Target...." oder dem "ActiveCell.Row".... herumprobiert.
Jetzt gibds da ein großes Problem:
(kurz zur Erklärung: Aufgabe ist es, in einer Reihe 4 Zeiten einzutragen)
Es gibt große Unterschiede ob ich nach dem Eintragen einer Zeit mit:
-) mit der Pfeiltast in die nächste Zelle springe
-) mit Enter bestätige und dann mit der Maus in die nächste Zelle springe
-) ohne bestätigen, gleich mit der Maus in die nächste Zelle gehe
Denn so lautet die Befehlzeile einmal:
einmal
Das Target enthält die Zell-Adresse der Zelle, in der eine Änderung stattgefunden hat, unabhängig davon, ob die Maus, Pfeil- oder Return-Taste betätigt wurde.Ich habe jetzt ein bisschen mit dem "Target...." oder dem "ActiveCell.Row".... herumprobiert.
Jetzt gibds da ein großes Problem:
(kurz zur Erklärung: Aufgabe ist es, in einer Reihe 4 Zeiten einzutragen)
Es gibt große Unterschiede ob ich nach dem Eintragen einer Zeit mit:
-) mit der Pfeiltast in die nächste Zelle springe
-) mit Enter bestätige und dann mit der Maus in die nächste Zelle springe
-) ohne bestätigen, gleich mit der Maus in die nächste Zelle gehe
Denn so lautet die Befehlzeile einmal:
Range(Cells(Target.Row, "A"), Cells(Target.Row, "N")).Interior.Color = RGB(255, 255,
> 255)
einmal
Range(Cells(Target.Row-1, "A"), Cells(Target.Row-1, "N")).Interior.Color = RGB(255, 255,
> 255)
Also, was willst Du nun mit dieser Tatsache (Maus, XY-Taste) den nun genau anfangen? Nenn mal ein explizites Beispiel!
Gruß Dieter