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

Ajuda VB (muito dificil)

Discussão em 'Programação' iniciada por zemar, 25 de Outubro de 2008. (Respostas: 12; Visualizações: 1956)

  1. zemar

    zemar Power Member

    Boas! será que alguem pode dar uma ajuda no meu primeiro "programa" em VB ?:009:

    Tenho uma frame com uma textbox (textbox1). Nesta textbox eu pretendo que o utilizador introduza numeros entre 5 e 20 (>5 e <20) inteiros!

    Código:
    Private Sub TextBox1_Change()
     
    numero1 = Val(TextBox11.Text)
     
    If numero1 < 5 Or numero11 > 20 Then
    Beep
    TextBox1.Text = ""
    End If
     
    End Sub
    
    o meu problema é que quando tento introduzir valores na textbox1 esta só aceita os numeros 5, 6, 7, 8 e 9 :005:

    alem disto pretendo que o cursor passe para a textbox2 apenas quando o numero da textbox1 esta entre 5 e 20!!

    bom eu sei que isto é programação ao mais alto nivel, :lol:mas espero que alguem me possa dar uma ajudinha :003:

    thxxx
     
    Última edição pelo moderador: 25 de Outubro de 2008
  2. alfinete

    alfinete Power Member

    eu criei 2 caixas txt1 e txt2

    muito simples tens um evernto key press para a tua caixa para so aceitar numeros
    Código:
     Private Sub txt1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt1.KeyPress
    
            If (e.KeyChar >= "!" And e.KeyChar <= "/") Or _
                    (e.KeyChar >= ":" And e.KeyChar <= "~") Then
                e.Handled = True
            End If
    
        End Sub
    e outra para ao escolheres entre o numero que queres parassar logo para a outra caixa

    Código:
        Private Sub txt1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt1.TextChanged
    
            If (Val(txt1.Text) >= 5 And Val(txt1.Text) <= 20) Then
                Me.txt2.Focus()
            End If
    
    
        End Sub
    espero que ajude
     
  3. zemar

    zemar Power Member

    alfinete!

    este codigo funciona tambem no Visual Basic do Excel

    é que esta frame é para um programa de excel

    ja tentei colocar o código mas n funciona!

    mais uma ajudinha ....pls
     
  4. alfinete

    alfinete Power Member

    Isso em vb6 funciona perfeitamente

    agra em excel ja não sei
     
  5. alfinete

    alfinete Power Member

    MAS PROCURA SE EXISTE o evnto do botão key press e text change, depois é so pores o code que esta dentro dessas funções
     
  6. zemar

    zemar Power Member

    existe o txt_keypress e o txt_change

    mas o codigo que está dentro dos procedimentos n funciona!


    :sad:



    fico à espera de mais umas dicas de algum expert em visualbasic do excel

    thxx
     
  7. alfinete

    alfinete Power Member

    vai ao google e poe vb text_keypress, e text change

    basicamente o que faz o key press, é so para aceitar o que queres, numeros , letras, numeros e letras, ou apenas algunas caracteres.

    o change é quando o que esta escrito esta certo em relação ao que queres ele fas o que tu dizes

    espero que tenha ajudado
     
  8. zemar

    zemar Power Member

    o pior é que n consigo pôr a aceitar só numeros superiores a 5 e inferiores a 20 no txt_change:005::005::005:
     
  9. alfinete

    alfinete Power Member

    para o change é so isto

    Código:
    
    Private Sub Txt1_Change()
      If (Val(Txt1.Text) >= 5 And Val(Txt1.Text) <= 20) Then
                txt2.SetFocus
            End If
    
    End Sub
    
    nada mais simples
     
  10. alfinete

    alfinete Power Member

    tens aqui um keypress que funciona quase bem

    Código:
    Private Sub Txt1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    
    
     
       If ((KeyAscii >= 0 And KeyAscii < 48) Or (KeyAscii > 57)) Then
    
               Txt1.Text = ""
            
       End If
    
    End Sub

    tens aqui a tabela de code ascii

    http://pt.wikipedia.org/wiki/ASCII

    o que tens em "Glifo" , é o caracter que queres

    em "decimal"é o que pões em frente ao KeyAscii

    espero que ajude
     
  11. alfinete

    alfinete Power Member

    se n conseguiste eu consegui

    criei duas caixas num form excel (txt1 e txt2)


    Código:
    
    
     ' na 1ª posicao da string digitada cancelar o 3 e 4 pois si são aceites apertir do 5
     If ((Txt1.TextLength = 1 And (Val(Txt1.Text) = 3 or Val(Txt1.Text) = 3 Or Val(Txt1.Text) = 4))) Then
     
     Txt1.Text = ""
     
     
     End If
     
     ' caso o texto tenha 2 digitos testa se o digito é maior que 20
     If ((Txt1.TextLength = 2 And Val(Txt1.Text) > 20)) Then
     
     Txt1.Text = ""
     
     
     End If
     
      ' poe a 2 caixa activa quando num digitado entre 5 e 20
      If (Val(Txt1.Text) >= 5 And Val(Txt1.Text) <= 20) Then
                txt2.SetFocus
               
      End If
          
    
    End Sub
    
    Private Sub Txt1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'so aceita digitos
      
       Select Case KeyAscii
            Case Asc("0") To Asc("99")
            Case Asc(".")
            If InStr(1, TextBox1.Text, ".") > 0 Then
            KeyAscii = 0
            End If
       Case Else
       KeyAscii = 0
    End Select
    
    esta anti bala... lol
    so aceite na primeira caixa de texto digitos

    e numeros entre 5 e 20 apenas

    na 1 posicao da strimg desta text so aceita 1,2,5,6,7,8,9(som com 1 e 2 pode digitar mais digitos em frente , caso contratio apaga a string); no caso do 2 so aceita 0 a frente, caso ocntrario apaga string.

    espero que sirva

    lol
     
  12. zemar

    zemar Power Member

    obrigado alfinete!


    com a tua ajuda ja resolvi esse problema! :x2:

    mas agora ja estou com outro....

    quais são as funções que fazem arredondamentos de numeros no VB do excell ?

    eu utilizei o ROUND... mas se fizer ROUND (10,5) o arredondamento dá 10 e deveria dar 11 !!!!!!!!!! >(>(>(

    vida de "programador" é duro! :rolleyes:

    alguem me pode dar uma ajudinha?

    obrigado a todos
     
  13. ribeiro55

    ribeiro55 Power Member

    Se bem me lembro do VB6, o método Round aceita dois argumentos com 1 "overload":

    Round(Valor,Casas Decimais)
    Round(Valor)

    Ao alimentares a função com 10,5 estás na realidade a pedir:
    "Arredonda-me o número 10 com até 5 casas decimais possíveis"

    O que deves chamar é algo deste género (e atenção, não tenho o VB6 para te confirmar isto lá):

    Round(10.5) = 11

    ou

    Round(10.5,0) = 11

    Ainda que julgue que isso não te arredonde para 11. Acho que o VB6 tinha uns graneis com alguns datatypes. Mas enfim, se usares 10.51 já te arredonda de certeza para 11 :rolleyes:

    O importante é que percebas a diferença da vírgula e do ponto nos argumentos de um método.
     
    Última edição: 27 de Novembro de 2008

Partilhar esta Página