Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA erkannt Excel Zellenwert nicht

VBA erkannt Excel Zellenwert nicht
Marc
Hallo.
Dank der Hilfe/Suche hier im Forum habe ich mir einiges basteln können. Im angehängten Excelfile werden die Spalte gesperrt in der ein "X" steht. Geben ich das "X" per Hand ein, funktioniert das. Wird das "X" per Formel erzeugt. Im Beipiel durch ein (Wenn, 2, dann "X") funktioniert es nicht.
https://www.herber.de/bbs/user/71922.xls
Die X-Feld sind als Text formatiert. Aber auch wenn ich statt X eine Zahl nehme klappt das nicht.
Liegt das an einer Variablen Definition im VBA? Oder erkennt der Code nur direkte Eingaben? Ich bin am Ende mit meinen Latin und für jede Hilfe dankbar.
Gruß, Marc
Anzeige
AW: VBA erkannt Excel Zellenwert nicht
14.10.2010 14:51:33
Marc
Info: Der VBA Code stammt noch aus dem beschriebenen Zahlenversuch.
Statt
.Locked = UCase(Target.Value) = 1

muss natürlich
.Locked = UCase(Target.Value) = "X"

stehen. Trotzdem funzt das nicht.
Anzeige
AW: VBA erkannt Excel Zellenwert nicht
14.10.2010 15:43:57
BoskoBiati
Hallo,
Worksheet_Change arbeitet nicht mit Berechnungen per Formel. Da brauchst Du Worksheet_calculate.
Gruß
Bosko
...Das wird dann aber erst abgearbeitet,...
14.10.2010 15:58:33
Luc:-?
…wenn alle durch die Eingabe ausgelösten Berechnungen durchgelaufen sind und hat/kennt dann natürlich auch kein Target
Insofern ist Tinos Vorschlag effektiver…
Gruß Luc :-?
Anzeige
AW: VBA erkannt Excel Zellenwert nicht
14.10.2010 15:14:23
Tino
Hallo,
im Code musst Du die Prüfung auf die Eingabezelle machen.
If Target.Address = Cells(5, 3).Address Then
Weil eine Formel dieses Event nicht startet und
Target die Zelle oder der Zellbereich ist wo eine Eingabe gemacht wird.
Gruß Tino
Anzeige
AW: VBA erkannt Excel Zellenwert nicht
14.10.2010 15:57:51
Marc
Hallo Tino.
Danke (schon wieder) für Deine Antwort/Hilfe. Wenn ich dich mit meinem mangelhaften VBA Verständnis richtig verstehe, arbeitet "Target" nur wenn ich eine direkte Eingabe tätige und da ich mir mein "X" mit einer Formel ziehe bringt mir das also gar nischts :-/
Wie sage ich denn nun diesem Mistding:
Lies das was in der Zelle C5 steht, dann sperre/sperre nicht c10 bis c18 und führ das bis Spalte AH fort.
  • 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngCell As Range
    If Not Intersect(Rows(1), Target) Is Nothing Then
    Me.Protect , UserInterfaceOnly:=True
    With Range("A1:D10")
    For Each rngCell In .Columns
    With rngCell
    Range(.Cells(2), .Cells(.Rows.Count)).Locked = _
    UCase(.Cells(1).Value) = "X"
    End With
    Next rngCell
    End With
    End If
    End Sub
    

  • Ich habe auch schon mit deinem Code, den du mir netterweise für mein erstes Simpelbeispiel gebastelt hast gearbeitet. Aber ich bin einfach zu lange aus VB rausgewesen und noch nicht lange genug zurück.
  • 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngCell As Range
    If Not Intersect(Rows(5), Target) Is Nothing Then
    Me.Protect , UserInterfaceOnly:=True
    With Range("C10:AH18")
    For Each rngCell In .Columns
    With rngCell
    Range(.Cells(10), .Cells(.Rows.Count)).Locked = _
    UCase(.Cells(5).Value) = "X"
    End With
    Next rngCell
    End With
    End If
    End Sub
    


  • Dank Dir schon mal - auch wenn du dir das Bier virtuell vorstellen musst ;-)
    Anzeige
    AW: VBA erkannt Excel Zellenwert nicht
    14.10.2010 16:10:13
    Tino
    Hallo,
    Deine Formel berechnet sich nach der Eingabe in Zeile 4, also überwache diese.
    Man könnte nun noch einbauen das auch nur dieser Bereich überprüft wird wo tatsächlich
    eine Eingabe stattfindet, aber dies kannst Du ja später mal machen wenn Du dich
    wieder eingearbeitet hast.
    https://www.herber.de/bbs/user/71924.xls
    Gruß Tino
    Anzeige
    AW: VBA erkannt Excel Zellenwert nicht
    14.10.2010 16:34:36
    Marc
    Du triffst es am Besten mit:
  • wenn Du dich wieder eingearbeitet hast.

  • Langsam wird's mir auch ein bißchen peinlich.
    Die Krux an der Sache ist, dass es es nur in meinem Beispiel eine manuelle Eingabe gibt. Sorry. Ich habe gedacht an einem einfachen Beispiel wäre es für andere besser verständlich. Ich wusste nicht von dem ganzen Rattenschwanz der sich da hinterher zieht.
    In meiner eigentlichen Arbeitsunterlage - prüfe ich über mehrere SVERWEISE und WENN Abfragen aus einem anderen Excelreiter in einer Tabelle ob ein bestimmter Tatbestand erfüllt ist. Das lasse ich mir als "X" darstellen, da ich dachte mit dieser Hilfezeile kann ich die Spalten am einfachsten sperren lassen.
    Es gibt also nie eine direkte Eingabe - sondern immer nur eine Werte-Weitergabe.
    Anzeige
    ohne Eingabe keine Berechnung Hand o. VBA
    14.10.2010 16:59:35
    Tino
    Hallo,
    , eine Formel hat doch irgendwo einen Bezug zu einer Zelle wo etwas von Hand oder mit VBA eingegeben wird,
    sonst würde ja keine Berechnung stattfinden (oder sehe ich das falsch),
    eben diese Zelle oder der Zellbereich müsste überwacht werden,
    der kann ja auch auf einer anderen Tabelle liegen,
    dann muss eben dieses Eventmakro in dieser Tabelle eingebaut werden.
    Du kannst auch den Vorschlag von Bosko verwenden,
    dieses Event startet nach jeder Berechnung in der Tabelle,
    dies kann aber unschöne Effekte hervorrufen die auf Dauer nervig werden könnten.
    Gruß Tino
    Anzeige
    AW: ohne Eingabe keine Berechnung Hand o. VBA
    14.10.2010 17:30:04
    Marc
    Hallo Tino,
    leider ist es genau so.
    Ich ziehe mir per WENN und SVERWEIS Daten aus einer Liste.
    Wenn die Kriterien X oder Y oder Z erfüllt sind soll die Spalte (Teil einer Matrix) nicht mehr bearbeitbar sein ("X").
    Wenn nicht. Soll eine Eingabe in die Spalte möglich sein, die ich in den nachfolgenden Schritte auswerte/benutze.
    D. h. es gibt keine Eingabe per Hand oder VBA die ich für das Sperren, wie von dir vorgeschlagen, überwachen kann.
    Zusätzlich sollte die ganze Prozedur über mehrere Excel-Reiter laufen.
    Wenn ich die Sub als Worksheet_Calculate (ByVal Target As Range) nutze, passiert leider gar nichts.
    Die X-Spalten die ich sperren möchte sind zwar bereits über bedingte Formatierung deutlich markiert, aber in dem Laden hier hätte ich mir gewünscht das noch etwas sicherer zu gestalten.
    Vielen Dank für deine/eure Bemühungen - aber langsam muss ich wohl zu dem Schluss kommen dass es keine, mit vertretbarem Aufwand, gestaltbare Lösung gibt.
    Gruß, Marc
    Anzeige
    und wo ist diese Liste?
    14.10.2010 17:41:38
    Tino
    Hallo,
    aber wenn sich in dieser besagten Liste nichts ändert, ändert sich auch nichts am Ergebnis der Formel.
    Calculate hat kein Target,
    daher muss bei jeder Berechnung der auf dieser Tabelle durchgeführt wird dieser Code ablaufen.
    Private Sub Worksheet_Calculate()
    Dim rngCell As Range
    Me.Protect , UserInterfaceOnly:=True
    With Range("D5:AH18")
    For Each rngCell In .Columns
    With rngCell
    Range(.Cells(6), .Cells(.Rows.Count)).Locked = _
    UCase(.Cells(1).Value) = "X"
    End With
    Next rngCell
    End With
    End Sub
    

    Gruß Tino
    Anzeige
    AW: und wo ist diese Liste?
    15.10.2010 09:10:01
    Marc
    Guten Morgen :-)
    Das habe ich eigentlich auch gedacht. Aber wenn ich mein File mit dem Code füttere passiert gar nichts. Nicht mal das Me.Protect.
    Der Code stimmt. Wenn in der ersten Range Zeile x steht sperre ab Range Zeile 6. Alles i.O. und trotzdem funzt nichts.
    Die Stammdaten befinden sind in einem SAP Excelauszug (Einzelfile) Aus diesem ziehe ich mir meine Infos in mein Arbeitsfile in einen Reiter "Data". Den "Data" Reiter durchpflüge ich mit WENN und SVERWEIS und wenn Zustand X,Y oder Z entsteht, malt mir die Formel ein "X" mit dem ich die Sperrspalte kennzeiche. Tadaaaa! Hört sich einfach an - isses aber wohl überhaupt nicht.
    https://www.herber.de/bbs/user/71933.xls
    Am Besten drucke ich alles aus und stelle mich mit nem Rohrstock daneben wenn jemand etwas ausfüllt :-)
    Merci, für deine Geduld.
    Anzeige
    AW: und wo ist diese Liste?
    15.10.2010 10:54:33
    Tino
    Hallo,
    die gelben Zellen sind als Text Formatiert, stelle dies mal auf Standard ein.
    Oder Versuch mal und lass diesen Code einmal drüberlaufen.
    Sub FormelErstellen()
    Dim rngRange As Range, FArray
    Tabelle1.Protect , UserInterfaceOnly:=True
    Set rngRange = Tabelle1.Range("C5:AH5")
    FArray = rngRange.Formula
    rngRange.NumberFormat = "General"
    rngRange.Formula = FArray
    End Sub
    

    Gruß Tino
    Anzeige
    ES FUNKTIONIERT!!
    15.10.2010 11:44:54
    Marc
    O_O
    Das geht. Das geht ja tatsächlich. Ich glaub's ja nicht. Super Tino!!! Herzlichen Dank!!
    Beste Grüße, Marc
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige
    Anzeige

    Infobox / Tutorial

    VBA: Excel Zellenwert wird nicht erkannt


    Schritt-für-Schritt-Anleitung

    1. VBA Code anpassen: Stelle sicher, dass Du den richtigen VBA Code verwendest, um die Zellen zu sperren. Wenn Du eine Formel verwendest, um ein "X" zu erzeugen, solltest Du sicherstellen, dass der Code auf die korrekte Zelle verweist. Beispiel:

      Private Sub Worksheet_Calculate()
         Dim rngCell As Range
         Me.Protect , UserInterfaceOnly:=True
         With Range("C10:AH18")
             For Each rngCell In .Columns
                 With rngCell
                     Range(.Cells(10), .Cells(.Rows.Count)).Locked = _
                     UCase(.Cells(5).Value) = "X"
                 End With
             Next rngCell
         End With
      End Sub
    2. Zellenformat überprüfen: Achte darauf, dass die Zellen, die Du überprüfst, nicht als Text formatiert sind, da ein "X" in einer als Text formatierten Zelle nicht als Zahl erkannt wird. Setze das Format auf "Allgemein".

    3. Worksheet_Calculate verwenden: Da das Worksheet_Change Event nicht auf Formeln reagiert, nutze das Worksheet_Calculate Event, um Änderungen zu erkennen, wenn die Berechnungen durchlaufen sind.

    4. Testen und Anpassen: Teste den Code und passe ihn nach Bedarf an, um sicherzustellen, dass er wie gewünscht funktioniert.


    Häufige Fehler und Lösungen

    • Excel Formel wird nicht erkannt: Wenn die Formel in einer Zelle nicht das erwartete Ergebnis liefert, überprüfe die Zellenformate. Ändere das Format auf "Standard", falls notwendig.

    • Locked Eigenschaft funktioniert nicht: Wenn die .Locked Eigenschaft nicht wie erwartet funktioniert, stelle sicher, dass der Code in das richtige Worksheet-Modul eingefügt wurde und dass Du das Arbeitsblatt mit Me.Protect entsprechend geschützt hast.

    • Target Wert wird nicht erkannt: Achte darauf, dass Du den richtigen Zellbereich überwachst. Wenn Du eine Formel verwendest, die in einer anderen Zelle berechnet wird, musst Du sicherstellen, dass Du diese Zelle auch überwachst.


    Alternative Methoden

    • Verwende Conditional Formatting: Anstatt VBA zu nutzen, könntest Du auch bedingte Formatierungen verwenden, um Zellen basierend auf bestimmten Bedingungen zu sperren oder hervorzuheben.

    • Formeln zur Berechnung von Werten: Anstelle von VBA kannst Du auch Formeln verwenden, um den Status der Zellen zu überprüfen und entsprechend anzuzeigen, ohne sie tatsächlich zu sperren.


    Praktische Beispiele

    Hier ist ein einfaches Beispiel, wie Du eine Zelle basierend auf einer Formel sperren kannst:

    Private Sub Worksheet_Calculate()
        If Range("A1").Value = "X" Then
            Range("B1").Locked = True
        Else
            Range("B1").Locked = False
        End If
    End Sub

    In diesem Beispiel wird Zelle B1 gesperrt, wenn A1 den Wert "X" hat.


    Tipps für Profis

    • Debugging: Verwende das Debugging-Tool in VBA, um zu prüfen, ob der Code richtig ausgeführt wird. Setze Breakpoints, um den Fluss des Codes zu überprüfen.

    • Dokumentation: Halte Deine VBA-Projekte gut dokumentiert, damit Du später nachvollziehen kannst, was jeder Teil des Codes macht.

    • Code-Optimierung: Halte Deinen Code schlank und vermeide unnötige Schleifen, um die Performance zu verbessern.


    FAQ: Häufige Fragen

    1. Warum wird der Excel Wert nicht als Zahl erkannt?
    Das kann daran liegen, dass die Zelle als Text formatiert ist. Ändere das Zellenformat auf "Allgemein", um sicherzustellen, dass der Wert als Zahl erkannt wird.

    2. Wie kann ich sicherstellen, dass meine VBA-Änderungen wirksam werden?
    Stelle sicher, dass Du das Arbeitsblatt mit Me.Protect schützt und die richtigen Zellreferenzen im Code verwendest. Teste den Code gründlich, um sicherzustellen, dass er funktioniert.

    3. Was ist der Unterschied zwischen Worksheet_Change und Worksheet_Calculate?
    Worksheet_Change wird ausgelöst, wenn eine Zelle manuell geändert wird, während Worksheet_Calculate nach jeder Berechnung im Arbeitsblatt ausgeführt wird. Letzteres ist nützlich, wenn Du Formeln verwendest, um Werte zu erzeugen.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige