Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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,在过去的18个月里,我写了大约10个easy宏,我想比我在VBA编程中了解更多 在我编写的所有子程序中,子程序标题后面的括号中都没有参数 我在stackoverflow上找到了这个代码。 它用于查找Excel工作表中包含数据的最后一行。 但是它有一些参数,请解释一下子程序名称后括号中的区别,这是我以前从未见过的 这些论点代表什么?我想不出来 Sub GetLastRow(strSheet, strColumn) Dim MyRange As Range Dim lngLast

在过去的18个月里,我写了大约10个easy宏,我想比我在VBA编程中了解更多

在我编写的所有子程序中,子程序标题后面的括号中都没有参数

我在stackoverflow上找到了这个代码。 它用于查找Excel工作表中包含数据的最后一行。 但是它有一些参数,请解释一下子程序名称后括号中的区别,这是我以前从未见过的

这些论点代表什么?我想不出来

Sub GetLastRow(strSheet, strColumn)
     Dim MyRange As Range
     Dim lngLastRow As Long

     Set MyRange = Worksheets(strSheet).Range(strColum & "1")

     lngLastRow = Cells(Rows.Count, MyRange.Column).End(xlUp).Row
End Sub
另一件我不明白的事情是为什么需要创建MyRange变量。 这是必要的还是有办法简化此代码,去掉MyRange变量并使用WorksheetsMBank_Statsy.UsedRange属性

在下面,您可以看到我想要应用此代码的工作表


我认为关于你的问题的评论可能已经为你提供了所有你需要的关于为什么事情会这样做的信息,但是如果你感兴趣,整个子程序可以简化为:

Function GetLastRow(strSheet, strColumn)
     GetLastRow = Cells(Rows.Count, Worksheets(strSheet).Range(strColumn & "1").Column).End(xlUp).Row
End Function
注意:这现在是一个函数。要查找Sheet1(例如“C”列)中最后使用的单元格,可以执行以下操作:

lastrowused = GetLastRow("Sheet1","C")

我怀疑最初的例程是从更多的事情开始的,可能它找到了最后一个单元格并对其做了一些处理,然后被精简为只检索最后一行,但没有考虑减少不必要的指令。

Google:vba参数vs参数MyRange不需要,只是让它变得丑陋而已。没有理由为列编号指定字符串。此外,它必须作为整型子TestVar1,而不仅仅是变量名。对于参数。正如您所说,MyRange不是必需的,您可以跳过它。作者可能是这样做的,因为使用变量的成本很低,并且使代码更具可读性。如果代码多次使用范围,则应始终使用变量,因为在查找时按名称/地址访问工作表和范围的成本很小。要使其真正发挥作用,子函数基本上是一个查找给定工作表和列的最后一行的例程。作者选择将其作为字符串而不是对象本身提供。如果没有提供工作表和列,例程将不知道要为哪个工作表和列生成结果。参数以完全相同的方式传递给子对象,其原因与传递给函数时完全相同:提供执行例程的上下文。唯一真正的区别是,函数应该返回一个值,子函数只需要“执行”操作。您还可以将操作简化为GetLastRow=CellsRows.Count,strColumn.EndxlUp.Row,因为WorksheetsstrSheet.RangestrColumn&1.Column将返回strColumn已经引用的列。