按下宏时,会出现编译错误:参数数量错误或属性分配无效。我终于让它在 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/