Ich habe eine UDF erstellt, die auf einem einzigen Blatt funktioniert. Das Problem tritt bei mehreren Blättern auf. Wenn ich die Formel auf mehreren Blättern habe und wenn ich sie auf ein Blatt (neu) lade, ändert sich auch die Ausgabe in ALLE anderen Blätter.VBA UDF ändert Werte auf ALLEN Blättern. Wie kann man auf eins beschränken?
Warum passiert das? Ich verwende kein ActiveWorksheet oder Active Cell oder ähnliches.
Function customreturn(security As Range, datacheck As Range) As Variant
Dim row_num As Integer
Dim row_num2 As Integer
Dim price1 As Double
Dim price2 As Double
Dim perfo As Double
Dim blank_end As Boolean
row_num = security.Row
col_num = security.Column
row_num2 = row_num + 1
col_num2 = datacheck.Column
If WorksheetFunction.IsError(datacheck.Value) = True Then
customreturn = "No data"
Else
price1 = Cells(row_num, col_num).Value
Do While WorksheetFunction.IsError(Cells(row_num2, col_num2).Value) = True
row_num2 = row_num2 + 1
Loop
price2 = Cells(row_num2, col_num).Value
perfo = price1/price2 - 1
customreturn = perfo
End If
End Function
Er lädt die Formel neu, was bedeutet, dass sie neu berechnet wird? Oder es wird neu berechnet und verwendet dieselben Informationen für alle Blätter, anstatt die Daten auf dem Blatt zu verwenden, in dem sich die Formel befindet? (...Ist das sinnvoll?). Es könnte etwas mit [Volatilität] zu tun haben (http://www.mrexcel.com/forum/excel-questions/271165-udf-volatile-vs-not.html) – BruceWayne
1) Wenn ich die Formel in einem Blatt laden manuell 2) Es verwendet den gleichen Wert für alle anderen Blätter - ja – sandboxj
Versuchen Sie auch, eine Arbeitsblattvariable hinzuzufügen ('Dim ws als Worksheet',' Set ws = Sheets (security.parent.name) ', dann fügen Sie einfach' ws hinzu . 'vor allen Verwendungen von' Cells() '. Das wird sicherstellen, dass die Daten vom Blatt kommen,' security' ist on. – BruceWayne