Zell.Value = "j" oder "J"

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Zell.Value = "j" oder "J"
von: Juergen
Geschrieben am: 24.07.2015 23:36:35

Hallo,
ich versuche folgendes Makro für meine Zwecke zu nutzen.
Das Löschen klappt an und für sich gut, aber ich würde gerne den Löschbefehl bei Zell.Value "j" oder "J" auslösen (also egal, ob der Wert groß oder klein eingegeben wurde). Bislang klappt das nicht. Da gibt es doch bestimmt einen einfachen Code?
Danke vorab!
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Bereich As Range
Dim Zelle As Range
Set Bereich = Worksheets("Eingangsrechnung").Range("A1:H60")

For Each Zelle In Bereich
If Zelle.Value = "j" Then
Zelle.ClearContents
End If
Next

Bild

Betrifft: If LCase(Zelle.Value) = "j" then ...
von: Matthias L
Geschrieben am: 24.07.2015 23:49:29
Hallo

For Each Zelle In Bereich
If LCase(Zelle.Value) = "j" Then
Zelle.ClearContents
End If
Next
Gruß Matthias

Bild

Betrifft: AW: If LCase(Zelle.Value) = "j" then ...
von: Juergen
Geschrieben am: 25.07.2015 00:01:03
Super. Danke Matthias.

Bild

Betrifft: AW: If LCase(Zelle.Value) = "j" then ...
von: Juergen
Geschrieben am: 25.07.2015 00:08:29
Hmm, also beim Testen klappt das nicht. Beim Googeln scheint LCase die Groß- und Kleinschreibung zu ändern. Ich möchte aber die Groß- und Kleinschreibung nicht ändern, ich möchte nur, dass der Buchstabe "j" vom Makro erkannt wird, egal ob klein oder groß geschrieben.
Habe ich LCase falsch verstanden? Wie gesagt, funktioniert hat das nicht bei mir.
Danke, Jürgen

Bild

Betrifft: AW: If LCase(Zelle.Value) = "j" then ...
von: Matthias L
Geschrieben am: 25.07.2015 00:33:40
Hallo
Es wird doch nur abgefragt, ob die Kleinschreibung vom Zellinhalt ein "j" ist
Da wird doch nichts geändert.
LCase("J") ergibt "j"
LCase("j") bleibt "j"
Hier mal ein simples Beispiel:
https://www.herber.de/bbs/user/99064.xlsm
Gruß Matthias

Bild

Betrifft: AW: If LCase(Zelle.Value) = "j" then ...
von: Juergen
Geschrieben am: 25.07.2015 15:30:16
Hallo Matthias,
danke für Deine Hilfe. Habe das Problem in meinem Sinne lösen können (mit Hilfe aus dem Forum)
Jürgen

Bild

Betrifft: Option Compare Text oder LCase()
von: Tino
Geschrieben am: 25.07.2015 10:31:44
Hallo,
wenn Du ganz oben "Option Compare Text" schreibst wird keine Groß u. Kleinschreibung mehr beachtet.
Achtung gilt im gesamten Modul für alle Auswertungen!
Für einzelfälle würde ich mit LCase den Text zuvor in Kleinbuchstaben umzuwandeln.
Beispiel:

Option Explicit
Option Compare Text
Sub Beispiel()
MsgBox "J" = "j"
MsgBox LCase("J") = "j"
End Sub
Gruß Tino

Bild

Betrifft: AW: Option Compare Text oder LCase()
von: Juergen
Geschrieben am: 25.07.2015 13:27:19
Hallo Tino,
ich habe es einfach über das andere Makro drübergeschrieben und siehe da ... das funktioniert. Vielen Dank! Manchmal verstehe ich die VBA Logik einfach nicht ;-)
Vielleicht kannst Du mir noch einen Tipp geben. Diese Makro, welches alle "j" auf den einzelnen Blätter löscht - kann man das Makro auch so schreiben, dass alle einzelnen Zellen mit einem "j" (groß oder klein) in der gesamten Mappe gelöscht werden? Meine Mappe besteht aus ca. 30 Blättern, das ist echt umständlich und ein paar Arbeitsblätter wollen nicht ... da bekomme ich immer "Laufzeitfehler 13 - typenunverträglich".
Schonmal danke vorab!
So sieht der Code jetzt aus (es folgen eben noch 29 "next":
Option Explicit
Option Compare Text

Sub Beispiel()
MsgBox "J" = "j"
MsgBox LCase("J") = "j"
End Sub
Private

Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim Bereich As Range
    Dim Zelle As Range
    Set Bereich = Worksheets("Eingangsrechnung").Range("A1:H60")
    
    For Each Zelle In Bereich
        If Zelle.Value = "j" Then
            Zelle.ClearContents
        End If
    Next

Bild

Betrifft: AW: Option Compare Text oder LCase()
von: Daniel
Geschrieben am: 25.07.2015 13:47:32
mal ne gegenfrage:
so wie du das machst, werden de "j" ja endgülitg gelöscht.
wenn das aber nur fürs Drucken ist, wäre es dann nicht sinnvoller, wenn du die "j" zum Drucken einfach nur ausblendest?
dann wären sie nach dem Drucken wieder da.
ansonsten ginge das Löschen über alle Arbeitsblätter am einfachsten so:

dim ws as Worksheet
for each ws in thisworkbook.Worksheets
ws.range("A1:H60").Replace "j", "", lookat:=xlwhole, matchcase:=false
Next ws

der Blattschutz darf natürlich nicht gesetzt sein, sonst darf das Makro ja die Änderungen auf dem Blatt nicht durchführen, oder das Makro muss dann den Blattschutz aufheben.
Gruss Daniel

Bild

Betrifft: AW: Option Compare Text oder LCase()
von: Juergen
Geschrieben am: 25.07.2015 13:52:29
Hallo Daniel,
nein, das ausblenden würde nicht helfen. Ich lasse über die "j" eine Lösung zu einer Aufgabe einblenden (bedingte Formatierung mit zig Berechnungen). Ich möchte zwar, dass man die Aufgabe ausdrucken kann (zur Bearbeitung), aber die Lösung soll nicht ausgedruckt werden können.
Ich test mal Dein Makro. Danke

Bild

Betrifft: AW: Option Compare Text oder LCase()
von: Juergen
Geschrieben am: 25.07.2015 14:14:33
Puh .. das scheint die Rettung zu sein ;-)
Lieben Dank ... kurz und funktioniert.
Habe noch das Löschen von "L"s eingebaut, siehe unten

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim ws As Worksheet
 For Each ws In ThisWorkbook.Worksheets
 ws.Range("A1:O150").Replace "j", "", lookat:=xlWhole, MatchCase:=False
 Next ws
 For Each ws In ThisWorkbook.Worksheets
 ws.Range("A1:O150").Replace "l", "", lookat:=xlWhole, MatchCase:=False
 Next ws
End Sub
Bei ein paar Arbeitsblätter hat es dennoch nicht funktioniert. Habe dann die Einstellungen bzgl. Blattschutz nochmals angesehen und gemerkt, dass die "j"s und "l"s, die nicht gelöscht wurden bei "Schutz" einen Haken bei "ausgeblendet" hatten. Geschützt waren die Zellen ja eh nicht, da sie Eingabezellen sind, aber dass "ausgeblendet" hier einen Unterschied macht, da muss man auch erst mal drauf kommen.
Lieben Dank nochmal!!!
Damit sind meine Probleme vorerst vom Tisch.
Jürgen

Bild

Betrifft: AW: Option Compare Text oder LCase()
von: Daniel
Geschrieben am: 25.07.2015 14:28:22
Hi
kleiner Tip
pack doch beide aktionen in die selbe Schleife:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim ws As Worksheet
 For Each ws In ThisWorkbook.Worksheets
     ws.Range("A1:O150").Replace "j", "", lookat:=xlWhole, MatchCase:=False
     ws.Range("A1:O150").Replace "l", "", lookat:=xlWhole, MatchCase:=False
 Next ws
End Sub
Gruss Daniel

Bild

Betrifft: AW: Option Compare Text oder LCase()
von: Juergen
Geschrieben am: 25.07.2015 14:30:00
Gute Idee!
Danke, Jürgen
P.S. da habe ich schon etliche Stunden mit verbracht ;-)

Bild

Betrifft: Alterntativlösung
von: Daniel
Geschrieben am: 25.07.2015 13:20:59
Hi
wenn das gezeigte Programmbeispiel auch die tatsächliche Aufgabenstellung ist, dann:

Bereich.replace "j", "", lookat:=xlwhole, matchcase:=false
Gruss Daniel

Bild

Betrifft: AW: Alterntativlösung
von: Juergen
Geschrieben am: 25.07.2015 13:42:12
Hallo Daniel,
ich bin ein echter Anfänger, was VBA angeht. Welchen Bereich muss ich in meinem Makro ersetzen?
Habe ein paar Varianten versucht, aber nichts klappt. Kannst Du den Code in das Makro reinschreiben?

Wie gesagt, Ziel ist, dass alle Zellen, die ein einzelnes "J" (groß oder klein) enthalten gelöscht werden, wenn der Druckbefehlt aufgeführt wird.
Schonmal lieben Dank!
Jürgen

Bild

Betrifft: AW: Alterntativlösung
von: Daniel
Geschrieben am: 25.07.2015 13:56:17
Hi

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Bereich As Range
Set Bereich = Worksheets("Eingangsrechnung").Range("A1:H60")
Bereich.Replace "j", "", lookat:=xlWhole, MatchCase:=False
wobei man natürlich überlegen kann, die Variable Bereich einfach weg zu lassen und das Replace direkt auf den Zellbereich anzuwenden.
Copy/Paste übernehmen können, für dich:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Worksheets("Eingangsrechnung").Range("A1:H60").Replace "j", "", lookat:=xlWhole, MatchCase:=False

Gruss Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zell.Value = "j" oder "J" "