Notifications
Clear all

Passar o Valor de inputbox para a função

6 Posts
2 Usuários
0 Reactions
1,578 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde Pessoal,

Estou cada dia mais aprendendo sobre VBA e recentemente comecei a tentar a fazer funções e gostaria de uma ajuda de vocês

Tenho uma planilha é exportada de uma ferramenta que transforma PDF em .XLS
porém ela vem com ponto no lugar de virgula e virgula no lugar do ponto porque o OCR não lê perfeitamente.

Cada documento pode vir com um numero de casas decimais diferente "00,00000000" ou "000,0000" ou "0,000000"

então o que pensei é que para consertar todo o documento de uma só vez fazer uma macro. o usuario informaria o numero de casas decimais depois da virgula em um inputbox ou em uma celula e a funçao seria mais ou menos a abaixo. Pórem eu não sei passar os valores ou de uma celula ou de um inputbox para dentro da função :(

Public Function ValorC(vpro As String, nCasaDepois As Long, nCasaAntes As Long) As String

nCasaAntes = Len(vpro) - nCasaDepois

    If Len(vpro) = 0 Or vpro = "" Then
        ValorC = ""
    ElseIf IsNumeric(vpro) = False Then
        ValorC = "FALSO"
    Else
        ValorC = CStr(Mid(vpro, 1, nCasaAntes)) & Chr(44) & CStr(Mid(vpro, nCasaDepois, nCasaDepois))
    End If
    
End Function

Aguardo a ajuda de vocês

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/09/2012 12:30 pm
(@tacito)
Posts: 67
Trusted Member
 

Olá, ptkreis.

Se eu entendi bem sua dúvida ela é simples.

Para inserir o valor de uma inputbox na função crie uma variável e use a seguinte linha:
"variável" = inputbox("Texto","Título","Default") -Sendo que "Default" é o valor que será exibido no campo de preenchimento ao ser aberta a inputbox.

Para usar o valor de uma célula você pode criar uma variável e usar o comando:
"variável" = Workbooks ("Nome_do_arquivo").worksheets("Nome_da_aba").cells("linha","coluna"),
ou usar o código:
Workbooks ("Nome_do_arquivo").worksheets("Nome_da_aba").cells("linha","coluna")
no local onde você quer que seja inserido o número.

Se eu tivesse desenvolvendo o código iria usar a variável apenas se o dado fosse necessário mais de uma vez, caso contrário,usaria o código diretamente.

OBS: A parte do comando Workbooks ("Nome_do_arquivo") pode ser omitida caso você não utilize outro arquivo excel na macro, ou esteja com o arquivo onde está a célula ativo. Já, caso você use mais de um arquivo, mas a célula em questão está no mesmo arquivo que você está salvando a macro você pode substituir por thisworkbook.
OBS 2: A mesma coisa acontece se estiver usano apenas uma aba do arquivo, ou a aba que estiver ativa for a aba que contenha a célula em questão você pode omitir esta parte do comando: worksheets("Nome_da_aba").

Abraços.

 
Postado : 20/09/2012 12:56 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Acho que não fui muito claro rs

Gostaria de saber como passo o valor da variavel pra dentro da Função

Imagine que tenho o codigo abaixo. Eu precisaria passar a função em uma coluna inteira. exemplo da Coluna D4 pra baixo. Porem ele sempre retorna #valor
Eu não consigo colocar o valor que atribui dentro da sub macro como o valor que ele tem que procurar na function ValorC

Sub entrada()
Dim nCasaDepois As Integer

'nCasaDepois = Application.InputBox("Entre com um numero", "Valor da Cota", , , , , , 1)
nCasaDepois = Range("A1").Value

End Sub

Public Function ValorC(vpro As Object) As String

    Dim nCasaAntes As Integer
    nCasaAantes = Len(vpro) - nCasaDepois

    If Len(vpro) = 0 Or vpro = "" Then
        ValorC = ""
    ElseIf IsNumeric(vpro) = False Then
        ValorC = "FALSO"
    Else
        ValorC = CStr(Mid(vpro, 1, nCasaAntes)) & Chr(44) & CStr(Mid(vpro, nCasaDepois, nCasaDepois))
    End If
    
End Function

a ideia é chamar a função com os valores indicados pelo usuário dentro de uma sub
ainda não sei se fui muito claro

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/09/2012 1:42 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

não consegui entender o que deseja com a função, disse que queria "corrigir" o documento todo, mas vai celula a celula?
Segue:

    Public Function ValorC(vpro As Object) As String
        Dim nCasaAntes As Integer
        nCasaDepois = Application.InputBox("Entre com um numero", "Valor da Cota", , , , , , 1) 'Range("A1").Value
        nCasaAantes = Len(vpro) - nCasaDepois
        If Len(vpro) = 0 Or vpro = "" Then
            ValorC = ""
        ElseIf IsNumeric(vpro) = False Then
            ValorC = "FALSO"
        Else
            ValorC = CStr(Mid(vpro, 1, nCasaAntes)) & Chr(44) & CStr(Mid(vpro, nCasaDepois, nCasaDepois))
        End If     
    End Function

onde irá ter o valor =ValorC(A1), ao dar o entre receberá o imput box entre com o valor

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/09/2012 2:04 pm
(@tacito)
Posts: 67
Trusted Member
 

Vamos ver se agora eu entendi, você quer que o usuário escolha a célula em uma macro e que, nesta mesma macro, o código use a informação fornecida pelo usuário para chamar a função. Se for isso acho que o código do Reinaldo resolve. Aí vai aparecer uma inputbox para cada célula que você verificar. Uma alteraçãoque poderia ser feita é a entrada de mais um parâmetro na função, assim o usuário poderia alimentar em uma célula o número de casas decimais que ele deseja. Aí o código ficaria assim:

Public Function ValorC(vpro As Object, nCasaDepois as Integer) As String
        Dim nCasaAntes As Integer
        nCasaAantes = Len(vpro) - nCasaDepois
        If Len(vpro) = 0 Or vpro = "" Then
            ValorC = ""
        ElseIf IsNumeric(vpro) = False Then
            ValorC = "FALSO"
        Else
            ValorC = CStr(Mid(vpro, 1, nCasaAntes)) & Chr(44) & CStr(Mid(vpro, nCasaDepois, nCasaDepois))
        End If     
    End Function

Neste caso a sua entrada quando fosse chamar a função em uma célula da função deve ser "=ValorC(célula com o valor recebido; célula com o número de casas decimais)".
Um valor recebido ou o número de casas decimais podem ser adicionados diretamente ao chamar a função, sem necessitar de usar uma célula como referência, mas, como você disse que são vários valores acho que será melhor usar células mesmo.

 
Postado : 20/09/2012 6:08 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

tacito é isso que precisava
valeu!

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/09/2012 7:28 pm