Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
956to960
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
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellaktivierung per vba

Zellaktivierung per vba
09.03.2008 18:23:00
wossi
Nabend,
vorhin hatte mir Franz (fcs) netterweise einen Code zur Verfügung gestellt, der soweit auch genau das umsetzt, was ich wollte. Nur leider erst, nach aktiver Zelleingabe in Zelle H10. In der eigentlichen Datei ist die Zelle H10 aber mit einer WENN Formel hinterlegt. Kann mir jemand helfen, den vorhandenen Code so umzustricken, dass es auch bei nicht aktiver Eingabe hinhaut?

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Zeile As Long, strFormel As String, Zelle As Range, ws As Worksheet
Set ws = Worksheets("Tabelle2")
If Not Intersect(Target, Range("E10:P10")) Is Nothing _
And Target.Cells.Count = 1 Then
If LCase(Target.Value) = "ist" Then
If MsgBox("Sollen die Werte in Spalte " & Target.Column _
& " (" & Chr$(Target.Column + 64) & ") durch die Formel ersetzt werden?", _
vbQuestion + vbYesNo) = vbYes Then
'Wert durch Formel ersetzen für Zeilen mit Eintrag in Spalte 4 eintragen
For Zeile = Target.Row + 2 To Cells(Rows.Count, 4).End(xlUp).Row
If Not IsEmpty(Cells(Zeile, Target.Column)) Then
'Zelle mit dem Namen im Blatt 2 suchen
Set Zelle = ws.Columns.Find(What:=Me.Cells(Zeile, 4).Value, LookIn:=xlValues, _
lookat:=xlWhole)
If Not Zelle Is Nothing Then
strFormel = "='" & ws.Name & "'!R" & Zelle.Row & "C" & Zelle.Column + _
Target.Column - 4
Cells(Zeile, Target.Column).FormulaR1C1 = strFormel
Else
Cells(Zeile, Target.Column).Value = "kein Wert"
End If
End If
Next
End If
End If
End If
End Sub


Die Datei https://www.herber.de/bbs/user/50585.xls wurde aus Datenschutzgründen gelöscht

wossi

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellaktivierung per vba
09.03.2008 19:18:00
Daniel
Hi
erstmal: der Link zur Datei funktioniert nicht mehr
das Worksheet_Change-Event wird immer dann aufgerufen, wenn ein Zellinhalt geändert wird.
Ändert sich jetzt der Wert einer Zelle, die eine Formel hat (durch neuberechnung), dann wird das Worksheet_Change-Event nicht aktiviert, weil sich der inhalt der Zelle, dh. die Formel nicht gändert hat.
wenn das Makro jedesmal laufen soll, wenn die sich die Zellwerte ändern, musst du anstelle des Worksheet_Change - Events das Worksheet-_Calculate - Event verwenden, dh. du musst die erste Zeile so schreiben:

Private Sub Worksheet_Calculate()
End Sub


allerdings müsstest du das Makro dazu vollständig umschreiben, weil es keine TARGEGT-Variable mehr gibt und du auch nicht so einfach feststellen kannst, welche Zellen sich geändert haben.
Dazu wäre allerdigs schon ne Beispieldatei mit den korrekten Formeln erforderlich.
ne Alternatvie wäre auch, daß du nicht die Zellen mit den Formeln prüfst, sondern diejnigen Zellen, die in diesen Formeln referenziert werden und so die Veränderung hervorrufen.
aber auch hierfür wäre eine komplette Umprogrammierung erforderlich, da du dann die TARGET-Variable auch nicht mehr verwenden kannst.
Gruß, Daniel

Anzeige
AW: Zellaktivierung per vba
09.03.2008 19:43:00
wossi
Hallo Daniel,
hier nochmal ein neuer Link.
https://www.herber.de/bbs/user/50593.xls
Nach jedem Monat erfolgt ein Wechsel von "Soll" zu "Ist", die Umstellung erfolgt über eine WENN Funktion (Exemplarisch nur in Spalte H dargestellt). Die Werte die per sverweis gesucht werden sollen befinden sich, entgegen dem Beispiel, in einer externen Datei. Die Przedur des Einfügens wenn"ist", soll noch in vielen weiteren Zellen geschehen.
Gruß,
wossi

AW: Zellaktivierung per vba
09.03.2008 20:12:00
Daniel
Hi
nun, in diesem Fall ist es recht einfach.
da in der in der Formel das SOLL/IST durch die Eingabe in der Zeile 9 gesteuert wird, musst du die Prüfung so erweitern, daß das Makro auch bei einer Veränderung in Zeile 9 läuft.
der Code dazu sieht so aus, die Änderungen gegenüber dem Originalcode sind fett

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Zeile As Long, strFormel As String, Zelle As Range, ws As Worksheet
Set ws = Worksheets("Tabelle2")
If Not Intersect(Target, Range("E9:P10")) Is Nothing _
And Target.Cells.Count = 1 Then
If LCase(Cells(10, Target.Column).Value) = "ist" Then
If MsgBox("Sollen die Werte in Spalte " & Target.Column _
& " (" & Chr$(Target.Column + 64) & ") durch die Formel ersetzt werden?", _
vbQuestion + vbYesNo) = vbYes Then
'Wert durch Formel ersetzen für Zeilen mit Eintrag in Spalte 4 eintragen
For Zeile = Target.Row + 2 To Cells(Rows.Count, 4).End(xlUp).Row
If Not IsEmpty(Cells(Zeile, Target.Column)) Then
'Zelle mit dem Namen im Blatt 2 suchen
Set Zelle = ws.Columns.Find(What:=Me.Cells(Zeile, 4).Value, LookIn:=xlValues, _
lookat:=xlWhole)
If Not Zelle Is Nothing Then
strFormel = "='" & ws.Name & "'!R" & Zelle.Row & "C" & Zelle.Column + _
Target.Column - 4
Cells(Zeile, Target.Column).FormulaR1C1 = strFormel
Else
Cells(Zeile, Target.Column).Value = "kein Wert"
End If
End If
Next
End If
End If
End If
End Sub


Anzeige
AW: Zellaktivierung per vba
09.03.2008 23:01:00
wossi
Hi,
danke dafür. Ich habe mir etwas den Kopf zerbrochen, wie ich den Code auf die Orginaldatei ummünzen kann, stehe vor dem Problem, dass ich nicht weiß, wie ich jetzt den Bezug zu den Externen Excelmappen (aus dem sverweis) hinbekommen soll....
Aber das ist nur der Anfang... darüber werde ich dann morgen weiter nachdenken.
Gruß,
wossi

AW: Zellaktivierung per vba
10.03.2008 23:18:34
Daniel
Hi
du kannst auch ein normales Makro im allgemeinen Modul schreiben und dieses dann über das Kontextmenü dem Drehfeld zuweisen ("Makro zuweisen").
über die Verknüpfte Zelle des Drehfeldes (Prämissen!C4) kannst du ja den entsprechenden Monat auslesen und daraus die Zelle bestimmen, in die die Formel eingefügt werden muss.
https://www.herber.de/bbs/user/50623.xls
das mit dem Externen Zellbezug kannst du ja so machen, daß du den Externen Zellbezug mal von Hand erstellst und dir dann im Direktfenster mit "?Selection.FormulaR1C1" den passenden Formelstring für den Code anzeigen lässt.
Gruß, Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige