Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBA Code je nach Reihe ausführen

Frage Microsoft Microsoft Office

Mitglied: xaumichi

xaumichi (Level 1) - Jetzt verbinden

28.07.2010, aktualisiert 18.10.2012, 5092 Aufrufe, 26 Kommentare

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
Mitglied: Biber
28.07.2010 um 21:28 Uhr
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
Bitte warten ..
Mitglied: EffEins
28.07.2010, aktualisiert 18.10.2012
Zitat von 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 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.
Der Hinweise nach Sub, Parameter, etc. sollte reichen. ;)

Schau Dir das Beispiel von vorhin noch mal an: http://www.administrator.de/forum/vba-2-change-ereignisse-verkn%c3%bcpf ...
Da steckt auch schon die halbe Antwort drin.

Gruß F1
Bitte warten ..
Mitglied: xaumichi
28.07.2010 um 21:59 Uhr
Hm...naja, dann probier ich's halt mal anders:

Angenommen ich habe folgendendes Makro:

01.
'---------------------------------------------------------------- 
02.
Private Sub Test() 
03.
 
04.
If Range("A2").active (= true?) then                                   '(weiß jetzt nicht genau, ob ich das "=true" brauche) 
05.
Range("A15").Interior.Color = RGB (255,0,0) 
06.
 
07.
 
08.
End sub 
09.
'---------------------------------------------------------------
'nun möchte ich dieses Makro für alle Zeilen von A:ZZ anwenden.
Sprich:

if Range("ZZ2").aktiv then
Range("ZZ15").Interior.Color = RGB (255,0,0)

usw.

Nun meine Frage:
Ist es möglich, dass ich diese "If - Abfrage"
Durch eine Abfrage nach der Aktiven Reihe vereinfache und somit das Makro viel kürzer mache, in dem ich das Range durch eine "activeCell.Row" "erweitere"?

In der Art:
01.
'----------------------------- 
02.
Private Sub Test_neu() 
03.
 
04.
Range("ZZ, activeCell.Row").Interior.Color=RGB(255,0,0) 
05.
 
06.
End Sub 
07.
'-------------------------------
Mein Problem:
Dieser Ausdruck funktioniert so nicht und habe nun schon seit 1h herumprobiert und in Foren gelesen, jedoch nichts passendes gefundn.
Darum erhoffe ich mir eine Hilfe bei der Entwicklung eines Makros, das ca. so funktioniert! =)

LG Mike

[Edit Biber] Codetags gesetzt, falls wir die Zeilennummern mal brauchen sollten beim Antworten. [/Edit]
Bitte warten ..
Mitglied: 76109
28.07.2010 um 22:20 Uhr
Hallo xaumichi!

Versuch mal anstatt
Range("ZZ, activeCell.Row").Interior.Color=RGB(255,0,0)
das
Cells(ActiveCell.Row, "ZZ").Interior.Color=RGB(255,0,0)

Gruß Dieter
Bitte warten ..
Mitglied: bastla
28.07.2010 um 22:35 Uhr
... oder auch
Cells(ActiveCell.Row + 13, ActiveCell.Column).Interior.Color = RGB(255, 0, 0)
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
Bitte warten ..
Mitglied: EffEins
28.07.2010 um 22:55 Uhr
Hi,
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.
01.
Sub test() 
02.
Färben Range("A15:G15") 
03.
Färben Range("A18:G18") 
04.
End Sub 
05.
 
06.
Sub Färben(rng As Range) 
07.
 rng.Interior.Color = RGB(255, 0, 0) 
08.
 rng.Font.Size = 18 
09.
 'usw 
10.
End Sub
gruß F1
Bitte warten ..
Mitglied: 76109
28.07.2010 um 22:58 Uhr
Hallo bastla!

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.

Gruß Dieter
Bitte warten ..
Mitglied: bastla
28.07.2010 um 23:04 Uhr
Hallo Dieter!
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
Bitte warten ..
Mitglied: 76109
28.07.2010 um 23:30 Uhr
Hallo bastla!

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?

Gruß Dieter
Bitte warten ..
Mitglied: bastla
29.07.2010 um 00:00 Uhr
Hallo Dieter!

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
Bitte warten ..
Mitglied: xaumichi
29.07.2010 um 07:53 Uhr
Hallo!

Der Tip von Didi1954 hat super geklappt.
Genau so hab ich mir das vorgestellt.

@bastla: Ich habe eine "Rückfärbe" - Procedure gemacht.

@ EffEins: Hm....wenn ich das richtig verstanden habe, dann wird bei dir eine Reihe nach der Andren eingefärbt, oder? (das wäre nicht ganz das, das ich gebraucht hätte!)

Trotzdem DANKE an alle!

LG Mike
Bitte warten ..
Mitglied: xaumichi
29.07.2010 um 07:59 Uhr
Aber eine Frage hätte ich doch noch:

Der Befehl:
Cells(ActiveCell.Row, "ZZ").Interior.Color=RGB(255,0,0) (funktioniet auch mit Range(ActiveCell.Row, "ZZ").Interior.Color=RGB(255,0,0))

aber ist es möglich durch diese Schreibweise einen Bereich zu definieren, wie es mit einem "gewöhnlichen" Range möglich ist??

LG Mike
Bitte warten ..
Mitglied: 76109
29.07.2010 um 08:10 Uhr
Hallo bastla!

Zitat von 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...
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.
01.
Range("A15:Z35").Interior.ColorIndex = xlNone 
02.
ActiveCell.Offset(13, 0).Interior.Color = RGB(255, 0, 0)
Gruß Dieter
Bitte warten ..
Mitglied: 76109
29.07.2010 um 08:19 Uhr
Hallo xaumichi!

Wenn z.B. die Zelle A10 die aktive Zelle ist, dann wird mit dieser Codezeile der Bereich A23:H23 eingefärbt.
01.
Range(ActiveCell.Offset(13, 0), ActiveCell.Offset(13, 7)).Interior.Color = RGB(255, 0, 0)
Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
29.07.2010 um 09:06 Uhr
Okey, habs durch Probieren auch gerade geschafft! ;)

LG Mike
Bitte warten ..
Mitglied: xaumichi
29.07.2010 um 20:08 Uhr
Hm...irgendwien finde ich die Schreibweise mit "....Offset..." nicht wirklich übersichtlich, das man ja sehr viel herumrechnen muss, oder?

Gäbe es nicht die möglichkeit das Range so zu definieren:

Range((ActiceCell.Row, "A2"), (ActiveCell.Row, "N"))
nur funktioniert dieser Ausdruck leider nicht!

[Edit Biber] Codetags berichtigt. [/Edit]
Bitte warten ..
Mitglied: bastla
29.07.2010 um 20:14 Uhr
Hallo xaumichi!

Und so?
Range(cells(ActiceCell.Row, "A"), cells(ActiveCell.Row, "N"))
Grüße
bastla
Bitte warten ..
Mitglied: xaumichi
29.07.2010 um 20:50 Uhr
Hm...nö, bekomm ich auch einen fehler.



LG
Bitte warten ..
Mitglied: bastla
29.07.2010 um 20:56 Uhr
Hallo xaumichi!
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)
Grüße
bastla
Bitte warten ..
Mitglied: xaumichi
29.07.2010 um 21:49 Uhr
Oh, sry.
Ich sitzt heute schon so lang vor dem Kasten und tüftle herum, dass ich schon ganz weich bin in der Birne. Sry

01.
 Range(Cells(ActiceCell.Row, "A"), Cells(ActiveCell.Row, "N")).Interior.Color = RGB(255, 255, 255)
Laufzeitfehler '424'

Objekt erforderlich
Bitte warten ..
Mitglied: bastla
29.07.2010 um 21:54 Uhr
Hallo xaumichi!

Wenn Du das in "Worksheet_SelectionChange" einsetzen willst, dann eher:
Range(Cells(Target.Row, "A"), Cells(Target.Row, "N")).Interior.Color = RGB(255, 255, 255)
Grüße
bastla
Bitte warten ..
Mitglied: xaumichi
29.07.2010 um 22:09 Uhr
Hm...okey, soweit funktioniert es mal!

Werd ich morgen dann vollständig ausprobieren, thx schon mal!

schönen abend noch!

LG Mike
Bitte warten ..
Mitglied: bastla
29.07.2010 um 22:11 Uhr
Hallo xaumichi!

Noch ein Tipp: Vermutlich nicht ganz das, was Du erreichen willst, aber vielleicht trotzdem interessant: SmartTools CellSpot 2.0

Grüße
bastla
Bitte warten ..
Mitglied: xaumichi
30.07.2010 um 10:30 Uhr
Hallo!

So. neuer Tag, neues Glück!

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:

01.
Range(Cells(Target.Row, "A"), Cells(Target.Row, "N")).Interior.Color = RGB(255, 255, 255)
einmal

01.
Range(Cells(Target.Row-1, "A"), Cells(Target.Row-1, "N")).Interior.Color = RGB(255, 255, 255)
also kann ich diese möglichkeit den selben Code für alle 35 Zeilen zu verwenden, oder?

wie würde es aussehen, wenn ich eine CASE-Abfrage mache, je nach dem in welcher Zelle ich stehe und dann in den Code springe, in dem die fixen Bereiche stehen.
sprich:
01.
Range("A1, A6").Interior.Color = RGB(255, 255, 255)
oder wird das VBA - Programm so zu lange. (wenn eine CASE ca. 400 Zeilen hat!!)

ODER:

beim markieren und Ändern einer Zelle im Bereich B15:B53 wird die Reihe, in der etwas geändert wurde einer Variable zugewiesen und diese Variable wird dann jeweils als "Reihenangabe" zu den Bereichszuweisungen in den Formatierungsbefehln übergeben.



LG Mike
Bitte warten ..
Mitglied: 76109
30.07.2010 um 11:37 Uhr
Hallo Mike!

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:

01.
Range(Cells(Target.Row, "A"), Cells(Target.Row, "N")).Interior.Color = RGB(255, 255, 
02.
> 255)
einmal

01.
Range(Cells(Target.Row-1, "A"), Cells(Target.Row-1, "N")).Interior.Color = RGB(255, 255, 
02.
> 255)
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.

Also, was willst Du nun mit dieser Tatsache (Maus, XY-Taste) den nun genau anfangen? Nenn mal ein explizites Beispiel!

Gruß Dieter
Bitte warten ..
Mitglied: xaumichi
30.07.2010 um 22:50 Uhr
Abend!

Ich weiß nicht warum das so war (vl hatte ich eine Tipfehler oder so), aber wenn ich die Eingabe mit der Enter-Taste bestätigt habe, so wurden die Formatierungen etc. für die Zeile darunter eingetragen, wenn ich jedoch einen Eintrage gemacht habe und dann mit der Pfeiltast eine Zelle weitergesprungen bin, dann haben die Formatierungen usw. super gekplappt.

Naja, auf jeden Fall habe ich die ganzen Befehle für die Bereichszuweisung dann noch mal neu geschrieben und dann hats wunderbar geklappt, so wie ich mir das ganze vorgestellt habe! =)

Also, dein Lösungsweg funktioniert super! :D

THX, LG
Mike
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Microsoft Office
Kreuztabelle Access + VBA Code (7)

Frage von Dr.Cornwallis zum Thema Microsoft Office ...

VB for Applications
Powershell Script aus VBA heraus ausführen (2)

Frage von mcnico1978 zum Thema VB for Applications ...

Datenbanken
gelöst Access Report per Email versenden, hat jemand zufällig einen Code dafür(VBA) (7)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Windows Server
Skript per GPO ausführen - Berechtigungen? (10)

Frage von honeybee zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...