Excel Visual Basic for Applications(VBA)编译错误:过程声明与具有相同名称的事件或过程的描述不匹配
我在尝试从函数返回和调用值时出现上述错误;以下是我的源代码:Excel Visual Basic for Applications(VBA)编译错误:过程声明与具有相同名称的事件或过程的描述不匹配,excel,vba,compiler-errors,Excel,Vba,Compiler Errors,我在尝试从函数返回和调用值时出现上述错误;以下是我的源代码: Private Function Fence_Change() Contents = Fence.Text Range("D4:ZZ4").Clear Range("D5:ZZ5").Clear Output = "" For Counter = 1 To Len(Contents) Cells(4, Counter + 3) = Mid(Contents, Counter, 1) Outp
Private Function Fence_Change()
Contents = Fence.Text
Range("D4:ZZ4").Clear
Range("D5:ZZ5").Clear
Output = ""
For Counter = 1 To Len(Contents)
Cells(4, Counter + 3) = Mid(Contents, Counter, 1)
Output = Output + Mid(Contents, Counter, 1)
Counter = Counter + 1
Next Counter
For Counter = 2 To Len(Contents)
Cells(5, Counter + 3) = Mid(Contents, Counter, 1)
Output = Output + Mid(Contents, Counter, 1)
Counter = Counter + 1
Next Counter
Fence_Change = Output
End Function
Private Sub Fence_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Output1 = Fence_Change()
MsgBox (Output1)
End Sub
使用VBA IDE for Office(Excel)2016。
我见过许多其他人有类似的问题,但似乎仍然无法解决,有人能帮助解决这个问题吗?
如果知道我已经以相同的方式返回并调用了另一个函数,并且没有任何错误,则可能会很有用:
Private Function Difficulty_Select()
Set List = New Collection
Select Case Difficulty
Case "Easy"
DifficultyInt = 10
DifficultyOption = "Easy"
Case "Medium"
DifficultyInt = 25
DifficultyOption = "Medium"
Case "Hard"
DifficultyInt = 50
DifficultyOption = "Hard"
End Select
List.Add DifficultyInt
List.Add DifficultyOption
Set Difficulty_Select = List
End Function
Private Sub CommandButton1_Click()
MsgBox ("Hello, welcome to a quiz")
Name = InputBox("What is your name?")
Sheets("All results").Unprotect
Score = 0
Set List1 = Difficulty_Select()
...
假设
Fence
是一个控件,它已经有一个Change
事件,它是一个子事件,而不是一个函数。您不能使用相同的名称创建自己的函数,即使您实际上没有取消内置的更改
事件。假设围栏
是一个控件,它已经有一个更改
事件,它是一个子事件,而不是一个函数。你不能用相同的名字创建你自己的函数,即使你实际上没有击沉内置的Change
事件。正如Rory建议的那样,Fence
看起来像是一个控件,所以Fence\u Change
是Change
事件的处理程序,应该是一个Sub
过程
您可以尝试重新组织代码,以便Fence\u Change
事件和Fence\u DblClick
事件调用公共函数,如下所示:
Private Sub Fence_Change()
GetOutput Fence.Text
End Sub
Private Sub Fence_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Output1 = GetOutput(Fence.Text)
MsgBox Output1
End Sub
'This is the new helper function
Private Function GetOutput(contents As String) as String
Range("D4:ZZ4").Clear
Range("D5:ZZ5").Clear
Output = ""
For Counter = 1 To Len(Contents)
Cells(4, Counter + 3) = Mid(Contents, Counter, 1)
Output = Output + Mid(Contents, Counter, 1)
Counter = Counter + 1
Next Counter
For Counter = 2 To Len(Contents)
Cells(5, Counter + 3) = Mid(Contents, Counter, 1)
Output = Output + Mid(Contents, Counter, 1)
Counter = Counter + 1
Next Counter
GetOutput = Output
End Function
正如Rory所建议的,Fence
看起来像是一个控件
,因此Fence\u Change
是Change
事件的处理程序,应该是一个子过程
您可以尝试重新组织代码,以便Fence\u Change
事件和Fence\u DblClick
事件调用公共函数,如下所示:
Private Sub Fence_Change()
GetOutput Fence.Text
End Sub
Private Sub Fence_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Output1 = GetOutput(Fence.Text)
MsgBox Output1
End Sub
'This is the new helper function
Private Function GetOutput(contents As String) as String
Range("D4:ZZ4").Clear
Range("D5:ZZ5").Clear
Output = ""
For Counter = 1 To Len(Contents)
Cells(4, Counter + 3) = Mid(Contents, Counter, 1)
Output = Output + Mid(Contents, Counter, 1)
Counter = Counter + 1
Next Counter
For Counter = 2 To Len(Contents)
Cells(5, Counter + 3) = Mid(Contents, Counter, 1)
Output = Output + Mid(Contents, Counter, 1)
Counter = Counter + 1
Next Counter
GetOutput = Output
End Function
如果是带有service pack 1的windows 7旗舰版。只需删除service pack或卸载它即可。这就解决了问题 如果是带有service pack 1的windows 7旗舰版。只需删除service pack或卸载它即可。这就解决了问题 您需要指出哪些限制和假设适用。有关如何回答的更多详细信息,请参见此链接:您需要说明适用的限制和假设。有关如何回答的更多详细信息,请参见此链接: