SUB-ROTINA EXECUTADA POR UMA FUNCAO

COBBY 15/01/2013 17:03:44
#417430
Boa tarde, Galera.

Sou novato neste grupo e preciso uma ajuda para resolver uma coisa de VBA.

Sei a principal diferença entre uma função e sub-rotinas. Funções retornam valores enquanto sub-rotinas não retornam nada.

Bom, vou colocar aqui o detalhes do que estou querendo fazer.....

Tenho essa sub-rotinas [Ô]btnGeral_Click[Ô]

Private Sub btnGeral_Click()

Dim wsql As String
Dim wdb As Database

Set wdb = CurrentDb

Texto84.SetFocus
Texto84 = [Ô][Ô]
Texto84 = Time

wsql = [Ô]delete * from RotasSem [Ô]
wdb.Execute (wsql)

wsql = [Ô]delete * from RotasNGN[Ô]
wdb.Execute (wsql)

Call CarregaUMG
Call CarregaHIG

Texto65 = [Ô]FIM[Ô]

Texto85.SetFocus
Texto85 = [Ô][Ô]
Texto85 = Time
End Sub

..................
Dentro dela, faz chamada de outras sub-rotinas como [Ô]CarregaUMG[Ô]

Sub CarregaUMG()
On Error GoTo Fimerro

Dim MyString As String
Dim wsql As String
Dim wdb As Database
Dim wrs As Recordset
Dim wRs1 As Recordset
Dim wi As Integer
Dim wPos As Integer
Dim wBusca As Variant
Dim wPosVirgula As Integer
Dim wPosInicial As Integer
Dim wColuna As Integer
Dim wLinha As Long
Dim K As Double
Dim wDado As Variant
Dim wA As Double
Dim dat As Variant
Dim dt2 As Variant
Dim dt6 As Variant
Dim per As Variant
Dim per1 As Variant
Dim reg As String
Dim per2 As Variant
Dim per3 As Variant

Texto55.SetFocus
dat = VBA.Format(Texto55, [Ô]DD/MM/YYYY[Ô])
dt2 = Left(dat, 2) & [Ô]/[Ô] & Mid(dat, 4, 2) & [Ô]/[Ô] & Mid(dat, 7, 4)
dt6 = DateValue(dt2) + 6

Texto48.SetFocus
Texto48 = [Ô][Ô]
Texto48 = [Ô]Executando[Ô]

Set wdb = CurrentDb

wsql = [Ô]DELETE CaminhoUMG.Nome [Ô] & _
[Ô]FROM CaminhoUMG;[Ô]
wdb.Execute (wsql)

Set wrs = wdb.OpenRecordset([Ô]CaminhoUMG[Ô])

Do While Len(reg)
wrs.AddNew
wrs(0) = reg
wrs.Update
reg = Dir
Loop

wsql = [Ô]SELECT * from RotasNGN[Ô]
Set wrs = wdb.OpenRecordset(wsql)

wsql = [Ô]SELECT * From CaminhoUMG[Ô]
Set wRs1 = wdb.OpenRecordset(wsql)

Do While Not wRs1.EOF
per = wRs1!Nome
per3 = Mid(per, 14, 2) & [Ô]/[Ô] & Mid(per, 11, 2) & [Ô]/[Ô] & Mid(per, 6, 4)
If DateValue(per3) < DateValue(dt2) Or DateValue(per3) > DateValue(dt6) Then
wRs1.Delete
End If
wRs1.MoveNext
Loop
wRs1.MoveFirst

Do While Not wRs1.EOF
per = wRs1!Nome
per1 = Left(per, 20)
per2 = Left(per, 4)

Texto48 = Left(per, 15) & [Ô] - [Ô] & CStr(wLinha)

Do While Not EOF(1)
VBA.DoEvents
Line Input #1, MyString
If wLinha = 0 Then
Line Input #1, MyString
End If
wLinha = wLinha + 1
wColuna = 2
wPosInicial = 1
wPosVirgula = InStr(wPosInicial, MyString, [Ô],[Ô])
If wPosVirgula <> 0 Then
With wrs
If (InStr(MyString, [Ô]ITCP_RN2_[Ô])) <> 1 Then

.AddNew
!Bilhetador = per2
Do While wPosVirgula <> 0
wColuna = wColuna + 1
wDado = Trim(Mid(MyString, wPosInicial, wPosVirgula - wPosInicial))
If wColuna = 3 And wDado = [Ô]X[Ô] Then
Exit Do
ElseIf wColuna = 52 And _
Not IsNull(wDado) Then
Exit Do
Else
.Fields(wColuna - 1) = IIf(Len(wDado) = 0, Null, IIf((wColuna > 4 And wColuna < 10) Or wColuna > 12, (Val(wDado)), wDado))
wPosInicial = wPosVirgula + 1
wPosVirgula = InStr(wPosInicial, MyString, [Ô],[Ô])
If wPosVirgula = 0 Then
wColuna = wColuna + 1
wDado = Mid(MyString, wPosInicial)
.Fields(wColuna - 1) = IIf(Len(wDado) = 0, Null, IIf((wColuna > 4 And wColuna < 10) Or wColuna > 12, (Val(wDado)), wDado))
End If
End If
Loop
If wDado = [Ô]X[Ô] Or wColuna = 22 Then
Else
.Update
End If
End If
End With
End If
K = wLinha / 1000
If K = Int(K) Then
Texto48 = Left(per, 15) & [Ô] - [Ô] & CStr(wLinha)
End If
Loop
Close #1
wRs1.MoveNext
Loop
wrs.Close
wRs1.Close
Texto48 = [Ô]OK[Ô]
Exit Sub
Fimerro:
Resume Next
End Sub

O que eu queria agora fazer é criar uma função que aparte dela eu possa executar a sub-rotina principal que é [Ô]btnGeral_Click[Ô]. Pois vou chamar essa funçao dentro de um macro.

Alguém poderia me ajudar se tem alguma forma de eu fazer isso?
KERPLUNK 15/01/2013 18:37:17
#417437
Você pode simplesmente executar btnGeral_Click
O fato de essa rotina ser acionada de um botão, não impede que ela seja executada de qualquer outro local.
FILMAN 15/01/2013 22:03:16
#417449
Concordo
Citação:

Você pode simplesmente executar btnGeral_Click
O fato de essa rotina ser acionada de um botão, não impede que ela seja executada de qualquer outro local.



Só ressaltando Funções retorna valores e SubRotinas não!!

Não necessariamente!!

Funções podem ser executadas sem um retorno de valor e um sub rotina pode retornar valor por passagem de parametros!!
COBBY 16/01/2013 09:11:49
#417464

Citação:

:
Você pode simplesmente executar btnGeral_Click
O fato de essa rotina ser acionada de um botão, não impede que ela seja executada de qualquer outro local.



Kerplunk e Filman,

Obrigado pela resposta,
mas não é possível executar uma rotina dentro de um macro, somente função que é possível colocando no AÇÃO [Ô]ExecutarCódigo[Ô] do macro. Hoje aciono este botão tudo funciona sem problema, mas ao invés que ficar clicando no botar, quero fazer isso automatico acionado [Ô]btnGeral_Click[Ô] de uma função ou um script, onde farei um agendamento sem precisar clicando no botão toda hora.
FILMAN 16/01/2013 12:41:52
#417491
Cara você quer acionar o Click do Botão sem clicar nele, é isso? Através de uma função executada pela macro?

Nos mostre como esta sua planilha para clarear mais as ideias !!

COBBY 16/01/2013 14:04:59
#417498
Filman,

Sim, quero acionar a rotina que criei vinculado ao botão sem clicar nele.
Como não posso executar uma rotina através de macro, ao invés disso quero usar uma função que de repente possa acionar [Ô] se eh que existe como eu chamar uma rotina através de uma função[Ô] a rotina.

Não tenho nenhuma planilha, estou fazendo isso em access. Depois de todos criterios que gero algumas planilhas em excel.
FILMAN 17/01/2013 09:34:32
#417601
Segue um exemplo muito simples de como fazer isso

Ai é só você adaptar
COBBY 17/01/2013 11:02:28
#417613
Obrigado pela disponibiidade.

Mas, não vi nenhuma função no código. Você está usando rotina para acionar o botão principal que é Acionar_Botao?
FILMAN 17/01/2013 12:59:11
#417627
caro COBBY isso é somente um Exemplo de como ira funcionar !!

Ou seja dentro de um módulo você cria suas macros!!
Dentro de cada USERFORM você vai criar suas funções ou procedimentos nesse exemplo que te passei criei um procedimento Public Sub Acionar_Botão()

dentro desse procedimento ou sub-rotinas como queira dizer esta chamando o botão do USERFORM CommandButtom1_Click

Dentro do Botão esta chamando uma outra sub-torina que captura os valores da primeira ABA na sua Pasta de Trabalho e calculando os juros conforme disposto em planilha!!

Já na Aba(Plan1) coloquei um Texto acionar botão e esse Texto chama a macro clickBotao

Onde não esta o que você quer?
COBBY 17/01/2013 17:58:06
#417656
Filman,

Eu não me expressei bem.......que pergunta se está usando uma função uma rotina, pois eu queria usar uma função.
Mesmo assim, fiz os testes aqui eu não deu certo.

Valeu
FILMAN 17/01/2013 23:58:27
#417665
Usei sub rotinas, mas vc pode usar funções !!

é só trocar!!!
Faça seu login para responder