La function en VBA devuelve #Value en una hoja pero funciona en otra

Tengo una function en VBA que realiza algunas operaciones llamando a otras funciones más pequeñas. Esta function no funciona en ninguna hoja, solo en una. En las hojas no funciona, simplemente sale de todo el algorithm cuando obtiene el valor de otra function.

Esta es mi Function determinarCantidadPorPedido(ByVal material As String, ByVal mes As String)

  Dim demanda As Double Dim pProgtwigdo As Double Dim numPedidos As Integer demanda = determinarDemanda(material, mes) Call contarProductosMateriales Sheets("LlegadaMateriales").Activate Dim fila As Integer Dim columna As Integer For i = 1 To numMateriales Step 1 If Sheets("LlegadaMateriales").Cells(1 + i, 1) = material Then fila = 1 + i Exit For End If Next For j = 1 To 12 Step 1 If Sheets("LlegadaMateriales").Cells(1, j + 1) = mes Then columna = j + 1 Exit For End If Next pProgtwigdo = Sheets("LlegadaMateriales").Cells(fila, columna) numPedidos = darCantidadPedidos(determinarDiasMes(mes), darLeadTime(material)) determinarCantidadPorPedido = WorksheetFunction.Round((demanda - pProgtwigdo) / numPedidos, 0) 

y llama Public Function determinarDemanda(ByVal material As String, ByVal mes As String) As Double

  Dim filaProducto As Double Dim numMat As Double Dim columnaDemanda As Double Worksheets("ProductosYMateriales").Activate numMat = Sheets("ProductosYMateriales").Range(Cells(3, 1), Cells(3, 1).End(xlDown)).Rows.Count For i = 1 To numMat Step 1 If Sheets("ProductosYMateriales").Cells(i + 2, 1) = material Then filaProducto = i + 2 Exit For End If Next For j = 1 To 12 Step 1 If Sheets("Demanda").Cells(1, j + 2) = mes Then columnaDemanda = j + 2 Exit For End If Next Dim numProd As Double numProd = Sheets("ProductosYMateriales").Range(Cells(2, 2), Cells(2, 2).End(xlToRight)).Columns.Count Dim demanda As Double demanda = 0 For k = 1 To numProd Step 1 Dim x As Double x = Sheets("Demanda").Cells(k + 1, columnaDemanda) Dim y As Double y = Sheets("ProductosYMateriales").Cells(filaProducto, k + 1) Dim prod As Double prod = x * y demanda = demanda + prod Next determinarDemanda = demanda 

y Function determinarCantidadPorPedido(ByVal material As String, ByVal mes As String)

 Dim demanda As Double Dim pProgtwigdo As Double Dim numPedidos As Integer demanda = determinarDemanda(material, mes) Call contarProductosMateriales Sheets("LlegadaMateriales").Activate Dim fila As Integer Dim columna As Integer For i = 1 To numMateriales Step 1 If Sheets("LlegadaMateriales").Cells(1 + i, 1) = material Then fila = 1 + i Exit For End If Next For j = 1 To 12 Step 1 If Sheets("LlegadaMateriales").Cells(1, j + 1) = mes Then columna = j + 1 Exit For End If Next pProgtwigdo = Sheets("LlegadaMateriales").Cells(fila, columna) numPedidos = darCantidadPedidos(determinarDiasMes(mes), darLeadTime(material)) determinarCantidadPorPedido = WorksheetFunction.Round((demanda - pProgtwigdo) / numPedidos, 0) 

Un problema es en esta línea:

 numMat = Sheets("ProductosYMateriales").Range(Cells(3, 1), Cells(3, 1).End(xlDown)).Rows.Count 

cuando llamas a Cells , esta reference es la hoja activa actual. Por lo tanto, obtendrá resultados diferentes si llama a la function en hojas diferentes.

Deberá especificar a partir de qué hojas desea hacer reference a las celdas. Supongo que quieres esto:

 numMat = Sheets("ProductosYMateriales").Range(Sheets("ProductosYMateriales").Cells(3, 1), Sheets("ProductosYMateriales").Cells(3, 1).End(xlDown)).Rows.Count