2015-12-15 2 views
0

Я пытаюсь создать пользовательскую форму в VBA, которая будет искать список на другом листе и отображать все соответствующие результаты, также возможно, чтобы эти данные отображались по умолчанию, сужается по значению окна поиска?Код для поиска с помощью VBA Userform

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

Затем вам может потребоваться выбрать один из результатов, чтобы отобразить его в определенной папке в рабочей книге (столбец один результат в одной ячейке, второй столбец рядом с ним).

Я совершенно не знаком с пользовательскими формами, поэтому задача довольно сложная, я даже не уверен, как активировать форму с листа.

Любая обратная связь будет оценена, я прокомментирую любой полезный код, который я нахожу в Интернете.

ответ

0

Осуществленные большинство из того, что я был после того, как со следующим:

Private Sub SearchButton_Click() 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
Application.Calculation = xlCalculationManual 

    On Error GoTo ErrorHandler 

    Workbooks("Form1.xlsm").Worksheets("Employees").Visible = True 

    ActiveWorkbook.Sheets("Employees").Activate 
    Employee = EmployeeName.Value 
    lastrow = Range("A" & Rows.Count).End(xlUp).Row 
    ActiveSheet.Range("$A$2:$C$" & lastrow).AutoFilter Field:=1, Criteria1:= _ 
     "=*" & Employee & "*", Operator:=xlAnd 

    Workbooks("Form1.xlsm").Worksheets("Temp").Visible = xlSheetVisible 
    Workbooks("Form1.xlsm").Worksheets("Temp").Range("A1:AFD1000000").ClearContents 

    'validation to stop the form breaking if a nane is searched that doesnt exist 
    Range("A1000000").Select 
    Selection.End(xlUp).Select 
    If ActiveCell.Value = "KeyID" Then GoTo validationend 

    'Take the data that has been filtered by employee name and store it in a temp worksheet 
    Range("A2").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Copy 
    Workbooks("Form1.xlsm").Worksheets("Temp").Activate 
    Range("A1").Select 
    ActiveSheet.Paste 

    'Delete any data that is irrelevant at this stage 
    Range("D:D").Delete Shift:=xlToLeft 
    Range("E:E").Delete Shift:=xlToLeft 
    Range("G:AZ").Delete Shift:=xlToLeft 
    lastrow = Range("A" & Rows.Count).End(xlUp).Row 

    Dim rngName As Range 
    Dim ws As Worksheet 
    Dim i As Integer 

    Set ws = Worksheets("Temp") 
    For i = 1 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Step 1 
     If ws.Cells(i, 1).Value <> vbNullString Then Me.ListBox.AddItem ws.Cells(i, 1).Value 
    Next i 

validationend: 
    Workbooks("Form1.xlsm").Worksheets("Form").Activate 

    'Workbooks("Form1.xlsm").Worksheets("Temp").Visible = xlSheetVeryHidden 

    'Workbooks("Form1.xlsm").Worksheets("Employees").Visible = xlSheetVeryHidden 

    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
    Application.Calculation = xlCalculationAutomatic 

    Exit Sub 

ErrorHandler: 
    MsgBox ("Error: Name not found. Please check your spelling and try again.") 

    Workbooks("Form1.xlsm").Worksheets("Form").Activate 

    'Workbooks("Form1.xlsm").Worksheets("Temp").Visible = xlSheetVeryHidden 

    'Workbooks("Form1.xlsm").Worksheets("Employees").Visible = xlSheetVeryHidden 

    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
    Application.Calculation = xlCalculationAutomatic 
End Sub 

Не работает отлично, так что если вы хотите больше ответов, я буду задавать соответствующие вопросы в ближайшее время.

Смежные вопросы