Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从宏调用函数_Vba_Excel - Fatal编程技术网

Vba 从宏调用函数

Vba 从宏调用函数,vba,excel,Vba,Excel,我试图使用函数:Cells(Rows.Count,14).End(xlUp).Row来确定最后一行的数据。这个公式和类似的公式出现在我的VBA代码的许多地方。我的电子表格非常复杂,我经常需要添加列。因此,我不想参考第14列,而是想使用一个仅在一个地方就可以轻松更改的值。我使用的是一个命名列,我只需要在一个地方更新它。出售的物品出现在第N列。我知道这段代码非常简单,但为了提问,我简化了它。当我尝试运行Test sub时,我发现compile error:ByRef参数类型不匹配,变量Item_已售

我试图使用函数:
Cells(Rows.Count,14).End(xlUp).Row
来确定最后一行的数据。这个公式和类似的公式出现在我的VBA代码的许多地方。我的电子表格非常复杂,我经常需要添加列。因此,我不想参考第14列,而是想使用一个仅在一个地方就可以轻松更改的值。我使用的是一个命名列,我只需要在一个地方更新它。出售的物品出现在第N列。我知道这段代码非常简单,但为了提问,我简化了它。当我尝试运行Test sub时,我发现compile error:ByRef参数类型不匹配,变量Item_已售出。我使用字母的原因是
Range()
需要字母,但是
Cells().End(xlUp)。Row
需要数字

如果我将:
Items\u seld=“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
使用全局常量

在模块顶部,任何子/功能之外:

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
使用全局常量

在模块顶部,任何子/功能之外:

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

在代码开头添加一个全局变量

public Items_Sold as String

这将解决您的ByRef问题。但调用Test()时,您仍然会遇到未声明的已售出物品的值的问题,除非您在之前的某个地方设置了已售出物品的值。

通过编写在代码开头添加一个全局变量

public Items_Sold as String

这将解决您的ByRef问题。但调用Test()时,您仍然会遇到未声明的已售出物品的值的问题除非您在以前的某个地方设置了已售出物品的值。

您似乎已经在对列字母进行硬编码-为什么不使用int变量作为列编号?您可能会遇到错误,因为调用functino
ColNum(已售出物品)
Items\u selled
不是一个声明的变量,因此被视为
Empty
,这是一个数字/int,但您的函数需要一个字符串…@davidzemen的想法很好,但这并不能解决它。@Dave.Gugg因为在大多数地方,我会用Range()引用它,Range()需要字母,不是数字。您似乎已经在对列字母进行硬编码了-为什么不为列编号使用一个int变量呢?您可能会遇到一个错误,因为当您调用functino
ColNum(Items\u selled)
时,
Items\u selled
不是一个声明的变量,因此被视为
空的
,这是一个数字/int,但是您的函数需要一个字符串…@davidzemen的想法不错,但这并不能解决它。@Dave.Gugg因为在大多数情况下,我会用Range()引用它,Range()需要字母,而不是数字。