从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的值。