Vba microsoft word上的byref参数类型不匹配

Vba microsoft word上的byref参数类型不匹配,vba,ms-word,Vba,Ms Word,我已经尝试了与这个ByRef错误相关的一切,其他程序员提到我必须设置我创建的每个变量的值类型,其他人说要删除这些变量的类型 我真的需要一些帮助,因为这是我使用VB的第一天 下面代码的主要思想是制作一个小表单,单击后,word文档上的行将平滑地向下或向上滚动,当然他有能力增加/减少此移动的速度 以下是主要功能: Function GoDown(ByRef Speed As Integer, ByRef CounterUp As Integer, ByRef CounterDown As Integ

我已经尝试了与这个ByRef错误相关的一切,其他程序员提到我必须设置我创建的每个变量的值类型,其他人说要删除这些变量的类型

我真的需要一些帮助,因为这是我使用VB的第一天

下面代码的主要思想是制作一个小表单,单击后,word文档上的行将平滑地向下或向上滚动,当然他有能力增加/减少此移动的速度

以下是主要功能:

Function GoDown(ByRef Speed As Integer, ByRef CounterUp As Integer, ByRef CounterDown As Integer)

    CounterUp = 0
    CounterDown = 1
    Dim NumberOfPages As Integer
    Set NumberOfPages = ActiveDocument.ComputeStatistics(wdStatisticPages)
    Dim NumberOfLines As Range
    Set NumberOfLines = ActiveDocument.BuiltInDocumentProperties(wdPropertyLines)
    Dim Multiplicate As Integer
    Set Multiplicate = NumberOfPages * NumberOfLines
    Dim Counter As Integer
    Set Counter = 0
        While (Counter < Multiplicate):
            ActiveWindow.SmallScroll down:=1
            Counter = Counter + 1
            Call Application.Wait(Now + TimeValue("0:00:'&Speed&'"))
            Call ActiveWindow.Close
    Call Application.Quit

End Function

Function GoUp(ByRef Speed As Integer, ByRef CounterUp As Integer, ByRef CounterDown As Integer)

    Dim NumberOfLines As Range
    Set NumberOfLines = ActiveDocument.BuiltInDocumentProperties(wdPropertyLines)
    Set CounterUp = 1
    Set CounterDown = 0
    Dim Counter As Integer
    Set Counter = 0
        While (Counter < NumberOfLines):
            ActiveWindow.SmallScroll up:=1
            Counter = Counter + 1
          Call Application.Wait(Now + TimeValue("0:00:'&Speed&'"))

End Function

Function GoFaster(ByRef Speed As Integer, ByRef CounterUp As Integer, ByRef CounterDown As Integer)

    Speed = Speed - 1
    If (CounterUp > 0 & CounterDown = 0) Then
    Call Application.Run("btnUp_Click")
    Else: Call Application.Run("btnDown_Click")

End Function

Function GoSlower(ByRef Speed As Integer, ByRef CounterUp As Integer, ByRef CounterDown As Integer)

    Speed = Speed + 1
    If (CounterDown > 0 & CounterUp = 0) Then Call Application.Run("btnDown_Click")
    Else: If (CounterDown = 0 & CounterUp > 0) Then Call Application.Run("btnUp_Click")

End Function

正如您所看到的,我尝试了MSDN和此处提到的两种方法,但都没有解决我的“ByRef参数类型不匹配”问题。

您可以这样调用sub:

GoDown Speed, CounterUp, CounterDown
或使用函数:

x = GoDown(Speed, CounterUp, CounterDown)
在所附的示例中,主sub中嵌套了sub。它不能像这样工作,任何通过单击触发的过程都需要分开


不要使用整数,请始终使用Long,否则您将遇到数据超过整数限制(最大值为32767,最小值为-32768)的问题。

感谢所有试图帮助我解决问题的人以及未付报酬的哲学家。 无论如何。 任何时候您需要为多个事件或多个函数使用一个变量。 你必须:

`Public ThisVariable As String`
在这种形式的加载事件中:

FormName_Initialize()
{
ThisVariable = "The Starting value you want :)"
}

谢谢

函数应该返回一些内容。那么这里真的需要函数吗?如果是潜水艇,你可以像货仓速度一样呼叫,比如说,反击,反击。不过,是否需要ByRef取决于您是否在更大范围内使用更改的值。Call关键字已过时,因此此处不需要。您的代码充满了问题。除了Ryszard和QHarr引用的内容之外,您只能对对象使用Set,而不能对“简单”数据类型使用Set。我认为,在尝试如此复杂的VBA代码之前,您应该先从简单一点的代码开始。请参阅以及中有关堆栈溢出问题的网站指南。目前,您的代码无法运行,并且不会生成您引用的错误消息。它在第二行已经失败了。我投票结束这个话题:“寻求调试帮助的问题”(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整且可验证的示例。”其中每个
Wend
,而
?@Cindymister它确实解释了您需要的一切,是的,它从第二个开始就崩溃了“因为我提到了添加参数的两种方法,正如您在callDown中看到的,与其他方法不同”。关于期望的结果,我想我已经提到了,但也许你根本没有读过:“下面代码的主要思想是制作一个小表单,点击后,word文档上的行将平滑地向下或向上滚动,当然他有能力提高/降低移动的速度。”。这就是你通过否决某人的问题来帮助他的方式吗!!!!?
FormName_Initialize()
{
ThisVariable = "The Starting value you want :)"
}