Пользовательская форма VBA: ошибка приложения или объекта - PullRequest
0 голосов
/ 13 декабря 2018

Я скопировал код, который хорошо работал в модуле VBA, в UserForm, поскольку мне нужно объединить некоторые действия, определенные в пользовательской форме.Теперь я застрял при выполнении следующей части с сообщением об ошибке «Ошибка приложения или объекта»

Sub test()
    Dim Myworkbook As workbook
    Dim Myid As Variant

    Set Myworkbook = ThisWorkbook

    Myid=1

    Myref=FinRef(Myworkbook, "Ref", Myid)
End Sub

    Function FinRef(myfile As Workbook, InputSheet As String, Ref_ID As Variant) 

        Dim I, k, LinkFrom, Description As Integer
        Dim Linkdescrip As String

        FinRef = ""

        LinkFrom = 1           
        Description = 8             
        Linkdescrip = 7             
        For I = 2 To 3000
            k = myfile.Sheets(InputSheet).Cells(I, LinkFrom)

            If k = Ref_ID Then
                FinRef = FinRef & myfile.Sheets(InputSheet).Cells(I, Linkdescrip) & myfile.Sheets(InputSheet).Cells(I, Description)
            End If
        Next I

    End Function

Хотя есть много людей, испытывающих ту же проблему, я не смог найти решениеподходит для меня.Любые советы?

Спасибо большое!

1 Ответ

0 голосов
/ 13 декабря 2018

Как сказал Джон - ваш опубликованный код не приводит к сообщаемой вами ошибке.

Я думаю, что проблема с вашим кодом:
Dim Linkdescrip As String должно быть Dim Linkdescrip As Long.

Превратился в рабочий код:
?thisworkbook.Worksheets("Ref").cells(2,"7") возвращает вашу ошибку.
?thisworkbook.Worksheets("Ref").cells(2,7) возвращает значение из диапазона G2.


Сказав это, ядумаю, я вижу, что вы ищете:
Столбец A листа Ref заполнен числами, вы хотите найти в этом столбце определенное число, и, если он найден, найти значения из столбцов G & H в этом ряду.

Этот код найдет числовое значение 1 в столбце A листа с именем Ref в книге, содержащей код (ThisWorkbook).Затем он вернет значения из столбцов G:H этой строки или вернет пустую строку.

Sub Test()

    Dim MyRef As String

    MyRef = FinRef(ThisWorkbook.Worksheets("Ref"), 1)

End Sub

Public Function FinRef(InputSheet As Worksheet, Ref_ID As Long) As String

    Dim rFound As Range

    With InputSheet
        Set rFound = .Columns(1).Find( _
            What:=Ref_ID, After:=.Cells(1, 1), _
            LookIn:=xlValues, LookAt:=xlWhole, _
            SearchOrder:=xlByRows, SearchDirection:=xlNext)

        If Not rFound Is Nothing Then
            FinRef = rFound.Offset(, 6) & rFound.Offset(, 7)
        End If

    End With

End Function
...