Ho creato una UDF che funziona su un singolo foglio. Il problema si verifica con più fogli. Se ho la formula su più fogli, e se la (ri) carica su un foglio, cambia anche l'output in TUTTI gli altri fogli.UBA VBA modifica i valori su TUTTI i fogli. Come limitare a uno?
Perché succede? Non sto usando ActiveWorksheet o Active Cell o simili.
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
Ricarica la formula, il che significa che ricalcola? Oppure ricalcola e utilizza le stesse informazioni su tutti i fogli, invece di utilizzare i dati sul foglio in cui si trova la formula? (...Ha senso?). Potrebbe avere qualcosa a che fare con [Volatility] (http://www.mrexcel.com/forum/excel-questions/271165-udf-volatile-vs-not.html) – BruceWayne
1) Se carico la formula in un foglio manualmente 2) Utilizza lo stesso valore su tutti gli altri fogli - sì – sandboxj
Inoltre, prova ad aggiungere una variabile del foglio di lavoro ('Dim ws come foglio di lavoro',' Imposta ws = Fogli (security.parent.name) ', quindi aggiungi' ws .' prima di tutti gli usi di 'Cells()'. Ciò assicurerà che i dati provengano dal foglio 'security' è acceso. – BruceWayne