5k Aufrufe
Gefragt in Tabellenkalkulation von florian1010 Mitglied (754 Punkte)
Hallo Zusammen,

ich möchte einem Makro eine weitere Abfrage hinzufügen, komme aber leider nicht wirklich weiter.


Public TargetText As String

Private Sub Worksheet_Change(ByVal Target As Range)

Dim MyUndo As Boolean

If Target.Cells.Count = 1 Then
If Target.Row >= 2 And Target.Row <= 798 And Target.Value <> "" Then
Select Case Target.Column
Case 13 'Änderung in Spalte "M"
Case Is >= 2, Is <= 20 'Änderung in Spalten
If TargetText <> "" And Target.FormulaR1C1 <> TargetText Then
MyUndo = (MsgBox("Soll der Wert von " & Target.Address(0, 0) & " wirklich geändert werden?" & vbLf & _
vbLf & _
"Nein: " & TargetText & vbLf & _
"Ja: " & Target.Value, vbYesNo + vbQuestion, "Zellweret ändern") = vbNo)
End If
End Select
End If
End If
If MyUndo Then
Target.FormulaR1C1 = TargetText
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TargetText = Target.Cells(1, 1).FormulaR1C1
End Sub



Die MsgBox (erscheint und frägt nach, ob eine Zelle tatsächlich überschrieben werden soll) soll Nicht erscheinen, wenn die zu überschreibende Zelle leer ist, den Wert 0 oder keine "Formel" beinhaltet. Die Formeln, die in den Zellen stehen , haben als Ausgabe eine 0.

Ich habe es schon so versucht, aber das funktioniert nicht:


If Target.Row >= 2 And Target.Row <= 798 And Target.Value <> "" Or 0 Then


Beispieldatei

Kann mir hier jemand helfen?

Danke

Gruß Florian

13 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Florian,

du müsst alle Vergleichsoperatoren angeben.
If Target.Row >= 2 And Target.Row <= 798 And Target.Value <> "" Or Target =0 Then

Gruß Hajo
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
If Target.Row >= 2 And Target.Row <= 798 And target =0 Then
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
If Target.Row >= 2 And Target.Row <= 798 then
if Target.Value <> "" Or Target =0 Then
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo Zusammen,

danke für eure Hilfe. Nur funktioniert es bei mir nicht. Hat die Umstellung auf Target = 0 in der Beispieltabelle funktioniert? (Beim überschreien der Zellen ohne Formel soll die Msg-Box erscheinen, beim überschreiben von Zellen mit Formel soll die Msg-Box NICHT erscheinen.

VG Florian
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo Hajo,

ich habe alle 3 Versionen von dir ausprobiert, jedoch ohne Erfolg.

Hat es etwas mit der Zeile


If TargetText <> "" And Target.FormulaR1C1 <> TargetText Then


zu tun?

Gruß Florian
0 Punkte
Beantwortet von
Hallo Florian,

ich glaube das Problem liegt bei "Or Target.Value = 0" Damit werden die zuvor ausgeschlossenen LeerZellen wieder in die Bedingung integriert. 0 und "" ist für Value gleichbedeutend. Probiers mal mit

IF Target.Row >= 2 And Target.Row <= 798 And (Target.Value <> "" Or Application.WorksheetFunction.IsNumber(Target) And Target.Value = 0) Then

Damit prüfst du ob die Zahl 0 in der Zelle steht.
Wichtig sind hier die Klammern da And Vergleiche vor Or Vergleichen stattfinden. Ähnlich wie bei der Punkt- vor Strich-Rechnung.
0 Punkte
Beantwortet von
Sorry,

deine Beispielformel hat mich auf den falschen Dampfer gebracht.
wenn die Zelle 0 ist solls ja NICHT erscheinen. Mit

If Target.Row >= 2 And Target.Row <= 798 And Target.Value <> 0 Then

schließt du sowohl Leerzellen als auch 0 Werte aus.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo ExcelKing,

vielen Dank für deine Hilfe.

Ich habe es in allen möglichen varianten versucht, aber leider funktioniert es auch so noch nicht.

Hat es mit deiner in meiner Beispieldatei damit funkioniert?

VG Florian
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Florian,

du schreibst:
Die MsgBox (..) soll Nicht erscheinen, wenn die zu überschreibende Zelle leer ist, den Wert 0 oder keine "Formel" beinhaltet.

Bedeutet das, dass wenn eine Formel als Ergebnis Null hat, keine Messagebox erscheinen soll?
Und wenn in der Zelle keine Formel steht aber eine Zahl, du z.B. in Spalte H die bereits vorhandene Anzahl änderst, die Messagebox
nicht erscheinen soll?

Gruß

M.O.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo M.O.,

ich habs mal wieder umständlicher vormuliert, wie es tatsächlich ist.

Ist die zu ändernde Zelle leer oder beinhaltet eine Formel (Ausgabewert 0), soll die Msg-Box NICHT erscheinen.

Steht in der zu ändernden Zelle eine Zahl (größer 0), eine Formel mit Ausgabewert größer 0 / Text oder Text soll die Msg-Box erscheinen.

Danke schon im Voraus.

VG Florian
...