Office: Druckverbot, wenn Zelle einen bestimmten Inhalt haben.

Helfe beim Thema Druckverbot, wenn Zelle einen bestimmten Inhalt haben. in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Moin Helmut, Deine globale Abneigung gegen Globale ist bekannt, wenn auch in der Umgebung nur einer Arbeitsmappe/einem Blatt unbegründet. Deine... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Mirisla, 27. August 2023.

  1. d'r Bastler
    d'r Bastler Erfahrener User

    Druckverbot, wenn Zelle einen bestimmten Inhalt haben.


    Moin Helmut,
    Deine globale Abneigung gegen Globale ist bekannt, wenn auch in der Umgebung nur einer Arbeitsmappe/einem Blatt unbegründet. Deine Vorschlag, sie mit einer Function zu umgehen ist aber ein guter.

    "Sollte kein Exit" ? Leider fehlt auch hier, wie bei den Globalen jegliche Begründung. Ich wäre neugierig.

    Die Diskussion um die Zeilenzähler-Deklaration bin ich inzwischen leid. In Foren wie diesem werden sich kaum Nutzer finden, die mit Tabellen jenseits der 32.000 Zeilen hantieren. Ich tu's auf jeden Fall mal nicht. Und falls doch, ist schnell umdeklariert.

    Dein Einzeiler in allen Ehren - großes Lob. Allerdings berücksichtigt er nur die Spalte H und nicht wie von Mirisla angefragt noch drei weitere. In meinem Code (s. #15) habe ich das mit Select Case gelöst. Vielleicht magst Du das ja noch nachreichen.

    Ansonsten: Danke für die konstruktive Kritik!

    Schöne Grüße
     
    d'r Bastler, 5. September 2023
    #16
  2. HKindler
    HKindler Erfahrener User
    Hi Bastler,

    Warum globale Variablen vermeiden? Google einfach mal danach. Ist mir jetzt zu viel, das ausführlich darzustellen. Aber Sie sind einfach nur unübersichtlich und man kann sie sehr leicht "aus Versehen" ändern.

    Warum kein Exit? Aus dem selben Grund, wie bei den globalen Variablen: Es ist schlechter Programmierstil. Nein im Ernst: allen schon in den Excelforen findest du immer wieder Fragen wie "Wieso kann ich meine beiden Change-Events nicht kombinieren? Es wird immer nur der erste Bereich berücksichtigt". Der Code sieht dann so aus:
    Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        If Target = "" Then Exit Sub
        Target.Offset(1) = 2 * Target
    End If
    If Target.Address = "$B$1" Then
        If Target = "" Then Exit Sub
        Target.Offset(1) = Target / 2
    End If
    End Sub
    Verstehst du jetzt, wieso man Exit vermeiden sollte? Es passiert viel zu leicht, dass man das übersieht.

    Zeilenzähler als Integer: Wenn du die Diskussion leid bist, dann nimm doch Long. Nenne mir einen einzigen Grund, weshalb du meinst Integer verwenden zu müssen.

    Mein Einzeiler macht genau das, was deine hier gezeigte Routine macht. Wenn du in deinem Forum eine andere Routine zeigst, dann ist das deine Sache, ich bin nicht verpflichtet deinem Link zu folgen, vor allem da ich meine Routine zeitlich vor deinem Link gepostet habe. Aber damit du zufrieden bist:
    Code:
    Cancel = Application.(WorksheetFunction.CountIf(Tabelle1.Columns("H"), "T") + WorksheetFunction.CountIf(Tabelle1.Range("I1:I10"), "T")) <> 0
    Den Rest überlasse ich dir zur Übung.
     
  3. d'r Bastler
    d'r Bastler Erfahrener User
    Moin Helmut,

    danke Dir recht üppig. Deine Exit-Beispiele sind natürlich so dusslig, dass sie noch nicht einmal mir noch passieren würden Druckverbot, wenn Zelle einen bestimmten Inhalt haben. :rolleyes:

    Und was das versehentliche Ändern von Globalen betrifft, hatte ich ja schon bestätigt, dass das in größeren Projekten durchaus zu Ärger führen kann. In diesem kleinen aber wohl kaum. Ob an dieser Stelle Global oder Funktion, ist letztlich reine Geschmackssache bzw. von der Art des Projektes abhängig.

    Meine integer sind alte Gewohnheit und werden es, so nicht wirklich long benötigt wird, auch bleiben.

    Dass Dein Einzeiler genau das Gleiche macht wie meine Routine, stimmt nicht ganz. Ich habe dort nämlich auch schon die anderen Spalten berücksichtigt. Dein Übungsvorschlag (dem zu folgen ich mich hüten werde) ist leider genau das, was ich versuche durch eleganteren Code zu vermeiden: Ewig lange Verkettungen von Bedingungen ... unübersichtlich und Fehler-anfällig

    Wie Du auf die Idee kommst, ich würde Dich zu etwas "verpflichten" wollen, verstehe ich nicht. Ich glaube, weicher als mit "vielleicht magst Du" kann man Vorschläge, die letztlich dem Fragesteller dienen, nicht formulieren.

    Vielleicht magst Du Dir meinen überarbeiteten Code hier doch mal anschauen, um nachvollziehen zu können, wohin meine Reise geht - natürlich ganz ohne Verpflichtung.

    Schöne Grüße
     
    d'r Bastler, 5. September 2023
    #18
  4. d'r Bastler
    d'r Bastler Erfahrener User

    Druckverbot, wenn Zelle einen bestimmten Inhalt haben.

    d'r Bastler, 5. September 2023
    #19
  5. HKindler
    HKindler Erfahrener User
    Hi Bastler,

    Und genau deshalb sollte man so etwas keinem Hilfesuchenden empfehlen. Ein Profi merkt so etwas schnell, ein Anfänger eher nicht. Und dennoch - oder besser gesagt genau deshalb - wird ein Profi so etwas vermeiden. Eben genau weil man es schnell übersieht.

    Auch hier gilt wieder das selbe: wehret den Anfängen. Hier mag das überschaubar sein. Für einen geübten Programmierer sowieso. Für einen Laien eher nicht. Daher nochmals: wenn man problemlos auf globale Variablen verzichten kann, wieso sollte man sie verwenden?

    Und hier wieder: keine schlechten Angewohnheiten weiter geben! Integer funktionieren nur zufällig. Es gibt heute keine einzige Berechtigung mehr für diesen Variablentyp (genausowenig für Byte). Früher, zu Zeiten von C64 und anderen 8- oder 16-Bit-Rechnern hatten sie noch ihre Berechtigung, da sie weniger Speicherplatz und CPU-Kapazität brauchten. Aber heute werden sie doch so oder so bei jeder Verwendung in 64-Bit-Werte verwandelt, da alle modernen CPUs intern damit arbeiten.
    Was du bei dir machst ist vollständig dein Bier. Und wenn du für einen Zeilenzähler Integer (oder sogar Byte) verwendest, weil du nur wenige Zeilen erwartest (wie war das mit Bill Gates: «When we set the upper limit of PC-DOS at 640K, we thought nobody would ever need that much memory.»), dann mach das. Aber bitte bitte bitte, gib dies nicht als Tipp an andere weiter. Excel hat 1.048.576 Zeilen. Somit ist Integer als Zeilenzähler ungeeignet.

    Wenn es mehrere Spalten sind, ist CountIf wirklich nicht mehr sonderlich gut geeignet. Alternative:
    Code:
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim a As Range
    With Tabelle1
        Set a = .Range("G:I,Q:Q")
        Set a = Intersect(a, .UsedRange)
        If Not a Is Nothing Then
            If Evaluate("=SUM(--(VSTACK(" & a.Address & ")=""T""))") > 0 Then
                MsgBox "Drucken is' nicht"
                Cancel = True
            End If
        End If
    End With
    End Sub
    Oder wenn es unbedingt eine Schleife sein soll:
    Code:
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim a As Range
    Dim b As Range
    With Tabelle1
        Set a = .Range("G:I,Q:Q")
        Set a = Intersect(a, .UsedRange)
        If Not a Is Nothing Then
            For Each b In a.Cells
                If UCase(b) = "T" Then
                    MsgBox "Drucken is' nicht"
                    Cancel = True
                    Exit For
                End If
            Next b
        End If
    End With
    End Sub
    Dazu möchte ich nur anmerken: "In all den ganzen 40 Jahren, in denen ich jetzt Auto fahre, hatte ich noch nie einen größeren Unfall. Wieso sollte ich den Gurt anlegen?" Sorry, aber dein Argument ist absoluter Quatsch! Wenn du unangeschnallt fahren willst, nur zu! Aber bitte bring das nicht deinen Kindern oder sonst jemand bei! Und wenn mir so etwas (also Interger als Zeilenzähler oder globale Variablen oder ...) auffällt, werde ich immer wieder auf den Unsinn hinweisen. Punkt!.
    Ende des Themas für mich.

    EDIT: Übrigens hatte ich schon Fälle, da haben die 1Mio Zeilen nicht ausgereicht und ich musste die Daten (Messwerte) auf mehr Spalten (Blätter waren mir zu umständlich) verteilen. So unterscheiden sich die Erfahrungen.
     
    Zuletzt bearbeitet: 5. September 2023
  6. d'r Bastler
    d'r Bastler Erfahrener User
    Moin Helmut,
    ich nehme Deinen Kommentar auch gerne hier - kein Problem. Wer vbasteleien.de kennt, weiß die Vorteile dort zu schätzen. Denn -wo immer möglich- ist es dort Prinzip, dass Fragende freundlich dort abgeholt werden, wo sie technisch stehen. Und deshalb auch von mir als Antwort auf Dein "absoluter Quatsch": Wozu soll ich für jede Fahrt um die Ecke einen Trecker nehmen, wenn es auch mein Fahrrad tut?

    Dein Trecker (so nenne ich einfach mal Deinen gesammelten Wissensschatz, denn Du offenbar immer anwendest) mag besser sein, als jeder Unimog. Aber gelegentlich unnötig. Und manchmal -und da spreche ich aus eigener Erfahrung als Anfänger- sind übersichtlichere einfache Lösungen (vgl. Bohrmaschine, Dübel, Schraube und Schraubendreher) besser, als eine ganze Werkstatt.

    In meiner Anmerkung zu Zähler & Iteratoren beziehe ich mich ausdrücklich auf meine Erfahrungen, biete aber auch die Lösung an, falls die Datenmenge über die 32.00 hinausgeht. Wenn Du zu diesen Themen weiterhin belehren willst, kann ich Dich nicht daran hindern. Du mich aber auch nicht, dann entsprechende Links dagegen zu setzen.

    Schöne Grüße
     
    d'r Bastler, 5. September 2023
    #21
  7. HKindler
    HKindler Erfahrener User
    Hi,

    du hast mir außer "mache ich schon immer so" noch keinen einzigen Grund dafür genannt, weshalb Integer besser sein soll als Long.

    Tatsache ist nun mal, dass Integer-Variablen als Zeilenzähler mangelhaft sind. Wenn für dich der Mangel keine Rolle spielt: OK. Aber dies anderen zu empfehlen, ohne auf die Risiken hinzuweisen, ist nicht schön.
     
  8. d'r Bastler
    d'r Bastler Erfahrener User

    Druckverbot, wenn Zelle einen bestimmten Inhalt haben.

    Habe ich irgendwo behauptet, Integer sei besser? Habe ich Integer irgendwo empfohlen? Sicher nicht. Ich erdreiste mich nur, es gelegentlich zu verwenden. In meinem Link weise ich auf die Unterschiede, wenn Du so magst Risiken, hin.

    Dein Ansatz ist ein anderer als meiner: Du immer Trecker, ich auch mal Fahrrad. Du belehrst, ich nicht. Tja ...

    Entscheidend ist letztlich, dass man an's Ziel kommt. Oder ...?
     
    d'r Bastler, 5. September 2023
    #23
  9. HKindler
    HKindler Erfahrener User
    Hi,

    wenn es nicht besser ist, wieso verwendest du es dann?
    Du verwendest es in Beispielen aus denen andere etwas lernen wollen. Und das ist nun mal, vorsichtig ausgedrückt, nicht ideal. Ich habe dich darauf hingewiesen und die Mängel bzw. kritischen Punkte in deinem Programm aufgezeigt. Es liegt mir fern dich zu belehren. Ich bitte dich nur darum schlechten Programmierstil nicht anderen vorzuleben und diesen dann auch noch heftig zu rechtfertigen.

    Und übrigens bin ich nicht mit dem Trecker unterwegs, denn der Trecker braucht Sprit, das Fahrrad nicht. Wenn du hier schon Vergleiche anstellst, dann bist du eher mit dem nostalgischen Hochrad unterwegs und ich mit dem Tourenrad.
     
  10. d'r Bastler
    d'r Bastler Erfahrener User
    und noch einen - dann ist aber bitte Schluss mit der unnötigen Diskussion:

    Die Sache mit den Globalen/Publics

    Schönen Abend noch!

    Hochrad/Tourenrad LOL netter Vergleich - aber falsch. Macht aber nix Druckverbot, wenn Zelle einen bestimmten Inhalt haben. :cool:
     
    d'r Bastler, 5. September 2023
    #25
Thema:

Druckverbot, wenn Zelle einen bestimmten Inhalt haben.

Die Seite wird geladen...
  1. Druckverbot, wenn Zelle einen bestimmten Inhalt haben. - Similar Threads - Druckverbot Zelle bestimmten

  2. Eine Zelle blinken lassen

    in Microsoft Excel Hilfe
    Eine Zelle blinken lassen: Wünsche einen schönen Sonntag in die Runde. Ich habe einen VBA Code, um eine Zelle blinken zu lassen. Nun kann ich das Blinken nur im VBA Code starten. Ich hatte mir vorgestellt, dass wenn ich das...
  3. Daten Einlesen aus mehre Zellen in Verbindung einer Verbundene Zelle

    in Microsoft Excel Hilfe
    Daten Einlesen aus mehre Zellen in Verbindung einer Verbundene Zelle: Moin Allerseits, mit Verlaub ich bin seit 5 Jahren aus der Materie raus, fange somit von Vorne an. Frage: Anpassung eines bereits Geschrieben Codes. Verwendete Elemente: Quelle> Tabelle "wsLK",...
  4. Hochzählen Zelle Excel oder Office365?

    in Microsoft Excel Hilfe
    Hochzählen Zelle Excel oder Office365?: Hallo zusammen Ich möchte im Excel eine Spalte mit den Schaltknopf hochzählen. Lokal funktioniert es einwandfrei, wie könnte ich es lösen da verschiedene Personen die gleiche Datei öffnen müssen,...
  5. Zelleninhalte in andere Zelle mit Komma getrennt

    in Microsoft Excel Hilfe
    Zelleninhalte in andere Zelle mit Komma getrennt: Hallo, ich weiß nicht, ob ich im EXCEL Bereich richtig bin, da es sich um eine Tabelle aus einer Access Datenbank handelt. Allerdings müsste ich "nur" in dieser Tabelle einiges ändern: Für jeden...
  6. In einer Zelle Zahlen erkennen und trennen

    in Microsoft Excel Hilfe
    In einer Zelle Zahlen erkennen und trennen: Guten Tag zusammen Ich habe folgende Daten in einer Zelle und muss diese in mehrere Spalten aufteilen, insbesondere benötige ich die Zahl, die hinter dem X steht PKP210SX90AOS08...
  7. Formularsteuerelement Textfeld: Selbe Formatierung wie verlinkte Zelle?

    in Microsoft Excel Hilfe
    Formularsteuerelement Textfeld: Selbe Formatierung wie verlinkte Zelle?: Hallo, ich bin ja gerade dabei ein Bestellformular mit Excel zu realisieren. Das ganze sieht soweit auch schon sehr gut aus und funktioniert weitgehendst. Die Textfelder sind nun alle verlinkt...
  8. Teilstring einer Zelle auf Wert aus anderer Zelle überprüfen

    in Microsoft Excel Hilfe
    Teilstring einer Zelle auf Wert aus anderer Zelle überprüfen: Hallo zusammen, ich habe in einer Excel-Tabelle in zwei Tabellenblätter. Tabellenblatt "Artikelstamm" beinhaltet in Spalte A eine Artikel-Nr. und diverse weitere Spalten. Hier ein kleiner Auszug:...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden