Использование VBA для поиска диапазона и возврата значений строки в пользовательскую форму - PullRequest
0 голосов
/ 28 апреля 2018

Я использую пользовательскую форму (BoaterChecklist) для ввода данных в таблицу Excel, и я ищу, чтобы добавить функцию для поиска по уникальному идентификатору (PermitNumber) в столбце C, чтобы получить строку соответствующего идентификатора для обновления и редактирования этих данных. , У меня проблемы с загрузкой найденной строки обратно в форму пользователя. Я считаю, что мой код находит правильную ячейку идентификатора в столбце C, но не делает ее активной. Независимо от того, какая ячейка выбрана на листе, это данные строки, загружаемые в пользовательскую форму, а не найденная ячейка.

Я не уверен, где реализовать «ActiveCell.Value», чтобы вернуть правильные значения строки для найденного идентификатора. Любая помощь будет принята с благодарностью!

Private Sub SearchForm_Click()
Dim str as String
Dim rgFound as Range

if Permitnumber.text = "" then
msg box "enter a permit number"
exit sub
end if

with worksheets("sheet1")
 str = PermitNumber.Value
 Set rgFound = .Range("c2:c3000").Find(what:=str)
 if rgFound is Nothing then       
 msgbox "permit not found"
else
DateBox.Text = Cells(ActiveCell.row, 1)
TimeBox.Text = Format(cells(ActiveCell.Row, 2), "hh:mm:ss")
PermitNumber.Text = Cells (ActiveCell.Row, 3)
VesselName.Text = Cells (ActiveCell.Row, 4)
 'ect...

end if
end with 
end sub

Спасибо!

1 Ответ

0 голосов
/ 28 апреля 2018

Как предложено, используйте диапазон found в качестве эталона


Option Explicit

Private Sub SearchForm_Click()
    Dim str As String, found As Range

    If PermitNumber.Text = vbNullString Then
        MsgBox "Enter a permit number"
        Exit Sub
    End If

    With Worksheets("Sheet1")
        str = PermitNumber.Value
        Set found = .UsedRange.Find(What:=str)

        If found Is Nothing Then
            MsgBox "Permit not found"
        Else
            DateBox.Text = .Cells(found.Row, 1).Value
            TimeBox.Text = Format(.Cells(found.Row, 2), "hh:mm:ss")
            PermitNumber.Text = .Cells(found.Row, 3)
            VesselName.Text = .Cells(found.Row, 4)
            'ect...
        End If
    End With
End Sub

.

Для более точного контроля при поиске укажите параметры, которые не должны использовать значения по умолчанию

Range.Find - Параметры метода

Required Parameter --------------------------------------------------------------------

What:= - Value to search for (string or any Excel data type)
       - If What:="" is used, it will return Nothing (no cell found)
       - If What:="*" is used, it will return first non empty cell
Optional Parameters -------------------------------------------------------------------

After:=           - Starts search after (single) cell specified: After:=Cells(1)
                  - It excludes the specified cell, so it starts on Cells(2)
                  - It defaults to upper-left corner of the searched Range
                  - To move to the next found value after the first use:
                    - After:=Cells(1).Offset(1) along with
                    - SearchOrder:=xlByRows or xlByColumns

LookIn:=          - Formulas, Values, Comments. Defaults to Formulas

LookAt:=          - xlWhole or xlPart. If not specified it defaults to xlPart

SearchOrder:=     - xlByRows or xlByColumns. Defaults to xlByRows

SearchDirection:= - xlNext or xlPrevious. Defaults to xlNext

MatchCase:=       - True (search is case sensitive). Default to False

MatchByte:=       - Used only for double-byte language support
                  - True to have double-byte chars match only double-byte chars
                  - False to have double-byte chars match their single-byte equiv

SearchFormat:=    - Searches Font and/or cell formatting. Defaults to False



 * LookIn, LookAt, SearchOrder, and MatchByte are saved each time you use this method

** Not specifying these parameters, it will use the previous search settings
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...