Как переместить курсор на строку в листе на основе ввода в поле «Пользовательская форма»? - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь создать инструмент планирования для некоторых рабочих заданий, и у меня уже есть лист Excel, заполненный названиями этих заказов.Я хотел бы, чтобы пользователь открыл пользовательскую форму и ввел название заказа в текстовое поле, а курсор на листе переместился в строку, соответствующую этому порядку.Есть ли способ, которым я могу сделать это?

Я думал об использовании списка вместо этого, но хотел бы использовать текстовое поле, если это вообще возможно.

1 Ответ

0 голосов
/ 04 июня 2019

Использование пользовательской формы для отдельного поля кажется немного сложным, как насчет InputBox, что-то вроде этого:

Sub findOrder()

Dim ws As Worksheet: Set ws = ActiveWorkbook.Sheets("Sheet Name Here")
Dim lRow As Long: lRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'get last row at column A - assuming is populated

restartOrder:
Dim strOrder As String: strOrder = InputBox("Please input your order name", "Let's find the order")
Dim rngOrder As Range

Set rngOrder = ws.Range("A1:A" & lRow).Find(strOrder) 'Find the order, assuming they are in column A

If Not rngOrder Is Nothing Then '
    rngOrder.Select 'Select the order range
Else
    Dim answer As Integer: answer = MsgBox("Order wasn't found, want to try again?", vbYesNo + vbQuestion, "Not found")
    If answer = vbYes Then
        GoTo restartOrder 'restart the search
    End If
End If

End Sub

РЕДАКТИРОВАТЬ: добавлена ​​улучшенная обработка для порядка, не найденного.

EDIT2: добавьте опцию пользовательской формы ... добавьте CommandButton и TextBox к вашей пользовательской форме:

Private Sub CommandButton1_Click()
    findOrder TextBox1.Value
End Sub

Sub findOrder(strOrder As String)

Dim ws As Worksheet: Set ws = ActiveWorkbook.Sheets("Sheet Name Here")
Dim lRow As Long: lRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'get last row at column A - assuming is populated

restartOrder:
Dim rngOrder As Range

Set rngOrder = ws.Range("A1:A" & lRow).Find(strOrder) 'Find the order, assuming they are in column A

If Not rngOrder Is Nothing Then '
    rngOrder.Select 'Select the order range
Else
    Dim answer As Integer: answer = MsgBox("Order wasn't found, want to try again?", vbYesNo + vbQuestion, "Not found")
    If answer = vbYes Then
        Exit Sub
    Else
        Unload Me
    End If
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...