我正在尝试使用函数Cells(Rows.Count, 14).End(xlUp).Row
来确定包含数据的最后一行。这个和类似的公式出现在我的VBA代码的许多地方。我的电子表格非常复杂,我经常需要添加列。因此,我不想参考第14列,而是想使用一个我只能在一个地方轻松更改的值。我正在使用一个名为Column of sort,我只需要在一个地方更新。销售的商品出现在N栏中。我意识到这段代码非常简单,但为了提问,我将其简化了。当我尝试运行Test子程序时,我编译错误:ByRef参数类型不匹配和变量Item_Sold。我使用信件的原因是Range()
需要一封信,但Cells().End(xlUp).Row
需要一个号码。
如果我将Items_Sold = "N"
移动到函数的子函数中,它会起作用,但这意味着这段代码必须放在每个子函数中,而不是只放在一个函数中。
功能:
Function ColNum(ColumnNumber As String) As Integer
Dim Items_Sold As String
Items_Sold = "N"
ColNum = Range(Replace("#:#", "#", ColumnNumber)).Column
End Function
宏:
Sub Test()
Dim Total_Items_Sold As Integer
Total_Items_Sold = Cells(Rows.Count, ColNum(Items_Sold)).End(xlUp).Row
End Sub
答案 0 :(得分:4)
使用全局常量。
在模块的顶部,在任何子/函数之外:
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
答案 1 :(得分:0)
通过编写
在代码的开头添加一个全局变量public Items_Sold as String
将解决您的 ByRef 问题。但是,除非您之前在某处设置了 Items_Sold 的值,否则在调用 Test()时,您仍然会遇到未声明的 Items_Sold 值的问题。