none
chamando uma Function, e que volte/return o valor para a sub que chamou. RRS feed

  • Pergunta

  • Sub msgUltimaLinha()
        Dim uLinha As Integer
        Call ultimaLinha
        MsgBox uLinha
    End Sub
    
    Public Function ultimaLinha()
        Dim uLinha As Integer
        uLinha = Cells(Rows.Count, 1).End(xlUp).Row
    End Sub

     

    Ai no caso a Function ultimaLinha obtem um valor da ultima célula e armazena em uLinha, e quando voltar para a sub msgUltimaLinha deveria o valor estar ali. Pela janela de variáveis locais vejo que dentro de msgUltimaLinha a uLinha esta sem valor.

    Acredito que seja algum coisa com variável local ou global, mas tentei usar Return e não é possível. (parece que documentação esta desatualizada, pois leio por ai exemplos que não define tipo das variáveis e usa return e funciona, mas aqui tenho sempre que definir variáveis se não tenho mensagem de erro avisando que nao foi definida)

    Uso o office 365 Personal



    domingo, 15 de outubro de 2017 18:02

Respostas

  • Option Explicit
    
    Sub msgUltimaLinha()
        Dim uLinha As Long
        uLinha = ultimaLinha
       ' Call ultimaLinha
        MsgBox uLinha
    End Sub
    
    Public Function ultimaLinha() As Long
        
        ultimaLinha = Cells(Rows.Count, 1).End(xlUp).Row
    End Function


    Anderson Diniz


    domingo, 15 de outubro de 2017 18:15

Todas as Respostas

  • Option Explicit
    
    Sub msgUltimaLinha()
        Dim uLinha As Long
        uLinha = ultimaLinha
       ' Call ultimaLinha
        MsgBox uLinha
    End Sub
    
    Public Function ultimaLinha() As Long
        
        ultimaLinha = Cells(Rows.Count, 1).End(xlUp).Row
    End Function


    Anderson Diniz


    domingo, 15 de outubro de 2017 18:15
  • Favor marcar como respondido.

    Anderson Diniz

    domingo, 15 de outubro de 2017 18:16
  • Option Explicit
    Public uLinha As Integer
    
    Sub msgUltimaLinha()
    ''    Dim uLinha As Integer
        Call ultimaLinha
        MsgBox uLinha
    
    End Sub
    
    Sub ultimaLinha()
    ''    Dim uLinha As Integer
        uLinha = Cells(Rows.Count, 1).End(xlUp).Row
    
    End Sub
    

    Ou 

    Function ultimaLinha()
    ''    Dim uLinha As Integer
        uLinha = Cells(Rows.Count, 1).End(xlUp).Row
    End Function

    Mas acredito que funciona pois deixei a variável uLinha Globalmente publica.

    Para ter uLinha, podendo ser chamada tipo um função. uLinha() - eu precisaria criar ela como uma Public Shared Function uLinha() - tendo um Return do numero de linhas encontrado?

    domingo, 15 de outubro de 2017 18:40
  • Não entendi

    Anderson Diniz

    domingo, 15 de outubro de 2017 18:43
  • Option Explicit
    
    Sub msgUltimaLinha()
        Dim uLinha As Long
        uLinha = ultimaLinha
       ' Call ultimaLinha
        MsgBox uLinha
    End Sub
    
    Public Function ultimaLinha() As Long
        
        ultimaLinha = Cells(Rows.Count, 1).End(xlUp).Row
    End Function

    Se usar 

     uLinha = ultimaLinha
     uLinha = ultimaLinha()

    Ambas funciona, mas queria que fosse sempre chamado 

    uLinha = ultimaLinha()

    Quando não precisa passar argumentos, pois quando precisa passar argumentos vai ser preciso o uso de ()

    domingo, 15 de outubro de 2017 18:48
  • Continuo não entendendo

    Anderson Diniz

    domingo, 15 de outubro de 2017 19:08