Zwei Makros in einer Zelle

Hallo Leute,

ich habe ein kleines Problem. Also ich habe Excel 2003, und habe ein Makro aufgenommen das bei der Tastenkombination „Streg d“ den Text in einer Zelle durchstreicht.

Dann habe ich ein Makro geschrieben, dass veranlasst, dass wenn ich in meine Arbeitsmappe etwas hineinschreibe, dieser Text blau wird.

Als Drittes habe ich einen Button erstellt, der beim drücken den durchgestrichenen Text löscht und den blauen Text schwarz macht.

Dies funktioniert auch solange ich alles jeweils in eine Zelle mache.

Wenn ich jetzt aber nur einen Teil des Textes markiere und durchstreichen will, funtioniert das Makro nicht mehr.
Wenn ich in eine Zelle, die schon einen schwarzen Text hat hineinschreibe, wird der ganze text blau, anstatt nur der neu hineingeschriebene.
Wenn ich nun einen Teil in einer Zelle durchgestrichen haben möchte und etwas neues hineinschreibe, wird wieder alles blau.
Und der Button funktioniert auch nicht mehr.

Wäre echt toll wenn jemand eine Lösung für mein Problem hätte.

Danke schon im vorraus

Christine

Hallo Christine,

ich habe meine magische Glaskugel grad nicht zur Hand: kannst Du die Frage vielleicht ETWAS präzisieren? Ein, zwei Zeilen Programmcode (für alle 3 Makros zusammen!) wären auch nicht schlecht…

Viele Grüße
Martin

Hallo Martin,

tschuldingung, habs wohl echt ungenau beschrieben

also dass ist der Code für das Durchstreichmakro:

Sub Makro3()

’ Makro3 Makro
’ Makro am 27.08.2007 von Z101827 aufgezeichnet

’ Tastenkombination: Strg+d

With Selection.Font
.Name = „Arial“
.FontStyle = „Standard“
.Size = 10
.Strikethrough = True
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

Dies ist für das Blauschreiben:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Target.Font.ColorIndex = 5
End Sub

Und dieser ist für den Button:

Sub FarbeNormal()
Dim Blatt As Object
Dim Zelle As Range
For Each Blatt In Sheets
For Each Zelle In Blatt.UsedRange
If Zelle.Font.ColorIndex = 5 Then Zelle.Font.ColorIndex = 1
If Zelle.Font.Strikethrough Then Zelle.Clear
Next Zelle
Next Blatt
End Sub

Dies soll jetzt auch für vereinzelte Textabschnitte in einer Zelle funktionieren, und auch beide oberen Makros in einer Zelle.
Ich weiß nicht genau wie ich das jetzt erklären soll aber:

Ich will in einer Zelle ein Wort markieren und dieses anhand Strg d
durchstreichen, dann will ich in der selben Zelle etwas neues hineinschreiben, welches automatisch blau geschrieben wird,
und dann sollte beim drücken des Buttons das durchgestrichene Wort(eventuel auch mehrere Worte oder Abschnitte) gelöscht werden, und der blaue Text zu schwarzem werden.
Ich hoffe die Beschreibung war jetzt besser.

Grüße Christine

Hi Christine,

tschuldingung, habs wohl echt ungenau beschrieben

Ein Gentleman schweigt aber nickt :smile:

Ich will in einer Zelle ein Wort markieren und dieses anhand
Strg d durchstreichen,

Wird nicht gehen, wenn du innerhalb einer Zelle einen Teilstring makrierst kannst du in dem Moment nicht per Button eine Makro starten

dann will ich in der selben Zelle etwas neues
hineinschreiben, welches automatisch blau geschrieben wird,

Geht aus dem gleichen Grund auch nicht, Worksheetchange wird erst nach Beendigung der Eingabe angestossen.

und dann sollte beim drücken des Buttons das durchgestrichene
Wort(eventuel auch mehrere Worte oder Abschnitte) gelöscht
werden, und der blaue Text zu schwarzem werden.
Ich hoffe die Beschreibung war jetzt besser.

Das ist evtl. zu machen wenn die Aufgabe so lautet, im selektierten Zellenbereich in allen zellen die Schriftfarbe auf schwarz/automatisch setzen, die Durchstreichung aller in der Selektion vorkommenden durchgestrichenen Zeichen aufheben.

Ich habe dir was gebastelt, was, wenn du in einer Zelle hinten noch Text anhängst, diesen blau färbt.

Dazu mußt du in Modul1 ganz oben den Eintrag:

Public Merker haben

Diesen setzt du im Worksheet_Open Ereignis oder jetzt mal zum Testen mit:

Sub Anfang()
Merker = „11111111111111111111“
End Sub

Dann im Klassencode von Tabelle1 bzw. des Blattnamens:

Private Sub Worksheet_Change(ByVal Target As Range)
If Len(Target) > Len(Merker) Then
Target.Characters(Start:=Len(Merker) + 1, Length:=Len(Target.Value) - Len(Merker)).Font.ColorIndex = 5
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Merker = Target.Value
End Sub

Gruß
Reinhard

Farben zurücksetzen
Hi Christine,
um die Zellfarben wieder zurückzusetzen:

Sub FarbeNormal()
ActiveSheet.UsedRange.Cells.Font.ColorIndex = 0 '=automatisch
End Sub

Gruß
Reinhard

gesamte Arbeitsmappe
Hallo Reinhard,

danke für deine Hilfe.
Also wenn ich das jetzt im VB in ein Arbeitsblatt schreibe, klappt das für dieses Arbeitsblatt.
Jetzt weiß ich aber nicht genau was du damit meintest mit „ins Worksheet_Open“ setzen meinst,
was muss ich denn jetzt machen?
Bringt dieses Ereigniss dann auch dass es für die ganze Arbeitsmappe gilt?

Danke sehr für deine Hilfe

Christine

Jetzt weiß ich aber nicht genau was du damit meintest mit „ins
Worksheet_Open“ setzen meinst,
was muss ich denn jetzt machen?
Bringt dieses Ereigniss dann auch dass es für die ganze
Arbeitsmappe gilt?

Hi Christine,
nein, dieser „Merker“ der in Modul1 steht, ist zwar der Arbeitsmappe bekannt, hat aber keinen Wert, also meldet sich der Debugger.

Deshalb mußt du „Merker“ bei Start der Arrbeitsmappe, im Ereignis Workbook_Open einen Wert zuweisen.

So meinte ich das.

Unabhängig davon, habe ich meine Codes immer nur nur auf das aktuelle Tabellenblatt bezogen. Willst du z.B. in allen Blättern was ändern muß man das anpassen. Aber dies ergba mir keinen rechten Sinn.

Da du Ereigniscode geschrieben hast dachte ich du kommst da klar, wenn nicht, Doppelklick im Editor aud „Diese Arbeitsmappe“, Einfügen von :

Private Sub Workbook_Open()
Merker = „xxxxxxxxxxxxxxxxxxxxxxxxxxxxx“
End Sub

„Merker“ braucht einen Anfangswert, der länger als jedweder Zelleninhalt ist, was drin steht ist banane.

Gruß
Reinhard

Hi Reinhard,

also irgendwie blick ich´s immer noch nicht.
Hab´s also für jedes Tabellenblatt geschrieben, aber irgendwie hat´s nur auf einem geklappt.
Das war ganz komisch, bei dem einen Tabellenblatt hat´s wunderbar geklappt, so nun hab ich den Code in ein anderes Tabellenblatt geschrieben und dann kommt (wie du schon erwähnt hast)der Debugger
und es wird der Code "If Len(Target) > Len(Merker) Then " als Fehler gezeigt.
Hiiiiiiiiiiiiilfe!

Grüße Christine

also irgendwie blick ich´s immer noch nicht.
Hab´s also für jedes Tabellenblatt geschrieben, aber irgendwie
hat´s nur auf einem geklappt.
Das war ganz komisch, bei dem einen Tabellenblatt hat´s
wunderbar geklappt, so nun hab ich den Code in ein anderes
Tabellenblatt geschrieben und dann kommt (wie du schon erwähnt
hast)der Debugger
und es wird der Code "If Len(Target) > Len(Merker) Then "
als Fehler gezeigt.
Hiiiiiiiiiiiiilfe!

Hi Christine,

Lob: Angabe der Fehlerzeile (vergessen viele)
Tadel: welche Fehlermeldung kam?

Und aus langjähriger Forenerfahrung, Hiiiiiiiiiilfe bringt dir maximal überhaupt nix, im Gegenteil, manche antworten auf Betreffs nicht wo sowas steht. Nur mal so erwähnt.
Klar, Excel treibt einen zur Verzweiflung, schon klar :smile:

Mein Vorschlag ist, du bastelst eine kleine Beispieldatei wo der Fehler kommt, ggfs noch mit Erklärungen innerhalb der Tabelle, und lädst das irgendwo hoch, z.B. http://www.badango.com o.ä.
ud postest hier den Link.

Gruß
Reinhard

Hallo Reinhard,

hier der Link:
http://www.badongo.com/file/4274639

Danke für deine Hilfe

Christine

http://www.badongo.com/file/4274639

Hi Christine,
stelle mal die Anfrage neu, mit Verweis auf diese Beitragsfolge, mit dem o.g. Link, mit Erwähnung der bisherigen Erkenntnisse oder Nichterkenntnisse.
Dieses Mistbadango oder badongo hängt stark beim Downloaden, nix für meine Ungeduld :smile:
Vielleicht woanderst hochladen, sorry, hab da keine Adressen.
Gruß
Reinhard

Hallo Reinhard!
Mein Name ist Anna und Ich übernehme im moment die Arbeit von der Christine.Leider gibt es keine neuen Erkenntnisse die uns weitergeholfen hätten.Das Problem ist immmer noch das gleiche.Leider weiß ich auch keine Adresse für die Beispieldatei.
Sollen wir das vllt per E-Mail machen?
Gruß Anna

Mein Name ist Anna und Ich übernehme im moment die Arbeit von
der Christine.Leider gibt es keine neuen Erkenntnisse die uns
weitergeholfen hätten.Das Problem ist immmer noch das
gleiche.Leider weiß ich auch keine Adresse für die
Beispieldatei.
Sollen wir das vllt per E-Mail machen?

Hi Anna,

ach, es wimmelt davon im Netz:

http://www.google.de/search?q=kostenlos%20dateien%20…

Mal einige ausprobieren und dann die nehmen wo es am unkompliziertesten geht.

badango ist wohl derzeit nicht zu empfehlen, warte jetzt schon >4 min ohne Erfolg.

Gruß
Reinhard

Versuch es mal mit dem Link.Vielleicht klappt es ja damit:
http://www.hostarea.de/server-09/September-fae361352…
vielen dank im Voraus.
LG
Anna

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Versuch es mal mit dem Link.Vielleicht klappt es ja damit:
http://www.hostarea.de/server-09/September-fae361352…
vielen dank im Voraus.

Hi Anna,
das klappte sofort, fragt sich jetzt nur wann ich dazu komme :smile:
Ich würde wie schon gesagt empfehlen eine neue Anfrage einzustellen.
Gruß
Reinhard

Hallo Reinhard,

Ich würde wie schon gesagt empfehlen eine neue Anfrage
einzustellen.

wie es aussieht, kann außer Dir ohnehin Niemand helfen, dann lass den Thread doch hier laufen. Hauptsache, es hilft. :smile:

Gruß, Rainer

Versuch es mal mit dem Link.Vielleicht klappt es ja damit:
http://www.hostarea.de/server-09/September-fae361352…
vielen dank im Voraus.

Okay Anna Christine,

der Link klappte sofort. Nun habe ich die Datei. Es war kein Problem die Fehlermeldung wegzubringen.

Alle Buchstaben im Blatt wieder auf scwarze Farbe zu setzen ist kein Problem.

Jede Eingabe von dir (äh euch) in Blau erscheinen zu lassen, auch keins.

Und wenn ihr an einen bestehenden Zellwert zusätzlich etwas hintendranhängt, dieses dann auch in Blau erscheinen zu lassen, auch kein Akt.

Aber insgesamt gesehen habe ich da etliche Fragen, was soll geschehen wenn die Zelle leer ist und es wird was eingegeben, schwarz, blau?

Man gibt in einer Zelle die „12345“ enthält neu „123“ ein, schwarz, blau?

Von dieser Art Fragen habe ich etliche, auch das anfangs erwähnte sperrren äh durchstreichen, gibt mir Rätsel auf.

Wenn es der Datenschutz erlaubt, was habt ihr vor, vielleicht kann man ganz anders an die Sache rangehen.

Am besten mit einer VB6 Lösung, sicher die beste Lösung *grins*

Gruß
Reinhard

Hallo Reinhard,

Dir geht es ja um etliches leichter von der hand als es uns jemals könnte.Im moment funkiert lediglich die Speicherabfrage.In Punkto Farbe ändert sich nichts.Kannst du mir vielleicht bitte deine Befehle für die Makros schicken so dass ich sie mit unseren vergleichen kann?Vielleicht finde ich so die Fehler.
Der Datenschutz lässt es nicht zu mehr Infos preiszugeben.
Sobald ich den Button fürs abspeichern drücke und dann die Abfrage unter was ich sie speichern will kommt und sie dann speichere,erscheint gleich darauf die zweite abfrage zum Speichern.Ich habe nicht die Möglichkeit etwas in die Zellen zu tippen.Langsam bin ich am verzweifeln.Ich komm im moment übernicht mehr mit der Tabelle zurecht!
Vielen dank fr deine Hilfe!
LG Anna

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Anna,

Der Datenschutz lässt es nicht zu mehr Infos preiszugeben.

Aber klar läßt er das zu. Was ich brauche ist eine KLEINE Beispieldatei mit identischem Aufbau, der Dateiinhalt ist egal.

Ich brauche nicht:

Name Vorname Gehalt Telefon
Mülller Heinz 123.567 0611-4566345

mir reicht:
Name Vorname Gehalt Telefon
abcdefgt hujetr 1234567 123-2345

oder, wenn das auch noch zu intim ist:

 Bez1 Bez2 Nr1 Nr2
abcdefgt hujetr 1234567 123-2345

Sobald ich den Button fürs abspeichern drücke und dann die
Abfrage unter was ich sie speichern will kommt und sie dann
speichere,erscheint gleich darauf die zweite abfrage zum
Speichern.

Dem Button ist folgendes makro unterlegt:
Sub Alle_Zusammen()
Call EigenerName
Call EigenerName
End Sub

Sub EignerName ist das Speichermakro, und wenn es zweimal aufgerufen wird…

Ich habe nicht die Möglichkeit etwas in die Zellen

zu tippen.Langsam bin ich am verzweifeln.

Habe ich korrigiert, kannst wieder eintippen, Verzweiflung ist im Kaufpreis von Officepaketen gratis und mit Sicherheit immer dabei :smile:)

Hochgeladen habe ich sie hier:

http://www.hostarea.de/server-09/September-7d4640992…

Auf Tab1 gibt es jetzt 3 Buttons aus der Symbolleiste „Formular“, „Färben AUS“[Farbmodus], „Speichern“[Speichern] und „Farben zurücksetzen“[FarbeNormal].
(In den []-Klammern stehen die zugehörigen Makros. Die Aufschrift „Färben AUS“ togglet zwischen diesem Text und „Färben EIN“, also wechselt bei/durch jeden Aufruf.)

Prozeduren in DieseArbeitsmappe :

Option Explicit

Private Sub Workbook\_Open()
Dim Blatt As Object, Zeile As Long, Zähler As Integer
Range("B8:smiley:12").ClearContents
Zeile = 8
For Each Blatt In ThisWorkbook.Worksheets
 If Blatt.Name "Zusammenfassung" Then
 Zähler = Zähler + 1
 If Zähler Mod 2 = 1 Then Sheets("Zusammenfassung").Cells(Zeile, 2).Value = Blatt.Name
 If Zähler Mod 2 = 0 Then Sheets("Zusammenfassung").Cells(Zeile, 4).Value = Blatt.Name
 If Zähler Mod 2 = 0 Then Zeile = Zeile + 1
 End If
Next Blatt
Merker = "11111111111111111111"
Farbe = True
Call FarbeSetzen(Farbe)
Range("A1").Select
Set LetzteZelle = Range("A1")
End Sub

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
If Target.Cells.Count 1 Or Farbe = False Then Exit Sub
If Len(Target) > Len(Merker) Then
Target.Characters(Start:=Len(Merker) + 1, Length:=Len(Target.Value) - Len(Merker)).Font.ColorIndex = 5
End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
Merker = Target.Value
Set LetzteZelle = Target
End Sub

Prozeduren in Modul1 :

Option Explicit
Public Merker, Farbe As Boolean, LetzteZelle As Range

Sub FarbeNormal()
ActiveSheet.UsedRange.Cells.Font.ColorIndex = 0 '=automatisch
End Sub

Sub Speichern()
Dim DATCl As Variant
DATCl = Application.GetSaveAsFilename _
(„JJJJ_MM_TT_QB-P_Reporting.XlS“, „Excel-Dateien (*.xls),*.xls“)
'der oben genannte Text gibt an, welcher Name beim speichern genannt wird
If DATCl False Then ActiveWorkbook.SaveAs DATCl
End Sub

Sub Farbmodus()
Farbe = Not Farbe
Call FarbeSetzen(Farbe)
LetzteZelle.Select
End Sub

Sub FarbeSetzen(F As Boolean)
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
 sh.Select 'mir unklar, warum ich da den Umweg über Select gehen muss
 If Left(Selection.Characters.Text, 6) = "Färben" Then
 If Farbe Then
 Selection.Characters.Text = "Färben AUS"
 Else
 Selection.Characters.Text = "Färben EIN"
 End If
 Exit For
 End If
Next sh
End Sub

Gruß
Reinhard

Vielen dank!Jetzt klappts wieder!Nur der Button für „Farbe EIN“ und „Farbe AUS“ funkioniert nicht!Aber ich hoffe,dass ich das selber schaff!zumindest versuche ich es weiterhin,wenn es doch nicht geht werde ich wieder um Hilfe bitten müssen!(SORRY!schonmal im Voraus!)
Also ich habe eine Beispieldatei erstellt.und du findest sie unter

http://www.hostarea.de/server-09/September-1b2d6a49e…

In der Tabelle werden in den nächsten Monaten immer Infos hinzugefügt.Aus diesem Grund der Farbwechsel.Man soll deutlich unterscheiden können zwischen schon vorhandenen Infos und jetzt erst neu hinzugefügten Infos.D.h. jedesmal wenn jemand die Datei öffnet ist alles blau.Alles was blau ist wird nun schwarz.Anschließend werden alle neuen Kommentare in blauer Farbe in die Zelle geschrieben [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]