1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Erro em VB

Discussão em 'Programação' iniciada por goncalocard, 17 de Dezembro de 2008. (Respostas: 14; Visualizações: 654)

  1. goncalocard

    goncalocard Power Member

    Quando tento correr o programa dá-me este erro: Cannot define a public user-defined type within a private object module. Como resolvo isto? :S
     
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Achas que só com essa mensagem alguém te saberá esclarecer?

    A única coisa que sei é: tens uma coisa qualquer a ser declarada no sítio errado. Se quiseres saber mais alguma coisa, mostra a porção de código que originou esse problema e em como está o teu projecto organizado (que módulos, classes, forms, etc).
     
  3. Devil_Angel100

    Devil_Angel100 Power Member

    ou então eliminou alguma coisa que não devia
     
  4. ribeiro55

    ribeiro55 Power Member

    Parece-me que tens uma variável PUBLIC dentro de uma classe PRIVATE. Verifica todas as declarações nas tuas classes para a descobrires, e aplicar correctamente as defenições.

    Se quiseres resolver isso rápido, correndo o risco de lixar encapsulamentos e / ou hierarquias que tenhas para aí, se as tiveres, passa a classe que está PRIVATE para PUBLIC.
     
  5. goncalocard

    goncalocard Power Member

    Código:
    Type Pessoa
    nome As String * 20
    idade As Integer
    End Type
    Dim A() As Pessoa
    Dim i, indx As Integer
    
     
    Última edição pelo moderador: 17 de Dezembro de 2008
  6. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Isso está onde? Numa classe? Num módulo? Num form?
     
  7. goncalocard

    goncalocard Power Member

    Num form. Só estou a usar um form neste programa.
     
  8. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Aí está o problema. Troca Type por Private Type (Private Type Pessoa) e Dim por Private (Private i, indx As Integer).
    Já agora, nesta última linha, tens
    Código:
    Dim i, indx As Integer
    
    Sabes que não estás a declarar a variável i como sendo do tipo Integer, certo? Só a indx. Tens de trocar isso para
    Código:
    Private i As Integer, indx As Integer
    
    Assim é que está certo.
     
    Última edição: 17 de Dezembro de 2008
  9. goncalocard

    goncalocard Power Member

    Obrigado :D
     
  10. goncalocard

    goncalocard Power Member

    Estou aqui com um pequeno problema neste programa, quando eu clico no botao "cmdintro"
    ele só executo o seu bloco de código quando eu clico a quarta vez no botão, alguém sabe como faço para só precisar de clicar uma vez?


    Código:
    Private Type Pessoa
        nome As String * 20
        idade As Integer
    End Type
    Dim A() As Pessoa
    Dim i As Integer, indx As Integer
    Dim c As Integer
    Private Sub Form_Load()
    c = 4
    ReDim A(3)
    For i = 1 To 3
        A(i).nome = InputBox("Introduza o nome da " & i & " ª pessoa")
        A(i).idade = InputBox("Introduza a idade da " & i & " ª pessoa")
        List1.AddItem i & " ª pessoa: Nome: " & A(i).nome & "Idade: " & A(i).idade
    Next
    End Sub
    Private Sub cmdintro_Click()
    indx = indx + 1
    ReDim A(indx)
    For i = c To indx
        A(i).nome = InputBox("Introduza o nome da " & i & " ª pessoa")
        A(i).idade = InputBox("Introduza a idade da " & i & " ª pessoa")
        List1.AddItem i & " ª pessoa: Nome:" & A(i).nome & "Idade: " & A(i).idade
        c = i + 1
    Next
    End Sub
    
    
     
  11. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Código:
    For i = c To indx
    c está definido como sendo 4. indx está declarado mas não definido, logo, tem o valor 0.
    Quando executas a primeira vez, c=4, indx=1, A tem um elemento, For i = 4 To 1 não é executado;
    Segunda vez, c=4, indx=2, A tem 2 elemtnos, For i = 4 To 2 não é executado;
    Terceira vez, c=4, indx=3, #A=3, For i = 4 To 3 não é executado;
    Quarta vez, c=4, indx=4, #A=4, For i = 4 To 4 é executado.

    Aqui estou a explicar o que se passa, mas é contigo pensar em como resolver ;)

    p.s.: isto saltou-me à vista: para redimensionares uma array sem perderes o conteúdo que tinha antes, usa o ReDim Preserve ;)
     
    Última edição: 20 de Dezembro de 2008
  12. goncalocard

    goncalocard Power Member

    Ah ok , já percebi, Obrigadão :D
     
  13. goncalocard

    goncalocard Power Member

    Mais uma vez preciso que me ajudem a perceber uma coisa neste programa. Porque as médias me dão sempre 0? :S
    O calculo das médias está no botão 'cmdcalc'


    Código:
    Private Type artigo
        nome As String * 20
        prex As Single
        stock As Long
    End Type
    Dim dados() As artigo
    Dim indx, i, aux As Integer
    
    Private Sub cmdcalc_Click()
    Dim cont As Single
    Dim conta As Integer
        For i = 1 To indx
            cont = cont + dados(i).prex
            conta = conta + dados(i).stock
        Next
        lblmediaprex = cont
        lblmediastock = conta
        
    End Sub
    
    Private Sub cmdintro_Click()
        For i = aux To indx
            dados(i).nome = InputBox("Introduza o nome do artigo nº " & i)
            List1.AddItem dados(i).nome
            dados(i).prex = InputBox("Introduza o preço do artigo nº " & i)
            List2.AddItem dados(i).prex & " €"
            dados(i).stock = InputBox("Qual a quantidade em stock do artigo nº " & i)
            List3.AddItem dados(i).stock
        Next
    aux = aux + 1
    indx = indx + 1
    ReDim dados(indx)
    End Sub
    
    Private Sub Form_Load()
    indx = 1
    aux = 1
    ReDim dados(indx)
    End Sub
    
    Agradeço a ajuda.
     
  14. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Sabes...

    Depois não digas que ninguém te avisou ;)
    É precisamente aí que estás a ter o problema: no cmdIntro, o teu ReDim devia preservar a informação, coisa que não está a acontecer.
     
  15. goncalocard

    goncalocard Power Member

    :o , já nem me lembrava disso, obrigadão :D
     

Partilhar esta Página