Passar por parâmetr...
 
Notifications
Clear all

Passar por parâmetro aba desejada para realização de calculo

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

Como passar a Aba por parâmetro, esta dando erro ?
Tem como fazer isto aceito sugestão novos procedimentos.

Pois se conseguir passar por parâmetro, conseguirei utilizar o objeto: .Cells(i, 1).Value

Private Sub CommandButton1_Click()
    Dim objPlanilha As Worksheet
    Dim i As Integer   
    i = 1
    
    For Each objPlanilha In ThisWorkbook.Worksheets 'Enquanto tiver Aba passa para objPlanilha

        If Not InStr(objPlanilha.Name, "Relatório") > 0 Then 'Aqui se Aba não tiver no nome Relatório

            CalculaHorasPorDia (objPlanilha) 'Chamo a função, passando a Planilha que desejo realizar cálculos.

            i = i + 1
        End If
        
    Next
End Sub

'Quero que esta função receba qual Aba será feita o calculo

Function CalculaHorasPorDia(nomePlanilha As Worksheet)
    
    nomePlanilha.Cells(i, 1).Value = nomePlanilha.Name
    
End Function

Fico no aguardo :)

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

 
Postado : 10/09/2016 5:05 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Olá, Cyberlacs

Na verdade vc passou corretamente a planilha como parâmetro. O erro principal entretanto, é que vc definiu CalculaHorasPorDia como uma Function, mas da forma como vc a está usando, ela está desempenhando papel de uma Sub.

Lembre-se que uma Sub "faz alguma coisa" enquanto que uma Function "retorna algum valor/objeto". Então, simplificando, uma Function se usa do lado direito de uma igualdade, por exemplo, digamos X= CalculaHorasPorDia(objPlanilha), caso a Function retornasse algum valor, mas não é o que acontece.

Outro problema é o uso do contador i. Como vc não passou ele também como parâmetro, seu valor não fica disponível para sua rotina CalculaHorasPorDia. Então ou vc define i como uma variável pública na primeira procedure ou como variável global em nível de módulo ou, melhor ainda, passa ela também como parâmetro para a segunda rotina. Algo como:
Sub CalculaHorasPorDia(nomePlanilha As Worksheet, i as Integer). . . End Sub

e na hora de chamar:

CalculaHorasPorDia objPlanilha, i

Aconselho a sempre forçar o dimensionamento explícito de todas as variáveis para evitar erros assim. Para isso, na área de declarações do módulo, bem no início insira Option Explicit. É até bom deixar isso automático para cada novo módulo, indo em "Ferramentas">"Opções"> na guia "Editor" selecionar "Requerer declaração de variável".

Obs.: não analisei a funcionalidade do seu código, apenas o que poderia estar dando erro, ok?

 
Postado : 11/09/2016 12:16 am
DJunqueira
(@djunqueira)
Posts: 772
Prominent Member
 

Segue exemplo na sua planilha.

Se sua dúvida foi respondida marque o tópico como RESOLVIDO usando o botão com marca verde.

 
Postado : 11/09/2016 6:37 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

O velho amigo DJunqueira esta aqui ajudando, grande cara, parabéns pela ajuda meu amigo.
Nossa esta planilha que vc me passou, conhecimento profundo, kkkkkkkk.

Mas como estou com duvida de passagem de parâmetros, vou insistir na duvida kkkkkkkkkkkk

Amigo EdsonBR muito boa sua explicação, nossa estou muito contente de participar dos foruns de Excel, são todos ótimos profissionais que ajudam pra caramba.

EdsonBR ainda esta dando erro quando chamo a a Função Sub veja no arquivo meu em anexo.

Será que você pode verificar o erro no arquivo em anexo :)

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

 
Postado : 11/09/2016 7:52 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Prefiro utilizar conforme abaixo:

Private Sub CommandButton1_Click()
    Dim objPlanilha As Worksheet
    Dim i As Integer
    
    i = 1
    
    For Each objPlanilha In ThisWorkbook.Worksheets

        If Not InStr(objPlanilha.Name, "Relatório") > 0 Then
            CalculaHorasPorDia objPlanilha.Name, i
            i = i + 1
        End If
        
    Next
End Sub

Sub CalculaHorasPorDia(nomePlanilha As String, ByVal i As Integer)
Dim wr As Worksheet
Set wr = Sheets(nomePlanilha)
    MsgBox "voçe passou " & wr.Name & " numero " & i
    'Aqui me viro na codificação kkkkkkkk :)
    
End Sub

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

 
Postado : 11/09/2016 8:05 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Resolvido o problema, o bom agora é que vou continuando na caminha, sei que posso deletar Abas de Funcionários, Criar Abas, pois sabemos tem momentos que temos 1 funcionários e tem vezes que temos 1000 ai com esta maneira a planilha esta um pouco mais dinâmica.

Se eu pudesse dar um obrigado a todos eu daria, pois todos aqui participaram para a solução deste problema :)

Agradeço a todos :)

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

 
Postado : 11/09/2016 5:13 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ciberlacs

Se eu pudesse dar um obrigado a todos eu daria, pois todos aqui participaram para a solução deste problema

Mas é claro que pode, acesse o link para entender como funciona:

viewtopic.php?f=7&t=16757

[]s

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

 
Postado : 12/09/2016 9:23 am