Vba 如何使函数返回一个值,立即用作调用脚本的一部分?

Vba 如何使函数返回一个值,立即用作调用脚本的一部分?,vba,ms-access,Vba,Ms Access,我想做一个函数,我可以围绕某些东西,并根据当前用户更改输出 假设有一个名为“av”的主用户。如果当前使用DB的人是“av”,那么我需要修改VBA代码以允许他获得更好的权限 Public Function masteruser(input_parm) If GetUser = "av" Then masteruser = "" Else masteruser = input_parm End Function 我计划像这样使用上述功能: Publ

我想做一个函数,我可以围绕某些东西,并根据当前用户更改输出

假设有一个名为“av”的主用户。如果当前使用DB的人是“av”,那么我需要修改VBA代码以允许他获得更好的权限

Public Function masteruser(input_parm)

   If GetUser = "av" Then

       masteruser = ""

   Else

       masteruser = input_parm

End Function
我计划像这样使用上述功能:

Public Sub blah_FormTimer()

   'rest of code

    masteruser(Application.Quit)

    'rest of code

End Sub
在上面的子部分中,如果当前用户是“av”,则将有效删除
应用程序.Quit
。如果没有,则代码将读取
应用程序。像正常情况一样退出


如何处理输入参数,使其像正常一样与VBA脚本的其余部分一起工作?

您可以先创建包装子/函数,因为
Application.Quit
是一个方法调用,而不是函数调用:

Public Sub QuitApplication()
    Application.Quit
End Sub
然后使用以下代码:

Public Function masteruser(input_parm As String)
   If GetUser = "av" Then
       masteruser = ""
   Else
       Application.Run input_parm
   End If
End Function
当然

Public Sub blah_FormTimer()

   'rest of code

    masteruser "QuitApplication"

    'rest of code

End Sub
当然,您可以创建一个函数,创建一个模块,创建一个包装子/函数,然后将传递给该函数的代码粘贴到该函数中并执行它,然后删除该模块,但我不建议这样做

您还可以专门为方法调用创建一个,这样就不需要为它们创建包装函数:

Public Function masterusermethod(objObject as object, strMethod As String)
   If GetUser = "av" Then
       masteruser = ""
   Else
       CallByName objObject, strMethod, VbMethod
   End If
End Function

(如果有人知道更有效的方法,我想知道)

我将如何使用您的第四个代码块
masterusermethod()
masterusermethod(应用程序,“退出”)
(首先是要将方法作为对象调用的对象,然后是作为字符串调用的方法)有什么方法可以使它更通用吗?我正在寻找几乎任何东西都可以包装的东西(子块中的所有代码、单个变量的声明/赋值等),也就是说,不一定只用于方法调用。我设想了一个
masteruser
函数,它允许我在必要时(即如果用户是“av”)直接清空部分代码,但如果没有必要,那么它应该像传递的参数不受此包装函数的影响一样工作,然后,您将动态创建一个模块,其中包含一个函数,然后运行一个函数。我可以(可能从未尝试过,但已经用VBA创建了模块)向您展示如何做到这一点,但它有严重的缺点,例如性能较低,并且需要对数据库进行独占锁定。代码仍然必须是字符串,并且您仍然无法访问本地变量。一种更合适的选择是使用GoTo语句,因为它们有点像您描述的那样。哦!你可能发现了什么!我从来没想过!!