Llamar a una function desde macro

Estoy tratando de usar la function: Cells(Rows.Count, 14).End(xlUp).Row para determinar la última fila con datos. Esta y fórmulas similares aparecen en muchos lugares en mi código VBA. Mi spreadsheet es bastante compleja y a menudo necesito agregar columnas. Entonces, en lugar de referirme a la Columna 14, me gustaría usar un valor que pueda cambiar fácilmente en un solo lugar. Estoy usando una especie de columna con nombre que solo necesito actualizar en un solo lugar. Los artículos vendidos aparecen en la columna N. Me doy count de que este código es muy simple, pero lo simplifiqué por el simple hecho de hacer una pregunta. Cuando trato de ejecutar el sub Prueba, I un error de compilation: el tipo de argumento ByRef no coincide y la variable Item_Sold. La razón por la que estoy usando una letra es que Range() necesita una letra, pero Cells().End(xlUp).Row necesita un número.

Funciona si muevo: Items_Sold = "N" al sub de la function, pero esto significa que este código debería ir en cada sub en lugar de en una sola function.

Función:

 Function ColNum(ColumnNumber As String) As Integer Dim Items_Sold As String Items_Sold = "N" ColNum = Range(Replace("#:#", "#", ColumnNumber)).Column End Function 

Macro:

 Sub Test() Dim Total_Items_Sold As Integer Total_Items_Sold = Cells(Rows.Count, ColNum(Items_Sold)).End(xlUp).Row End Sub 

Use una constante global.

En la parte superior de tu module, fuera de cualquier Sub / Función:

 Const COL_NUM As Long = 14 

Uso:

 Sub Test() Dim Total_Items_Sold As Long Total_Items_Sold = ActiveSheet.Cells(Rows.Count, COL_NUM).End(xlUp).Row End Sub 

Agregue una variable global al comienzo del código escribiendo

 public Items_Sold as String 

eso resolverá su problema ByRef . Pero aún tendrá problemas con el valor no declarado de Items_Sold al invocar Test () a less que establezca el valor de Items_Sold en algún lugar anterior.