Zellinhalt erst löschen, dann drucken ... FEHLER

Bild

Betrifft: Zellinhalt erst löschen, dann drucken ... FEHLER
von: Juergen
Geschrieben am: 20.07.2015 22:39:15

Hallo,
ich hatte die Anfrage kürzlich schon einmal und eine sehr hilfreiche Antwort erhalten. (Danke Michael)
Jetzt funktioniert das Makro unten, wenn ein großes oder kleines "J" im Arbeitsblatt 1 eingegeben wurde. Wenn ich versuche das auf mehrere Arbeitsblätter auszuweiten, dann klappt das aber nicht mehr. (z.B. Set Bereich = Worksheets("Arbeitsblatt1, Arbeitsblatt2, etc.") Mache ich da etwas falsch? Da dieses Makro ja in "DieseArbeitsmappe" gespeichert wird, bin ich etwas ratlos. Insgesamt hat meine Datei ca. 30 Arbeitsblätter und die zu löschenden "J"s sind immer an anderer Stelle. ... auf ein paar Seiten sind es auch einzelne "L"s, aber das lässt sich ja analog zu den "J"s beheben.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim Bereich As Range
    Dim Zelle As Range
    Set Bereich = Worksheets("Arbeitsblatt1").Range("A1:H60")
    
    For Each Zelle In Bereich
        If Zelle.Value = "j" Then
            Zelle.ClearContents
        End If
    Next
    For Each Zelle In Bereich
        If Zelle.Value = "J" Then
            Zelle.ClearContents
        End If
    Next
End Sub
Schonmal lieben Dank!
Jürgen

Bild

Betrifft: AW: Zellinhalt erst löschen, dann drucken ... FEHLER
von: Sepp
Geschrieben am: 20.07.2015 22:49:58
Hallo Jürgen,
da gibt es mehrere Möglichkeiten.
Z. B.:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Dim Bereich() As Range, rng As Range
  Dim vntItem As Variant
  
  Redim Bereich(1)
  
  Set Bereich(0) = Worksheets("Arbeitsblatt1").Range("A1:H60")
  Set Bereich(1) = Worksheets("Arbeitsblatt2").Range("B1:I50")
  
  For Each vntItem In Bereich
    For Each rng In vntItem
      If LCase(rng) = "j" Then rng = ""
    Next
  Next
  
End Sub


Gruß Sepp


Bild

Betrifft: AW: Zellinhalt erst löschen, dann drucken ... FEHLER
von: Juergen
Geschrieben am: 20.07.2015 23:18:41
Hmm, erstmal danke Sepp.
das funktioniert bei mir aber nicht. Habe die Arbeitsblatt-Namen geändert ... und dann bekomme ich immer "Laufzeitfehler (9)" ... Index außerhalb des Bereichs. Den fett markierten Bereich bekomme ich als Fehler angezeigt. Blattschutz aufheben ändert auch nichts.
Habe ich das falsch umgesetzt? Ich müsste Inhalte in ca. 30 Arbeitsblättern auf diese Art "schützen", dass sie nicht gedruckt werden können. Die Zellen enthalten z.T. Formeln und sind z.T. bedingt formatiert, so dass leichtere Optionen nicht möglich sind.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Dim Bereich() As Range, rng As Range
  Dim vntItem As Variant
  
  ReDim Bereich(1)
  
  Set Bereich(0) = Worksheets("ER_Skonto").Range("A1:E100")
  Set Bereich(1) = Worksheets("AR_Skonto").Range("A1:E105")
  Set Bereich(2) = Worksheets("Abschreibung").Range("A1:E110")
  
  For Each vntItem In Bereich
    For Each rng In vntItem
      If LCase(rng) = "j" Then rng = ""
    Next
  Next
  
End Sub


Bild

Betrifft: vielleicht -> ReDim Bereich(2) owT
von: Matthias L
Geschrieben am: 20.07.2015 23:39:56


Bild

Betrifft: AW: Zellinhalt erst löschen, dann drucken ... FEHLER
von: Sepp
Geschrieben am: 20.07.2015 23:50:02
Hallo Jürgen,

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Dim Bereich() As Range, rng As Range
  Dim vntItem As Variant
  
  Redim Bereich(2)
  
  Set Bereich(0) = Worksheets("ER_Skonto").Range("A1:E100")
  Set Bereich(1) = Worksheets("AR_Skonto").Range("A1:E105")
  Set Bereich(2) = Worksheets("Abschreibung").Range("A1:E110")
  
  For Each vntItem In Bereich
    For Each rng In vntItem
      If LCase(rng) = "j" Then rng = ""
    Next
  Next
  
End Sub


Allerdings frage ich mich, welch verkorksten Tabellenaufbau du wohl hast. Wieso sollen die Blätter, oder zumindest Teile davon nicht gedruckt werden? Was, wenn jemand die Mappe ohne Makros öffnet?
Gruß Sepp


Bild

Betrifft: AW: Zellinhalt erst löschen, dann drucken ... FEHLER
von: Juergen
Geschrieben am: 21.07.2015 14:49:05
Hallo Sepp,
wusste nicht, dass ich hier am Pranger stehe.
Natürlich hat das einen Grund, dass ich diese Funktion brauche und natürlich gibt es aus meiner Sicht keinen anderen, sinnvollen Aufbau in einer Datei.
Die Excel-Datei wird später in eine WIN-Anwendung verpackt. Ein Öffnen ohne Makro (z.B. mit Viewer) kann ich erlauben, oder nicht - darüber brauche ich mich doch wohl nicht rechtfertigen.
Jürgen
... und mit Union funktioniert das auch nicht ... ist m.E. auch nicht die richtige Funktion.
... verbleibe ratlos

Bild

Betrifft: AW: Zellinhalt erst löschen, dann drucken ... FEHLER
von: Sepp
Geschrieben am: 21.07.2015 18:36:10
Hallo Jürgen,
du brauchst dich überhaupt nicht rechtfertigen, ich darf aber auch bei meiner Meinung bleiben, dass der Weg den du gehst, ein wenig holprig ist und ich bin mir ziemlich sicher, das es bessere Wege gibt, um dein(e) Probleme zu lösen.
Was funktioniert den an meinem Vorschlag nicht?

Gruß Sepp


Bild

Betrifft: Dafür gibt es Union und Replace
von: RPP63
Geschrieben am: 21.07.2015 07:35:08
Hallo!

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Union(Worksheets("ER_Skonto").Range("A1:E100"), Worksheets("AR_Skonto").Range("A1:E105"), _
   Worksheets("Abschreibung").Range("A1:E110")).Replace What:="j", Replacement:="", _
   LookAt:=xlWhole, SearchOrder:=xlByColumns, MatchCase:=False
End Sub
Bei MatchCase:=False ist nicht case sensitive.
Gruß Ralf

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zellinhalt erst löschen, dann drucken ... FEHLER"