Почему я получаю ошибку несоответствия типов аргументов ByRef, даже если мои данные имеют правильный тип переменной? - PullRequest
0 голосов
/ 30 апреля 2018

Я работаю над кодом, который в определенных ситуациях создает новый лист, содержащий две кнопки. Одна кнопка отображает пользовательскую форму и задает пользователю несколько вопросов для форматирования вновь созданного листа. Затем пользователь вводит данные в появившиеся таблицы и, наконец, нажимает вторую кнопку «Выполнить».

Кнопка «Выполнить» просто берет все входные данные и выполняет некоторые вычисления с использованием Sub, называемого 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?

EDIT:

Я немного подкорректировал код:

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. Если кто-то может знать почему, я ' буду признателен.

...