excel - VBA 问题,尝试让我的宏工作时出现私有(private)函数错误

标签 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
    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() As String .
基本上@JohnColeman 评论的所有内容。
如何解决这个我不知道。
该代码确实类似于我在下面发布的代码,它返回系统用户名。
将第一行放在模块顶部并删除PtrSafe如果不是在 64 位上。

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"

关于excel - VBA 问题,尝试让我的宏工作时出现私有(private)函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63025509/

相关文章:

windows - 将脚本字典保存在内存中,VBA

excel - VBA提取字符串中的所有字段名

excel - 如何在Excel VBA中编写具有多个条件的OR语句

excel - 在 VBA Excel 2010 中选择事件行和第一行

sql-server - 使用 SQL Server 中的 Excel VBA 在新行中显示数据

vba - 简单的 vba 代码给我运行时错误 91 对象变量或未设置 block

Python-类型错误 : 'Cell' object is not iterable

excel - 如何循环遍历从第二列添加值的列?

regex - 如何编写正则表达式来填充给定文件类型的列表以排除某些文件夹

vba - 重命名文件夹 vba 中的文件