none
Erro tipos incompatíveis? RRS feed

  • 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
    

    sábado, 23 de agosto de 2014 15:01

Respostas

Todas as Respostas

  • Anderson,

    cria um ponto de interrupção, e acompanha passo a passo o código, pode ser que o erro não esteja na chamada da função, mas sim dentro dela.

    fica mais fácil de identificar o problema.


    Natan

    domingo, 24 de agosto de 2014 03:40
  • Altere a declaração do objeto listbox conforme abaixo.

    Dim lst As MSForms.ListBox


    Natan

    domingo, 24 de agosto de 2014 11:58
  • Tire o objeto frm do trecho...


            For i = Len(lst.List(lst.ListIndex)) To 1 Step -1
            
                If Mid(lst.List(lst.ListIndex), i, 1) = "*" Then
                    
                    posAster = i
                   
                    achou = 1
                
                    Exit For
                
                End If
            
            Next i


    Natan

    domingo, 24 de agosto de 2014 14:02
  • O parâmetro continua, você só não precisa deixar ele no laço...

    Natan

    domingo, 24 de agosto de 2014 14:15
  • pressione Ctrl + Pause Break que ele para....

    vou ver aqui....


    Natan

    domingo, 24 de agosto de 2014 14:27
  • Explica a lógica o laço pra ver se ter como fazer um mais amarrado.

    Natan

    domingo, 24 de agosto de 2014 14:29
  • 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


    domingo, 24 de agosto de 2014 14:50
  • 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

    domingo, 24 de agosto de 2014 15:29
  • não precisa, pois na chamada da função ele já faz isso.

    Natan

    domingo, 24 de agosto de 2014 15:57
  • Anderson,

    não entendo o porquê você quer informar o "frm",  já que o controle já está amarrado ao formulário...

    quando você fizer a chamada de outro form, a função identificará que é outro objeto.



    Natan

    domingo, 24 de agosto de 2014 18:50
  • 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

    domingo, 24 de agosto de 2014 19:23