Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender Navigationstipps
Zell.Value = "j" oder "J"
24.07.2015 23:36:35
Juergen
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

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
If LCase(Zelle.Value) = "j" then ...
24.07.2015 23:49:29
Matthias
Hallo
For Each Zelle In Bereich
If LCase(Zelle.Value) = "j" Then
Zelle.ClearContents
End If
Next
Gruß Matthias

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

AW: If LCase(Zelle.Value) = "j" then ...
25.07.2015 00:08:29
Juergen
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

Anzeige
AW: If LCase(Zelle.Value) = "j" then ...
25.07.2015 00:33:40
Matthias
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

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

Option Compare Text oder LCase()
25.07.2015 10:31:44
Tino
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

Anzeige
AW: Option Compare Text oder LCase()
25.07.2015 13:27:19
Juergen
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

Anzeige
AW: Option Compare Text oder LCase()
25.07.2015 13:47:32
Daniel
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

Anzeige
AW: Option Compare Text oder LCase()
25.07.2015 13:52:29
Juergen
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

AW: Option Compare Text oder LCase()
25.07.2015 14:14:33
Juergen
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

Anzeige
AW: Option Compare Text oder LCase()
25.07.2015 14:28:22
Daniel
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

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

Alterntativlösung
25.07.2015 13:20:59
Daniel
Hi
wenn das gezeigte Programmbeispiel auch die tatsächliche Aufgabenstellung ist, dann:
Bereich.replace "j", "", lookat:=xlwhole, matchcase:=false
Gruss Daniel

Anzeige
AW: Alterntativlösung
25.07.2015 13:42:12
Juergen
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

AW: Alterntativlösung
25.07.2015 13:56:17
Daniel
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
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige