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或卸载它即可。这就解决了问题

您需要指出哪些限制和假设适用。有关如何回答的更多详细信息,请参见此链接:您需要说明适用的限制和假设。有关如何回答的更多详细信息,请参见此链接: