Excel VBA问题,尝试使宏工作时出现专用函数错误
按下宏时,会出现编译错误:参数数目错误或属性赋值无效。我终于让它稍微工作64位,但现在遇到了这个问题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
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表格并没有保存任何输入的信息,每个人都一直以空白形式发送,即使他们花了时间来填写。我想知道现在是什么原因造成的。。。谢谢大家迄今为止的帮助!