Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1604to1608
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wenn Zellinhalt gelöscht, dann bitte Formel

Wenn Zellinhalt gelöscht, dann bitte Formel
23.01.2018 15:19:56
Leo
Hallo ihr Lieben,
ich habe eine Tabelle aus der Formatvorlage (unter Reiter "Start" auf "Als Tabelle formatieren" klicken) erstellt.
Nun möchte ich folgendes:
Wann immer man den Inhalt einer Zelle löscht, soll dort bspw. folgende Formel erscheinen: =1+1
Und das soll für jede Zelle einer Spalte möglich sein (bemerke: man soll die Tabelle zeilenmäßig erweitern können und für die neuen Zeilen gelte die selbe Formel)
Ist soetwas Verrücktes mit VBA möglich?
Hajo hat gute Arbeit geleistet und diese Formel hierfür erstellt (diesen Code muss man beim Editor in die entsprechende Tabelle einfügen):
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target = "" Then
Application.EnableEvents = False
Target.Formula = "=1+1"
Application.EnableEvents = True
End If
End Sub

Nun erfolgt ein Problem:
Wenn man eine weitere Zeile hinzufügen möchte, ertönt ein Fehler.
Siehe bitte bei meinem File-Upload die Bilder 1 bis 5.
https://www.herber.de/bbs/user/119193.jpg
https://www.herber.de/bbs/user/119194.jpg
https://www.herber.de/bbs/user/119195.jpg
https://www.herber.de/bbs/user/119196.jpg
https://www.herber.de/bbs/user/119197.jpg
Liebe Grüße
Leo

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dann halt so hier:
23.01.2018 16:16:52
Willi
Hallo Leo,
dann so:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target.Value = "" Then
Application.EnableEvents = False
Target.Formula = "=1+1"
Application.EnableEvents = True
End If
End Sub

Gruß Willi
AW: Dann halt so hier:
23.01.2018 16:44:31
Leo
Hallo Willi,
leider hat es das Problem nicht gelöst :(
upps ...
23.01.2018 16:45:39
Willi
besser so:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And IsEmpty(Target.Value) Then
Application.EnableEvents = False
Target.Formula = "=1+1"
Application.EnableEvents = True
End If
End Sub

Gruß Willi
Anzeige
AW: upps ...
23.01.2018 17:07:17
Luschi
Hallo Willi,
schpn wieder nicht getestet: IsEmpty(Target.Value) ergibt immer 'False', egal wie groß der Zellbereich sein mag und damit
wird der If-Abfrage-Block immer übersrungen.
Aus der Excel-Online-Hilfe: IsEmpty gibt nur für Variant-Werte sinnvolle Informationen zurück.
Außerdem hat IsEmpty etwas mit der Initialisierung von Variablen zu tun, siehe:
https://msdn.microsoft.com/de-de/VBA/Language-Reference-VBA/articles/isempty-function
Gruß von Luschi
aus klein-Paris
immer 'False'?
23.01.2018 17:23:46
Willi
Hallo Luschi,
immer 'False' - dem würde ich jetzt widersprechen wollen.
Gibt 'True' zurück, wenn wie von Leo gewünscht 'eine Zelle'(sic) geändert wird.
Und dann wird die Formel in das eine Feld geschrieben.
Gruß Willi
Anzeige
AW: Dann halt so hier:
23.01.2018 16:52:53
Luschi
Hallo Willi,
hättest Du Deinen Vorschlag getestet, dann wäre Dir aufgefallen, daß genau der selbe Fehler auftritt.
Man kann zwar mit 'Target.Value = ""' oder auch 'Target = ""' alle Zellen im Target-Bereich gleichzeitig leeren, aber niemals so in einer Abfrage prüfen, ob alle Zelle im Target-Bereich leer sind; man sollte/muß 2 Fälle dabei ausschließen:
- neue Spalte 'B' einfügen
- neue Zeile (egal wo!)
Hier mal mein Lösungsversuch:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ok As Boolean
If Target.Column = 2 Then
ok = Application.WorksheetFunction.CountBlank(Target) = Target.Count And _
Target.Count 
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Wenn Zellinhalt gelöscht, dann bitte Formel
23.01.2018 16:45:28
Daniel
HI
könntest du bei einer berechneten Tabelle auch so lösen:
in der ersten Spalte steht die Formel bzw der Wert der angewendet werden soll, wenn die Haupteingabespalte (2. spalte) leer ist
in der zweiten Spalte macht der Anwender seine Eingaben
in der drittenspalte steht sinngemäß folgende Formel:
=Wenn(Spalte2="";Spalte1; Spalte2)
zum rechnen bzw für Auswertungen nimmst du dann die 3. Spalte.
erste und dritte Spalte kannst du ausblenden
Wenn bei leerer zweiter Spalten der Wert aus der ersten innerhalb der 2. Spalte angezeigt werden soll, dann geht das auch mit diesem Trick:
- die Spaltenbreite der ersten Spalte wird so klein wie möglich, aber größer 0 gezogen (1 oder 2 Pixel)
- Wenn jetzt die zweite Spalte leer ist, wird der Inhalt aus der ersten Spalte in der zweiten Spalte weitergeschrieben, ist die zweite Spalte befülllt, sieht man nur den Inhalt der zweiten Spalte.
Funktioniert aber nur, wenn in der ersten Spalte Text steht.
dh wenn man hier mit Zahlen arbeiten will, müsste man diese in der ersten Spalte als Text erstellen:
=Text(1+1;"0")
und in der dritten Spalte diesen text dann in einen Zahlenwert wandeln:
=Wenn(Spalte2 = ""; Wert(Spalte1); Spalte2)
da du dich in einer Intelligenten Tabelle befindest, werden diese Formeln automatisch erweitert wenn du Zeilen hinzufügst.
Code braucht man keinen, nur zwei zusätzliche Spalten.
Gruß Daniel
Anzeige
Als Makro so:
23.01.2018 17:35:32
Daniel
hier mit bezug auf deine Tabelle, damit sich die Bezüge auch automatisch anpassen.
Tabellen- und Spaltenname ggf anpassen.
Die Fallunterscheidung mit der Anzahl der leeren Zellen im Bereich musste ich machen, weil das SpecialCells den Zellbereich automatisch erweitert, wenn man nur eine Zelle als Quelle angibt, und dann werden ggf. Zellen außerhalb des gewünschten Bereichs mit der Formel gefüllt.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
With Range("Tabelle1[Spalte1]")
If Not Intersect(Target, .Cells) Is Nothing Then
Application.EnableEvents = False
Select Case WorksheetFunction.CountBlank(Intersect(Target, .Cells))
Case 0
Case 1
For Each Zelle In Intersect(Target, .Cells)
If Zelle.Formula = "" Then Zelle.Formula = "=1+1"
Next
Case Else
Intersect(Target, .Cells).SpecialCells(xlCellTypeBlanks).Formula = "=1+1"
End Select
Application.EnableEvents = True
End If
End With
End Sub
Gruß Daniel
Anzeige

318 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige