Usuário com melhor resposta
Erro tipos incompatíveis?

Pergunta
-
Ao chamar a função está dando esse erro.
Dim planilha As String
planilha = acharNomePlan1(Me, Me.lstResultados)
Aqui está o código da função:
Public Function acharNomePlan1(formulario As UserForm, controle As ListBox) As String Dim lst As ListBox Dim frm As UserForm Set lst = controle Set frm = formulario Dim nomePlan As String linItem = "" achou = 0 'If frm.lst.ListIndex >= 0 Then While achou <> 1 For i = Len(frm.lst.List(frm.lst.ListIndex)) To 1 Step -1 If Mid(frm.lst.List(frm.lst.ListIndex), i, 1) = "*" Then posAster = i achou = 1 Exit For End If Next i Wend linItem = Right(frm.lst.List(frm.lst.ListIndex), Len(frm.lst.List(frm.lst.ListIndex)) - posAster) nomePlan = "" achou = 0 'If frm.lst.ListIndex >= 0 Then While achou <> 1 For i = Len(frm.lst.List(frm.lst.ListIndex)) To 1 Step -1 If Mid(frm.lst.List(frm.lst.ListIndex), i, 1) = "%" Then posPerc = i achou = 1 Exit For End If Next i Wend For j = posPerc + 1 To posAster - 1 nomePlan = nomePlan & Mid(frm.lst.List(frm.lst.ListIndex), j, 1) Next j acharNomePlan1 = nomePlan End Function
Respostas
-
Altere a declaração do objeto listbox conforme abaixo.
Dim lst As MSForms.ListBox
Natan
- Marcado como Resposta Anderson F. Diniz domingo, 24 de agosto de 2014 19:43
Todas as Respostas
-
-
Altere a declaração do objeto listbox conforme abaixo.
Dim lst As MSForms.ListBox
Natan
- Marcado como Resposta Anderson F. Diniz domingo, 24 de agosto de 2014 19:43
-
-
-
-
-
certo, se for a nível didático blz de fazer assim... mas se quiser algo pronto pra identificar onde está um asterisco basta utilizar a função instr()
Dim strTexto As String strTexto = "adsf*asd" i = InStr(strTexto, "*") Debug.Print i
aí você faz assim....
posAster = InStr(strTexto, "*") if posAster > 0 then achou = 1 end if
Natan
- Editado 'Natan Silva domingo, 24 de agosto de 2014 14:53
-
Anderson,
Não é pra você ter problema em identificar os objetos já que na chamada da função você está referenciado eles....
Só pra exemplificar:
Coloque isso dentro de um módulo....
Em um commandbuttom chame a função.... e verifique o resultado na janela de verificação imediata...
Public Function acharNomePlan1(formulario As UserForm, controle As MSForms.ListBox) As String For i = 0 To controle.ListCount - 1 Debug.Print controle.List(i) Next i End Function
Natan
-
-
-
Exatamente,
e em cada formulário você fará a chamada da função, informando qual listbox será verificado...
Além do mais, nem precisa ter o form como um parâmetro da função, já que não existe outra finalidade para ele.
Public Function acharNomePlan1(controle As MSForms.ListBox) As String For i = 0 To controle.ListCount - 1 Debug.Print controle.List(i) Next i End Function
Natan