为什么即使我的输入是正确的变量类型,我也会得到ByRef参数类型不匹配错误?

时间:2018-04-30 20:57:03

标签: vba excel-vba compiler-errors type-mismatch excel

我正在编写一个代码,在某些情况下,会创建一个包含两个按钮的新工作表。一个按钮使UserForm出现并向用户询问几个问题以格式化新创建的工作表。然后,用户将数据输入到现在出现的表中,最后单击名为“Execute”的第二个按钮。

“执行”按钮只是获取所有输入数据,并使用名为MathCode(ws As Worksheet)的Sub进行一些计算,但当我将其他地方称为Call Mathcode (Sec_Delay)时,我得到 ByRef参数类型不匹配编译错误:

ByRef argument type mismatch

工作表Sec_Delay在稍后在OLEObject中调用之前已初始化:

ElseIf Range("B1") = 3 And Range("S1") = 0 And Range("R1") = 1 Then
Set Sec_Delay = ThisWorkbook.Sheets.Add(, Pri_Delay)
Sec_Delay.Name = "Secondary Drive Timing Delay2"
    With Sec_Delay.Range("A2:S35")
        Pri_Delay.Range("A2:S35").Copy
        .PasteSpecial Paste:=xlPasteColumnWidths
        .PasteSpecial Paste:=xlPasteFormats
        Application.CutCopyMode = False
    End With

Dim obj2 As Object
Dim Code2 As String

    With Sec_Delay

        Set obj = .OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
                                Link:=False, DisplayAsIcon:=False, Left:=279, _
                                Top:=210.75, Width:=109.5, Height:=24)
        obj.Name = "ButtonTest"
        obj.Object.Caption = "USER INPUT"

        Code = "Sub ButtonTest_Click()" & vbCrLf & _
            "UF_input.Show" & vbCrLf & _
            "End Sub"


        Set obj2 = .OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
                                Link:=False, DisplayAsIcon:=False, Left:=277.5, _
                                Top:=236.25, Width:=111, Height:=24)
        obj2.Name = "ExecuteTest"
        obj2.Object.Caption = "Execute"

        Code2 = "Sub ExecuteTest_Click()" & vbCrLf & _
            "Call MathCode (Sec_Delay)" & vbCrLf & _
            "End Sub"


        With .Parent.VBProject.VBComponents(.CodeName).CodeModule
            .insertlines .countoflines + 1, Code
            .insertlines .countoflines + 1, Code2
        End With
    End With

知道我为什么会收到ByRef错误吗?

编辑:

我将代码调整为:

Code2 = "Sub ExecuteTest_Click()" & vbCrLf & _
            "Dim Sec_Delay as Worksheet" & vbCrLf & _
            "Set Sec_Delay = ActiveSheet" & vbCrLf & _
            "MathCode Sec_Delay" & vbCrLf & _
            "End Sub"

我不再收到ByRef错误,但MathCode会返回一堆零,甚至从工作表Pri_Delay复制一些数据,而不是使用Sec_Delay.中的数据。如果有人我可能知道原因,我很感激。

0 个答案:

没有答案