ich habe eine Tabelle die normalerweise eine Spalte in eine andere Tabelle als Zeile umschreibt und Änderungen ständig überwacht. (diese benötige ich später für Serienbriefe und als Übersichtsliste)
Nun wollte ich der ganzen Sache etwas mehr Flexibilität verleihen. Der Plan war diese Spalte in die Spalte Z zu verschieben und mit Formeln zu befüllen. Diese verweisen auf einen anderen Ort in demselben Tabellenblatt.
Das würde mich befähigen unterschiedliche Formulare zu erstellen ohne das die Funktion an sich gestört wird.
DAS PROBLEM:
VBA nimmt die Werte die als Ergebnis einer Formel stehen nicht an. Würde ich die Werte per Hand in der Spalte Z notieren würde das ganze funktionieren.
Ich denke ich brauche sowas wie "WERT einfügen" für target.value. Ich habe schon gegoogelt aber ich finde nichts dergleichen.
Ich habe mal eine Tabelle vorbereitet. Die grünen Felder sind die Felder in die die Daten notiert werden sollen. Deren Position und Verteilung kann sich immer wieder ändern. Diese sollen dann in die blauen Felder übernommen und von dort in das Sheet "LISTE" übertragen werden.
Kann mir da Bitte jemand helfen?
Hier die Datei:
https://www.herber.de/bbs/user/133422.xlsm
Und hier der Code aus "Diese Arbeitsmappe":
Option Explicit
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal target As Range)
Dim blattno, bereich
Dim quellbereich, zelle
'die blätter bei denen nix passierne soll
blattno = Array("Daten", "Startseite", "Liste", "Master")
quellbereich = Array("Z5:Z24")
If InStr(1, "@" & Join(blattno, "@") & "@", "@" & sh.Name & "@", vbTextCompare) > 0 Then Exit _
Sub
If target.Count = 1 Then
'nur ein Eintrag erfolgte
If Not Intersect(target, sh.Range(quellbereich(0))) Is Nothing Then
aktualisieren sh, target
End If
Else
'mehrere Einträge erfolgen
For Each zelle In target
If Not Intersect(zelle, sh.Range(quellbereich(0))) Is Nothing Then
aktualisieren sh, zelle
End If
Next
End If
End Sub
Sub aktualisieren(sh As Object, ByVal target As Range)
Dim ziel
Dim spalte
Set ziel = Worksheets("LISTE").Columns(1).Find(sh.Name, LookIn:=xlValues, lookat:=xlWhole)
If ziel Is Nothing Then Exit Sub
spalte = target.Row - 1
Worksheets("LISTE").Cells(ziel.Row, spalte) = target.Value
End Sub
Liebe Grüße
Steve