Este fórum foi descontinuado. LEIA AQUI e participe da Comunidade BABOO :)

Ir para conteúdo
John Player Special

Vba - duvida sobre variaveis

Mensagem Recomendada

olá, colegas. estou com uma dúvida.

 

declarei a seguinte variável em (Declaração)




Dim employee (25) As String

embaixo, a seguinte função

 

Sub TestaMatriz()
For n = 0 To 25
    employee (n )
Next n
For n = 0 To 25
    MsgBox employee(n)
End Sub

 

deu msg que 'n' nao estava definido.

Esta certo isso? precisaria definir n?

Apos definir n como inteiro, apareceu outra msg:

Erro de compilacao: Era esperado Sub, Function or Property

Se eu retirar a declaracao da variavel de dentro do Sub, e deixar soh em declaracao, aparece

Erro de compilacao: Era esperado procedimento, nao variavel

Sub TestaMatriz2()
For n = 0 To 25
    employee (n )
Next n
For n = 0 To 25
    Debug.Print employee(n)
    Next
End Sub

cada vez entendo menos

Editado por John Player Special

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu código falta atribuir valor ao elemento da matriz employee(n) = n

Sub TestaMatriz()
 Dim employee(1 To 5), n As Long
  For n = 1 To 5
   employee(n) = n
  Next n
  For n = 1 To 5
   MsgBox employee(n)
  Next n
End Sub

Sub TestaMatrizV2()
 Dim employee(), n As Long
  ReDim employee(1 To 5)
  For n = 1 To 5
   employee(n) = n
  Next n
  For n = 1 To 5
   MsgBox employee(n)
  Next n
End Sub

 


 

Osvaldo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, John Player Special
 

4 horas atrás, John Player Special disse:

...alguém pode me explicar pq o primeiro exemplo nao funciona? retirei de um livro de vba.

 

Em 15/03/2017 at 8:53 AM, John Player Special disse:

...deu msg que 'n' nao estava definido.

Esta certo isso? precisaria definir n?

1) Como você usou Option Explicit na área de Declaração, então sim, é necessário dimensionar a variável n antes, o que é sempre recomendado em qualquer código.

 

Em 15/03/2017 at 8:53 AM, John Player Special disse:

Sub TestaMatriz()
For n = 0 To 25
    employee (n )
Next n
...

End Sub

deu msg que 'n' nao estava definido.

Esta certo isso? precisaria definir n?

Apos definir n como inteiro, apareceu outra msg:

Erro de compilacao: Era esperado Sub, Function or Property

Se eu retirar a declaracao da variavel de dentro do Sub, e deixar soh em declaracao, aparece

Erro de compilacao: Era esperado procedimento, nao variavel

2) o que você pretende fazer com o employee(n) nessa linha dentro do For/Next?
  - Mostrar seu valor na Janela Imediata? Então deveria usar Debug.Print employee(n)
  - Atribuí-lo a uma outra variável? Então deveria usá-lo do lado direito de uma expressão: OutraVar = employee(n)
  - Atribuir a ele o conteúdo de outra variável? Então deveria usá-lo do lado esquerdo de uma expressão, como o colega Osvaldomp sugeriu: employee(n) = OutraVar
  - Entrar valores para a variável? Então poderia usar, por exemplo, employee(n) = InputBox("Digite o valor " & n & " de employee:")
  - Ídem para uso em estruturas de decisão, mostrar na tela, e por aí vai.

O que não dá é prá simplesmente deixá-lo solto na linha, pois ele não é uma instrução ou uma chamada a uma procedure e sim uma variável.

- Obs.: Um cuidado extra apenas é que você dimensionou a matriz employee com subscrito 25 mas logicamente haverão 26 elementos nela, e não 25, já que o 0 também conta. Caso queira de 1 a 25, poderia usar Dim employee(1 To 25) ou usar Option Base 1 na área de declarações.

3) Todo For tem que ter um Next correspondente e está faltando o Next de fechamento do segundo laço. Para nunca se perder, habitue-se a sempre que digitar em um código algum laço como For..Next, Do..Loop, If..ElseIf..End If, For Each..Next, e por aí afora, digite no mesmo instante a abertura e também o fechamento, depois vá inserindo os trechos do meio. Infelizmente o VBE só faz isso automaticamente para estruturas maiores (Sub..End Sub, Function..End Function, Property...).

 

Em 15/03/2017 at 8:53 AM, John Player Special disse:

Sub TestaMatriz2()
For n = 0 To 25
    employee (n )
Next n
For n = 0 To 25
    Debug.Print employee(n)
    Next
End Sub

4) Na subrotina TestaMatriz2() vide item 2 acima (variável "solta")

5) Não desanime com os erros, no começo da aprendizagem serão muitos mesmo, mas vale a pena!

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×
×
  • Criar Novo...