Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1292to1296
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

Aus 2 Makros eins machen

Aus 2 Makros eins machen
22.01.2013 16:22:23
Christian
Hallo alle zusammen,
ich hänge per Text Datei 2 Makros an, wie ihr seht, wird eines davon per Shortcut Strg+y ausgeführt. Könnt ihr mir bitte helfen, aus den beiden Makros eins zu machen, sodass beides durch einmaliges Drücken von Strg+y ausgeführt wird?
Danke
Christian
https://www.herber.de/bbs/user/83511.txt

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus 2 Makros eins machen
22.01.2013 16:27:49
Rudi
Hallo,
ruf das zweite doch einfach im ersten auf.
Sub Test()
'Code
rot_zaehlen
End Sub
Gruß
Rudi

AW: Aus 2 Makros eins machen
22.01.2013 16:32:03
Christian
Hallo Rudi,
das erste liegt im Modul2, das zweite unter diese Arbeitsmappe, macht das was aus?
Gruß
Christian

AW: oder lösch einfach
22.01.2013 16:34:32
Daniel
die END SUB - Zeile vom oberen und die SUB rot_zaehlen() Zeile vom unteren Makro.
macht aber nur Sinn, wenn du das Makro rot_zählen() immer nur in Verbindung mit dem oberen Makro verwenden willst und nie seperat brauchst.
gruß Daniel

AW: oder lösch einfach
22.01.2013 16:40:30
Christian
an Daniel: Wo muss das ganze denn dann rein unter Diese Arbeitsmappe oder in ein Modul?
Gruß
Christian

Anzeige
AW: oder lösch einfach
22.01.2013 16:48:40
Rudi
Hallo,
in ein Modul.
Normale Makros gehören sowieso nicht in DieseArbeitsmappe.
Gruß
Rudi

AW: oder lösch einfach
22.01.2013 16:54:08
Christian
hab ich jetzt gemacht. Es gibt noch ein problem, das bestand vorher schon, ich habs nur ignoriert aber vielleicht wisst ihr da auch einen Rat, bei geschätzt 4 von 5 Versuchen das ursprüngliche Makro Test auszuführen bekam ich einen Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt.
Wenn ich auf Debuggen klicke, markiert er die Zeile objRange.Select
Beim 5. von 5 Versuchen klappt alles einwandfrei auch beide Makros zusammen.
Gruß
Christian
und schonmal danke für die Hilfe

Anzeige
Keine Lust ...
22.01.2013 18:31:11
Rudi
Hallo,
das nachzubauen.
Lad die Mappe hoch.
Gruß
Rudi

AW: Keine Lust ...
22.01.2013 19:07:21
Christian
Hallo Rudi,
in der Originalmappe stehen 2000 Zellen mit vertraulichen Daten, kann ich schlecht hochladen-
Habe aber einfach selbst eine zusammengezimmert. Das Problem ist dasselbe, das Makro soll eine zufällige, nicht rot geschriebene und nicht leere Zelle im Bereich E:Z der aktiven Tabelle auswählen. Führ es einfach ein paarmal aus und schau selbst, wie oft eine Zelle ausgewählt wird und wie oft der Laufzeitfehler 91 kommt.
Das mit der Tastenkombination hab ich jetzt weggelassen, das Problem bestand schon, bevor ich die Kombination eingefügt hatte.
Gruß
Christian
https://www.herber.de/bbs/user/83514.xlsm

Anzeige
AW: Keine Lust ...
22.01.2013 20:00:03
Daniel
HI
in deinem Code wählst du per Zufallsgenerator aus, ob du Zellen mit blauer oder schwarzer Schrift suchst.
.Font.Color = IIf(Rnd 

da aber in deiner Beispieldatei keine Zellen mit Inhalt und blauer Schrift vorhanden sind, kann die Suchfuntkion in diesem Fall nichts finden.
Die Suchfunktion findet nur was, wenn der Zufall die Farbe Schwarz auswählt. (also in etwa der hälfte der Fälle)
den Fehlerabbruch kann man so vermeiden:
    Set objRange = Range(Cells(1, 5), Cells(Rows.Count, 26)).Find( _
What:="*", After:=Cells(lngRow, lngColumn), LookIn:=xlValues, _
LookAt:=xlPart, SearchFormat:=True)
if objRange is Nothin Then
Msgbox "keine passende Zelle gefunden."
else
objRange.Select
end if

gruß Daniel

Anzeige
AW: Keine Lust ...
22.01.2013 20:06:28
Christian
Hallo Daniel,
dann hatte ich wohl vergessen am Schluss nochmal zu speichern, es sollten auch blaue Zellen in der Datei sein. Aber Tatsache ist, dass diese vorkommen können aber weniger als 1% wenn ich sie dann mal rot gemacht hab noch weniger. Also das Makro sollte auch funktionieren, wenn keine blauen Zellen da sind, daher hab ich geschrieben eine beliebige weder rote noch leere Zelle.
Aber ich probier dann mal deinen Vorschlag aus.
Gruß
Christian

AW: Keine Lust ...
22.01.2013 20:10:29
Christian
also irgendwie hast du mich jetzt zwar auf die Idee gebracht, wo der Fehler liegt, aber dann ist schon der ganze Algorhitmus falsch. Die Idee war eben dass eine Zelle ausgewählt wird, die weder rot noch leer ist, egal ob sie dann nun blau oder schwarz ist und es erst zu einem Abbruch kommt, wenn nur noch leere oder rote Zellen da sind. Wenn ich deinen Code richtig verstehe ersetzt er ja nur den Laufzeitfehler 91 durch die Messagebox.

Anzeige
AW: Keine Lust ...
22.01.2013 20:24:33
Christian
hab jetzt mal die letzte Zeile durch den Code von dir ersetzt, jetzt bekomme ich )in der Originaldatei mit den zusammengewürfelten Makros von Anfang des Threads) den Laufzeitfehler 424, kein Objekt gefunden.

AW: Keine Lust ...
22.01.2013 20:34:06
Daniel
Hi
das Grundproblem ist, daß du nur ein bestimmtes Format suchen kannst.
du kannst nach rot, blau oder schwarz suchen, aber nicht nach "nicht rot"
diese komplexe suche geht nur mit Texten oder Zahlen.
deswegen vielleicht dieser Workaround:
1. kopiere diese Funktion in ein allgemeines Modul:
die Funktion prüft, ob eine Zelle die schriftfarbe rot hat, mit folgenden Ergebnissen:
Zelle leer: 0
Zelle befüllt, schriftfarbe rot: 2
Zelle befüllt, andere Schriftfarbe: 1
Function IstRot(Zelle As Range) As Long
If Zelle.Value  "" Then
If Zelle.Font.Color = vbRed Then
IstRot = 2
Else
IstRot = 1
End If
Else
IstRot = 0
End If
End Function
2. lege ein zweites Tabellenblatt an.
3. schreibe in dieses Tabellenblatt die Formel: =IstRot(Tabelle1!A1) und kopiere sie soweit, wie du im ersten Tabellenblatt Daten hast.
das geht mit diesem Code:
Sheets("Tabelle2").Range(Sheets("Tabelle1").Usedrange.address).FormulaR1C1 = "=IstRot(Tabelle1!RC)"
wenn du jetzt nach einer nichtroten Zelle suchst, suchst du einfach in Tabelle2 nach 1, wenn du nach einer roten Zelle sucht, suchst du nach 2.
die gefundene Zelladdresse wendest du dann auf erste Tabellenblatt an:
dim rng as Range
set rng = Sheets("Tabelle2").Cells.Find(what:=1, lookat:=xlwhole)
Application.Goto Sheets("Tabelle1").Range(rng.address)

Gruß Daniel

Anzeige
AW: Keine Lust ...
22.01.2013 20:43:36
Christian
bevor es jetzt wahnsinnig kompliziert wird, ich denke ein Algorithmus, der zuerst alle blauen Zellen schwarz macht, und dann eine zufällige schwarze auswählt tut es auch. Es muss nur gewähleistet sein, dass die roten rot bleiben.
Wäre denn noch eine Messagebox denkbar mit ner entsprechenden Aussage, wenn keine schwarzen Zellen mehr da sind?
Mit der Zeit und der weiteren Bearbeitung der Tabelle werden im Endeffekt alle nicht leeren Zellen rot werden, die Einfärbung passiert jedoch händig

AW: Keine Lust ...
22.01.2013 20:50:11
Daniel
Hi
kann man sicherich alles machen.
Excel ist aber nicth so sonderlich gut für das Arbeiten mit Formaten ausgelegt, Zahlen und Texte liegen ihm da wesentlich besser.
Gruß Daniel

Anzeige
AW: Keine Lust ...
22.01.2013 20:52:03
Christian
ich hatte jetzt den Vorschlag gemacht, weil es sicherlich wenig komplizierter ist, als bei 30 Tabellenblättern für jedes so Hilfsblätter zu machen, jeweils korrekte Zuordnungen zu machen

AW: Keine Lust ...
22.01.2013 21:25:12
Daniel
tut mir leid, daß ich nicht hellsehen kann.
kannst ja für jedes Tabellenblatt das gleiche Hilfstabellenblatt verwenden und dann beim Schreiben der Formel den Tabellenblattnamen entsprechend abändern.
Du musst sowieso immer immer mit Makro arbeiten, auch bei der Formel, weil es keinen Sinn macht, die Formeln stehen zu lassen, da Excel bei Formatänderungen die Formeln nicht neu berechnet, daher müssen sie immer wieder neu geschrieben werden.
alternativ geht das selektieren einer nichtroten Zelle auch so:
Sub test()
Dim Bereich1 As Range
Dim Bereich2 As Range
Dim Zelle As Range
Dim StopWert As Long
Dim Zähler As Long
'--- nichtrote Zellen ermitteln
Set Bereich1 = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, 3)
For Each Zelle In Bereich1
If Zelle.Font.Color  vbRed Then
If Bereich2 Is Nothing Then
Set Bereich2 = Zelle
Else
Set Bereich2 = Union(Bereich2, Zelle)
End If
End If
Next
'--- aus nichtroten Zellen eine zufällig auswählen
If Bereich2 Is Nothing Then
MsgBox "alles rot"
Else
StopWert = WorksheetFunction.RandBetween(1, Bereich2.Cells.Count)
For Each Zelle In Bereich2
Zähler = Zähler + 1
If Zähler >= StopWert Then Exit For
Next
End If
Zelle.Select
End Sub

Gruß Daniel

Anzeige
AW: Keine Lust ...
22.01.2013 21:09:17
Christian
Hallo Daniel,
so habe jetzt eine Lösung gefunden, du brauchst dir keine weitere Gedanken zu machen, habe mich damit beschäftigt, wie die unterschiedlichen Farben zustande kommen.
Die schwarzen und die blauen Unterschiede liegen in der Datenquelle, rot werden die Zellen erst wenn ich die Datensätze bearbeite.
Das heißt ich kann wenn ich die Datensätze beisammen hab, noch bevor eine Zelle rot wird, die Farbe komplett auf schwarz setzen.
Und wenn es nur rote und schwarze Zellen gibt, kann ich die Zeile die die Farbe zufällig auswählt durch .Font.Color = vbBlack
ersetzen und damit läufts.
Aber ohne deinen Rat dass es überhaupt an dieser Zeile liegt wäre ich komplett verzweifelt. Vielen Dank.
Christian
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige