2016-07-10 3 views
1

Мой первый вопрос здесь Я пытаюсь добавить пользовательское поле поиска в ленте Excel. Моя проблема с обычным исследованием: его диапазон по умолчанию - это« этот рабочий лист », тогда как Я бы хотел, чтобы вся рабочая тетрадь (или даже другие известные книги). Поэтому я создал поле редактирования в ленте. Я использую «onChange» для проверки ввода и запуска моего пользовательского исследования. Но я бы предпочел, чтобы это было срабатывает только тогда, когда я нажимаю клавишу «Ввод» на моей клавиатуре или фокусируюсь на другой кнопке ленты (кнопка «поиск», которая вызовет исследование sub с моим значением поля редактирования и будет активирована при нажатии «Возврат», пока фокус все еще включен. editbox.Получите значение editbox на «Return in Excel ribbon with VBA

Другая проблема заключается в том, что le aving поле также запускает sub (onChange активируется при выходе); это не вызывает событие, если editbox не был изменен; и я не могу поймать действие «Ввести нажатие».

Есть ли способы решить то, что я пытаюсь сделать? Если нет, существует ли способ вызвать функцию поиска на языке с диапазоном «рабочая книга» в качестве диапазона по умолчанию, а не «этот рабочий лист»?

Благодарим за помощь.

JP

+1

Я предлагаю вам использовать обратный вызов 'onChange' блока редактирования, чтобы просто сохранить текст в переменной. Затем обратитесь к этой переменной в обратном вызове 'onAction' вашей кнопки. – Rory

+0

@Rory Спасибо за ваш ответ. Не совсем то, что я хотел, но наверняка это замечательное решение. Благодаря ! – JeeP

ответ

1

То, что я сделал в конце концов (я просто нужно сканировать первый столбец):

  • EditBox в ленте Wich обновляет переменную, диапазон мой модуль.

  • кнопка «Перейти» в ленте, которая запускает исследование строки, хранящейся в переменной.

Код я использовал (наверняка, что это просто, но может помочь другим новичкам, такие как я):

Private nomPatientRecherche As String 


Public Sub RecherchePatient(control As IRibbonControl) 

Dim feuille As Worksheet, zone As Range, cellule As Range 

For Each feuille In ThisWorkbook.Worksheets 
    feuille.Activate 
    Set zone = feuille.Range("A2:A" & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row) 
    For Each cellule In zone 
     If Not cellule.Find(nomPatientRecherche) Is Nothing Then 
      cellule.Activate 
      If Not MsgBox("Continuer ?", vbOKCancel, "Continuer ?") = vbOK Then 
       Exit Sub 
      End If 

     End If 

    Next cellule 
Next feuille 

End Sub 


Public Sub DefineNomPatientRecherche(control As IRibbonControl, nom As String) 
    nomPatientRecherche = nom 
End Sub 

Еще раз спасибо @Rory за помощь