FUNCAO P/ VBA
Peguei esse exemplo no forum ,alguem saberia como adaptar essa função para VBA?
'OBJETIVO
'Demonstrar como utilizar ComboBox com a propriedade Style = 2 (Dropdow List)
'permitindo que o usuário localize itens digitando uma string rapidamente com
'o foco neste controle
Option Explicit
'API utilizada para otimizar o desempenho
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const CB_ERR = -1 'Parà ¢metro da API
Public Const CB_FINDSTRING = &H14C 'Parà ¢metro da API
Public Const CLR_TIME As Double = 0.3 'Tempo entre digitos antes de limpar MEMO_STR
Dim LAST_TYPE As Double 'Tempo do último dÃgito
Dim MEMO_STR As String 'String válida na consulta
'Declarei combo como uma Combobox, mas poderia ser uma Listbos
'O retorno da função sempre será 0, _
como devemos sempre cancelar o keyascii escreve-se desta _
forma numa linha só as 2 tarefas
'OBJETIVO
'Demonstrar como utilizar ComboBox com a propriedade Style = 2 (Dropdow List)
'permitindo que o usuário localize itens digitando uma string rapidamente com
'o foco neste controle
Option Explicit
'API utilizada para otimizar o desempenho
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const CB_ERR = -1 'Parà ¢metro da API
Public Const CB_FINDSTRING = &H14C 'Parà ¢metro da API
Public Const CLR_TIME As Double = 0.3 'Tempo entre digitos antes de limpar MEMO_STR
Dim LAST_TYPE As Double 'Tempo do último dÃgito
Dim MEMO_STR As String 'String válida na consulta
'Declarei combo como uma Combobox, mas poderia ser uma Listbos
Public Function ConsultaCombo(Combo As ComboBox, AsciiChar As Integer) As Integer
Dim s As String
Dim l As Long
'Esc char Não precisa executar nada além disto
If AsciiChar = 27 Then
MEMO_STR = ""
LAST_TYPE = Timer
Exit Function
End If
'Caso não encontre um item válido esta variável garante que se _
mantenha o anteriormente selecionado
s = MEMO_STR
'Testa o tempo entre a digitação e escolhe qual string passar para API
If Timer - LAST_TYPE > CLR_TIME Then
MEMO_STR = Chr(AsciiChar)
Else
MEMO_STR = MEMO_STR & Chr(AsciiChar)
End If
With Combo
'Deixemos a MS fazer o seu trabalho ....
l = SendMessage((.hWnd), CB_FINDSTRING, -1, ByVal MEMO_STR)
'Testamos o retorno e simplesmente aplicamos na propriedade ListIndex
'Em caso de erro (-1) Beep e retorna o valor antigo a nossa MEMO_STR
If l <> CB_ERR Then
.ListIndex = l
Else
Beep
MEMO_STR = s
End If
End With
'Guardar o momento deste digito
LAST_TYPE = Timer
End Function
'O retorno da função sempre será 0, _
como devemos sempre cancelar o keyascii escreve-se desta _
forma numa linha só as 2 tarefas
Private Sub Combo1X_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = ConsultaCombo(ActiveControl, KeyAscii)==> dá erro aqui!!
End Sub
huahuauha, fui eu quem enviei ...
vou ver o que faço !!!
vou ver o que faço !!!
Veja este Exemplo AUTOCOMPLETAR COMBO SEM API
Tópico encerrado , respostas não são mais permitidas