Excel VBA问题,尝试使宏工作时出现专用函数错误

Excel VBA问题,尝试使宏工作时出现专用函数错误,excel,vba,Excel,Vba,按下宏时,会出现编译错误:参数数目错误或属性赋值无效。我终于让它稍微工作64位,但现在遇到了这个问题 Private Function getUser() As String Dim strUser As String 'Create a buffer strUser = String(100, Chr(0)) 'Get the username getUser strUser, 100 'strip the rest of the buffer

按下宏时,会出现编译错误:参数数目错误或属性赋值无效。我终于让它稍微工作64位,但现在遇到了这个问题

Private Function getUser() As String
    Dim strUser As String

    'Create a buffer
    strUser = String(100, Chr(0))
    'Get the username
    getUser strUser, 100
    'strip the rest of the buffer
    strUser = Left(strUser, InStr(strUser, Chr(0)) - 1)
    getUser = strUser
End Function
这是另一个包含getUser的

On Error Resume Next

Set MyOL = GetObject(, "Outlook.Application")
If MyOL Is Nothing Then
    Set MyOL = CreateObject("Outlook.Application")
End If
strUser = getUser
Application.DisplayAlerts = False
ThisWorkbook.SaveAs "C:\Documents and Settings\" & strUser & "\Local Settings\Temp\" & " " & staffname & " - OT Survey for " & ActiveSheet.name & ".xlsm"
Application.DisplayAlerts = True

您的代码是由
getUser strUser,100
引起的
它递归地调用自身(即,它在名为
getuser
的函数中),并尝试向函数传递两个参数,而函数头不要求它们作为字符串
Private function getuser()
基本上是@JohnColeman评论的所有内容

我不知道如何解决这个问题

该代码与我在下面发布的代码类似,返回系统用户名。
将第一行放在模块顶部,如果不是64位,则删除
PtrSafe

Private Declare PtrSafe Function api_GetUserName Lib "advapi32.dll" _
        Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Function getUser() As String
    On Error Resume Next

    Dim NBuffer As String
    Dim Buffsize As Long
    Dim Wok As Long

    Buffsize = 256
    NBuffer = Space$(Buffsize)

    Wok = api_GetUserName(NBuffer, Buffsize)
    getUser = Trim$(NBuffer)

    On Error GoTo 0
End Function
这么说-您使用用户名的
SaveAs
正在查找临时文件夹-您的
ENVIRON(“temp”)
会在那里工作吗

ThisWorkbook.SaveAs Environ("Temp") & "\ " & staffname & " - OT Survey for " & ActiveSheet.Name & ".xlsm"

您想做什么?在名为
getUser
的函数定义中,
getUser strUser,100
应该是什么意思?你们有同名的潜艇吗?如果是这样,那真的没有意义。在ExcelVBA中,我从未见过创建字符串缓冲区并逐字读取数据(确切地说是从哪里开始的?)的类似C的习惯用法。VBA确实有一个很少使用的
Get
语句,但该函数需要一个文件句柄。此功能不明确。因此,我们有一个加班表,当填写并单击“发送”宏时,它将自动向我们办公室的高级经理发送电子邮件。然而,自从我们有了新电脑,它就根本不能正常工作。这实际上是我之前的另一个人做的,所以我不知道getUser strUser,100应该是什么意思。似乎有一个函数或两个变量的子函数叫做
getUser
,这在一个同名函数的定义中是没有意义的,它不带参数。事实上,这是一个编译错误,与32位与64位以及您的计算机是否是新的完全无关。“如何修复这个问题我不知道”:——您对一个似乎无法回答的问题给出了一个很好的答案。因此,我所做的半解决问题是删除getUser strUser,100行,提交按钮现在可以工作了!然而,它应该保存的excel表格并没有保存任何输入的信息,每个人都一直以空白形式发送,即使他们花了时间来填写。我想知道现在是什么原因造成的。。。谢谢大家迄今为止的帮助!