Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Error de compilacion. Variable no definida

Estas en el tema de Error de compilacion. Variable no definida en el foro de Visual Basic clásico en Foros del Web. Hola amigos! Seré breve porque una cuestión de restricción de caracteres. Estoy realizando un proyecto en Visual Basic (es mi 1º vez) y he tenido ...
  #1 (permalink)  
Antiguo 19/11/2009, 21:07
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años
Puntos: 0
Error de compilacion. Variable no definida

Hola amigos! Seré breve porque una cuestión de restricción de caracteres.
Estoy realizando un proyecto en Visual Basic (es mi 1º vez) y he tenido algunos inconvenientes como este que les contaré. Resulta que en un Form coloqué un código que sirve para 'autocompletar' un textbox mientras se escribe, buscando datos desde una base de datos Acces. El codigo para el autocompletado es el sig.:
Código:
Option Explicit

Dim CnN As New ADODB.Connection
Dim Rst As New ADODB.Recordset

Public Sub CnX()
On Local Error GoTo er
    With CnN
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & (CurDir(App.Path) & "\kiosco.mdb") & ";"
        .Open
    End With
Exit Sub
er:
    MsgBox "Error Numero " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, Err.Source
    End
End Sub
Private Sub Form_Load()
    Call abrir
    lst1.Height = 0: lst2.Height = 0
    CnX
End Sub

Private Sub lst1_Click()
    lst2.Selected(lst1.ListIndex) = True
End Sub

Private Sub lst1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyEscape Then
        lst1.Clear: lst1.Visible = False
        lst2.Clear: lst2.Visible = False
    End If
End Sub

Private Sub lst1_KeyPress(KeyAscii As Integer)
On Local Error Resume Next
    If KeyAscii = 13 Then
        Dim RstCod As New ADODB.Recordset
        With RstCod
            .Open "Select * From stock", CnN, adOpenDynamic, adLockOptimistic
            .Find "CODIGO='" & lst1.Text & "'"
            Text6.Text = .Fields(0)
            Text4.Text = .Fields(1)
            Text3.Text = .Fields(2)
            Combo1.Text = .Fields(5)
            .Close
            lst1.Visible = False
            lst2.Visible = False
        End With
    End If
End Sub

Private Sub lst2_Click()
    lst1.Selected(lst2.ListIndex) = True
End Sub

Private Sub lst2_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyEscape Then
        lst1.Clear: lst1.Visible = False
        lst2.Clear: lst2.Visible = False
    End If
End Sub

Private Sub Text6_Change()
On Local Error Resume Next
    Text6.Text = UCase(Text6.Text)
    Text6.SelStart = Len(Trim(Text6.Text))
    lst1.Clear
    lst2.Clear
    If Len(Trim(Text6.Text)) <= 0 Then
        lst1.Clear: lst2.Clear
        lst1.Visible = False: lst2.Visible = False
        Exit Sub
    Else
        With Rst
            .Open "Select * From stock", CnN, adOpenDynamic, adLockOptimistic
            Do While Not .EOF
                If Mid(.Fields(0), 1, Len(Text6)) = Mid(Text6, 1, Len(Text6)) Then
                    lst1.AddItem .Fields(0): lst2.AddItem .Fields(1)
                End If
                .MoveNext
            Loop
            .Close
        End With
        If lst1.ListCount > 0 Then
            If lst1.ListCount > 3 Then
                lst1.Height = lst1.ListCount * 200
                lst2.Height = lst2.ListCount * 200
                lst1.Visible = True: lst2.Visible = True
            Else
                lst1.Height = lst1.ListCount * 300
                lst2.Height = lst2.ListCount * 300
                lst1.Visible = True: lst2.Visible = True
            End If
        Else
            lst1.Visible = False
            lst2.Visible = False
        End If
    End If
End Sub

Private Sub Text6_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyEscape Then
        lst1.Clear: lst1.Visible = False
        lst2.Clear: lst2.Visible = False
    End If
End Sub

Private Sub Text6_KeyPress(KeyAscii As Integer)
On Local Error Resume Next
    If KeyAscii = 13 Then
        Dim RstCod As New ADODB.Recordset
        With RstCod
            .Open "Select * From stock", CnN, adOpenDynamic, adLockOptimistic
            .Find "CODIGO='" & Text6.Text & "'"
            Text6.Text = .Fields(0)
            Text4.Text = .Fields(1)
            Text3.Text = .Fields(2)
            Combo1.Text = .Fields(5)
            .Close
            lst1.Visible = False
            lst2.Visible = False
        End With
    End If
End Sub

Private Sub Text6_KeyUp(KeyCode As Integer, Shift As Integer)
    On Local Error Resume Next
    Select Case KeyCode
        Case vbKeyUp
            lst1.SetFocus
            lst1.ListIndex = lst1.ListIndex + 1
        Case vbKeyDown
            lst1.SetFocus
            lst1.ListIndex = lst1.ListIndex + 1
    End Select
End Sub

Private Sub lst2_KeyPress(KeyAscii As Integer)
On Local Error Resume Next
    If KeyAscii = 13 Then
        Dim RstPro As New ADODB.Recordset
        With RstPro
            .Open "Select * From stock", CnN, adOpenDynamic, adLockOptimistic
            .Find "detalle='" & lst2.Text & "'"
            Text6.Text = .Fields(0)
            Text4.Text = .Fields(1)
            Text3.Text = .Fields(2)
            Combo1.Text = .Fields(5)
            .Close
            lst1.Visible = False
            lst2.Visible = False
        End With
    End If
End Sub

Private Sub Text4_Change()
On Local Error Resume Next
    Text4.Text = UCase(Trim(Text4.Text))
    Text4.SelStart = Len(Trim(Text4.Text))
    lst1.Clear
    lst2.Clear
    If Len(Trim(Text4.Text)) <= 0 Then
        lst1.Clear: lst2.Clear
        lst1.Visible = False: lst2.Visible = False
        Exit Sub
    Else
        With Rst
            .Open "Select * From stock", CnN, adOpenDynamic, adLockOptimistic
            Do While Not .EOF
                If Mid(UCase(.Fields(1)), 1, Len(Text4)) = Mid(UCase(Text4), 1, Len(Text4)) Then
                    lst1.AddItem .Fields(0): lst2.AddItem .Fields(1)
                End If
                .MoveNext
            Loop
            .Close
        End With
        If lst2.ListCount > 0 Then
            If lst2.ListCount > 3 Then
                lst1.Height = lst1.ListCount * 200
                lst2.Height = lst2.ListCount * 200
                lst1.Visible = True: lst2.Visible = True
            Else
                lst1.Height = lst1.ListCount * 300
                lst2.Height = lst2.ListCount * 300
                lst1.Visible = True: lst2.Visible = True
            End If
        Else
            lst1.Visible = False
            lst2.Visible = False
        End If
    End If
End Sub

Private Sub Text4_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyEscape Then
        lst1.Clear: lst1.Visible = False
        lst2.Clear: lst2.Visible = False
    End If

End Sub

Private Sub Text4_KeyPress(KeyAscii As Integer)
On Local Error Resume Next
    If KeyAscii = 13 Then
        Dim RstPro As New ADODB.Recordset
        With RstPro
            .Open "Select * From stock", CnN, adOpenDynamic, adLockOptimistic
            .Find "detalle='" & Text4.Text & "'"
            Text6.Text = .Fields(0)
            Text4.Text = .Fields(1)
            Text3.Text = .Fields(2)
            Combo1.Text = .Fields(5)
            .Close
            lst1.Visible = False
            lst2.Visible = False
        End With
    End If
End Sub

Private Sub Text4_KeyUp(KeyCode As Integer, Shift As Integer)
    On Local Error Resume Next
    Select Case KeyCode
        Case vbKeyUp
            lst2.SetFocus
            lst2.ListIndex = lst2.ListIndex + 1
        Case vbKeyDown
            lst2.SetFocus
            lst2.ListIndex = lst2.ListIndex + 1
    End Select
End Sub
Más abajo, tengo un código para cargar un valor autonumérico en un textbox.
Código:
Private Sub Image3_Click()
Text2.SetFocus
    x = "Select max(NumeroFactura) from ventas"
    conexion_tablas.Open x, conexion_basedatos
Text1 = conexion_tablas(0) + 1
conexion_tablas.Close
End Sub
Cuando pruebo la aplicación, me marca el sig. error: Error de compilacion. Variable no definida.
img696.imageshack.us/img696/6812/capturao.png

Cabe destacar que si quito el codigo del autocompletado, la aplicacion funciona sin problemas

Ojala puedan ayudarme. Les estaría muy agradecido.
  #2 (permalink)  
Antiguo 19/11/2009, 21:59
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Error de compilacion. Variable no definida

Es que cuando usas esta opción:
Código vb:
Ver original
  1. Option Explicit
Debes declarar todas las variables que vayas a utilizar.

Por ejemplo, en el caso podría ser:
Código vb:
Ver original
  1. Dim x As String
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 20/11/2009, 16:34
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años
Puntos: 0
Respuesta: Error de compilacion. Variable no definida

David, ¡¡¡Muchas Gracias!!! Me ha servido mucho tu ayuda, ahora todo funciona correctamente.
Estoy muy agradecido, de verdad!

¡De nuevo, miles de gracias David!
Un saludo!

PD: +1 de Karma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:45.