从macros调用一个函数

我正在尝试使用函数: Cells(Rows.Count, 14).End(xlUp).Row来确定数据的最后一行。 这个和类似的公式出现在我的VBA代码的许多地方。 我的电子表格相当复杂,我经常需要添加列。 因此,我不想提及第14列,我只想使用一个值,我只能在一个地方轻易改变。 我正在使用一个命名的列,我只需要在一个地方更新。 销售项目出现在N列。我意识到这个代码非常简单,但为了提出问题,我简化了它。 当我尝试运行testing子,我编译errror:ByRef参数types不匹配和variablesItem_Sold。 我使用字母的原因是Range()需要一个字母,但是Cells().End(xlUp).Row需要一个数字。

它工作,如果我移动: Items_Sold = "N"的子从函数,但这意味着这个代码将不得不在每个子而不是在一个函数。

function:

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

macros:

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

使用全局常量。

在您的模块的顶部,在任何Sub / Function之外:

 Const COL_NUM As Long = 14 

用法:

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

通过编写在代码的开头添加一个全局variables

 public Items_Sold as String 

这将解决您的ByRef问题。 但是在调用Test()的时候仍然会出现未声明的Item_Sold值,除非你在之前的某处设置了Items_Sold的值。