vba中如何在一个function中 输入一个参数返回另一个参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vba中如何在一个function中 输入一个参数返回另一个参数相关的知识,希望对你有一定的参考价值。

如下面所列的sub,我希望function可以把RowNumber返回,谢谢指教

Sub Macro2()

Dim RowNumber As Integer
Dim SheetName As String

SheetName = Range("A3")
RowNumber = 找行数(SheetName)
End Sub

Function 找行数(ByVal SheetName As String) As Integer

Sheets(SheetName).Select
RowNumber = Cells.Find(What:="2013年", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Row
MsgBox RowNumber

End Function

1、首先打开excel在工具栏中找到开发工具,然后打开编辑页面,在页面上输入程序,如图所示,创建一个函数,也是比较方便的。直接使用function。

2、然后给函数命名,函数名后面的括号内部需要写上函数的参数,这里有参数可以写,没有参数也可以不写。以求和函数为例,写上两个参数。

3、下方定义函数的计算公式,将最终的输入结果通过弹出对话框的形式显示出来,使用msgbox比较方便。输入完成之后,点击运行。

4、在弹出来的对话框中可以看到整个表格中定义的函数,选择需要运行的函数,点击运行,如图所示。

5、这里可以看到在excel表格中,已经弹出msgbox,显示最终的计算结果,这就是定义的求和函数计算的结果。

参考技术A

调用是方法名(参数),通过方法名返回值信息

1、定义一个带参数的方法

Function Test(ByVal s as String)  '定义一个string类型的参数s
    Test = "返回值"       '返回一个字符串"返回值"
End Function

2、参数调用和值返回

Dim rtn '定义一个变量
rtn = Test("2");//传入参数2,返回值赋值给rtn

参考技术B Sub Macro2()

Dim RowNumber As Integer
Dim SheetName As String

SheetName = Range("A3")
RowNumber = 找行数(SheetName)
End Sub

Function 找行数(ByVal SheetName As String) As Long

Sheets(SheetName).Select
找行数 = Cells.Find(What:="2013年", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Row

End Function本回答被提问者和网友采纳

如何在 SQL Server 存储过程/函数中声明输入输出参数?

【中文标题】如何在 SQL Server 存储过程/函数中声明输入输出参数?【英文标题】:How To Declare Input-Output Parameters In SQL Server Stored Procedure/Function? 【发布时间】:2018-08-14 05:37:21 【问题描述】:

在甲骨文中,

我们可以像下面这样声明一个输入-输出参数(不仅仅是输入输出):

Create Or Replace Procedure USERTEST.SimpleInOutProcedure(
    p_InputInt Int,
    p_OutputInt out Int,
    p_InputOutputInt in out Int
) AS
BEGIN
    p_OutputInt := p_InputInt + 1;
    p_InputOutputInt := p_InputOutputInt + p_InputOutputInt;
END;

但是,当我尝试在 SQL Server 中声明时,脚本无法编译:

create procedure SimpleInOutProcedure 
    @p_InputInt int, @p_OutputInt int input output
As
Begin
    Select * from TestTableCommonA;
End

“输入”一词不是预期的,因此在 SQL Server Management Studio 中不是蓝色的:

我的脚本有什么问题,

我想这样做是因为我需要为 SQL Server DB 创建“等效”读取器,该读取器以前是为 Oracle DB 创建的,并且具有输入/输出参数的读取器。

【问题讨论】:

【参考方案1】:

这是 SQL 输入和输出参数的示例代码。

CREATE PROCEDURE [dbo].[sample_Insert]
@name varchar(500),
@entryby int,
@RetVal INT = 0 OUT

AS

SET NOCOUNT ON



INSERT INTO dbo.Master
        ( name ,
          entry_date ,
          entry_by
        )
VALUES  ( @name , -- service_name - varchar(1000)
          dbo.GetActDate() , -- entry_date - datetime
          @entryby  -- entry_by - int
        )




IF @@ERROR =  0
BEGIN
SET @RetVal = 1 -- 1 IS FOR SUCCESSFULLY EXECUTED
End
ELSE
BEGIN
SET @RetVal = 0 -- 0 WHEN AN ERROR HAS OCCURED
End

 set ANSI_NULLS ON
 set QUOTED_IDENTIFIER ON

【讨论】:

感谢您的示例!不过这并没有多大帮助,因为我想知道的是 SQL Server 中是否有等效的输入输出【参考方案2】:

如果您将参数声明为 OUTPUT,则它同时充当 Input 和 OUTPUT

CREATE PROCEDURE SimpleInOutProcedure 
(
    @p_InputInt  INT,
    @p_OutputInt INT OUTPUT
)
AS
BEGIN
    SELECT 
       @p_OutputInt = @p_OutputInt
END
GO

DECLARE @p_OutputInt int = 4
EXEC SimpleInOutProcedure @p_InputInt = 1, @p_OutputInt = @p_OutputInt OUTPUT
SELECT @p_OutputInt

【讨论】:

这也是我怀疑的......但是,是否有任何关于此的明确文档?因为我找不到关于此的明确文档,因为只要有可能,我不想错过任何等价物,尤其是在 both 输入-输出行为部分。 (虽然我不知道它会作为输入和输出,但我认为它会是要么输入或输出)。 我没有任何文档。但这看起来不需要详细的文档 好的,让我测试一下你的脚本 是的,@p_OutputInt 似乎既充当输入又充当输出。谢谢!

以上是关于vba中如何在一个function中 输入一个参数返回另一个参数的主要内容,如果未能解决你的问题,请参考以下文章

Excel / VBA代码忽略输入的参数

VBA-自定义函数和带参数的过程

Excel VBA - 用户定义函数 - 可变大小参数

vba excel怎么获取指定工作表的行数、列数

如何使用数组并在 MsgBox VBA 中显示它们

如何在 VBA 中调用带有列表和另一个参数的函数?