Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Carlosnuel en 22 Noviembre 2006, 05:43



Título: crear tabla estilo Excel con VB
Publicado por: Carlosnuel en 22 Noviembre 2006, 05:43
hola, la verdad si no tengo experiencia en VB, y pues en la escuela  me pidieron que hiciera una tabla estilo Excel. Me explico mejor, que el usuario inserte en un campo el numero de filas y el numero de columnas que quiere que tenga la tabla, entonces el programa genera esa tabla para que el usuario ingrese los datos que quiera

llevo horas intentandolo y buscando algun metodo pero no me sale... intente colocando puros cuadros de texto y esos habilitarlos dependiendo del numero de filas y columnas que el usuario ingresaba pero no me sale...

ojala puedan darme una idea de como puedo hacerle...

se lo agradeceria mucho


Título: Re: crear tabla estilo Excel con VB
Publicado por: ReViJa en 22 Noviembre 2006, 09:52
Mira en agregar componentes Microsoft Office XP Web Componets.

Si no te sirve puedes usar FlexGrid.




Un saludo.


Título: Re: crear tabla estilo Excel con VB
Publicado por: CeLaYa en 22 Noviembre 2006, 14:04
Puedes usar el FlexGrid y una caja de texto para ir introduciendo los datos, tambien agregando el MSCOMCTL.ocx puedes crear barras de herramientas para que le des una presentación más profesional


Título: Re: crear tabla estilo Excel con VB
Publicado por: Carlosnuel en 25 Noviembre 2006, 04:51
ok, gracias... miren he logrado generar tabla y que está pueda recibir valores...

ahora el consejo que pido es que me digan como puedo hacer que el al momento de que el usuario ingrese un dato por ejemplo en la celda (1,2) automaticamente me guarde ese valor el programa, le intente con el metodo TextMatrix pero no me funciona... es que necesito en mi programa recoger esos valores para realizar el reconocimiento de cadenas...

aqui les dejo el codigo que llevo escrito, ojala puedan ayudarme


Código:

Sub Form_Load()
   Dim Termm(), NoTerm(), elem()  As String
    Dim a, NoElem As Integer
                     
        NoTerm = Split("E|E'|OS|T|T'|OM|F", "|")
        Termm = Split("+|-|*|(|)|2|$", "|")
        Inicia Termm, NoTerm, Fg2
   
   TxtEdit = ""
End Sub

Public Sub Inicia(ArrTerminales() As String, ArrNoTerminales() As String, Fg2 As MSHFlexGrid)

    Reng = UBound(ArrNoTerminales) + 1
    Cols = UBound(ArrTerminales) + 1
 
    Fg2.Rows = Reng + 1
    Fg2.Cols = Cols + 1
    Fg2.FixedCols = 1
    Fg2.FixedRows = 1
 
    For i = 0 To UBound(ArrTerminales)
        Fg2.TextMatrix(0, i + 1) = ArrTerminales(i)
    Next i
 
    For j = 0 To UBound(ArrNoTerminales)
        Fg2.TextMatrix(j + 1, 0) = ArrNoTerminales(j)
    Next j
 End Sub



Private Function Fgi(r As Integer, c As Integer) As Integer
   Fgi = c + Fg2.Cols * r
End Function

Sub Fg2_KeyPress(KeyAscii As Integer)
   MSHFlexGridEdit Fg2, TxtEdit, KeyAscii
End Sub

Sub Fg2_DblClick()
   MSHFlexGridEdit Fg2, TxtEdit, 32 ' Simula un espacio.
End Sub
Sub MSHFlexGridEdit(MSHFlexGrid As Control, _
Edt As Control, KeyAscii As Integer)

   Case 0 To 32
      Edt = MSHFlexGrid
      Edt.SelStart = 1000

   Case Else
      Edt = Chr(KeyAscii)
      Edt.SelStart = 1
   End Select

   Edt.Move MSHFlexGrid.Left + MSHFlexGrid.CellLeft, _
      MSHFlexGrid.Top + MSHFlexGrid.CellTop, _
      MSHFlexGrid.CellWidth - 8, _
      MSHFlexGrid.CellHeight - 8
   Edt.Visible = True

   Edt.SetFocus
End Sub
Sub txtEdit_KeyPress(KeyAscii As Integer)
   ' Elimina los retornos para quitar los pitidos.
   If KeyAscii = Asc(vbCr) Then KeyAscii = 0
End Sub

Sub txtEdit_KeyDown(KeyCode As Integer, _
Shift As Integer)
   EditKeyCode Fg2, TxtEdit, KeyCode, Shift
End Sub

Sub EditKeyCode(MSHFlexGrid As Control, Edt As _
Control, KeyCode As Integer, Shift As Integer)

   Select Case KeyCode

   Case 27 
      Edt.Visible = False
      MSHFlexGrid.SetFocus

   Case 13
      MSHFlexGrid.SetFocus

   Case 38      ' Arriba.
      MSHFlexGrid.SetFocus
      DoEvents
      If MSHFlexGrid.Row > MSHFlexGrid.FixedRows Then
         MSHFlexGrid.Row = MSHFlexGrid.Row - 1
      End If

   Case 40     
      MSHFlexGrid.SetFocus
      DoEvents
      If MSHFlexGrid.Row < MSHFlexGrid.Rows - 1 Then
         MSHFlexGrid.Row = MSHFlexGrid.Row + 1
      End If
   End Select
End Sub
Sub Fg2_GotFocus()
   If TxtEdit.Visible = False Then Exit Sub
   Fg2 = TxtEdit
   TxtEdit.Visible = False
End Sub

Sub Fg2_LeaveCell()
   If TxtEdit.Visible = False Then Exit Sub
   Fg2 = TxtEdit
   TxtEdit.Visible = False
End Sub


Título: Re: crear tabla estilo Excel con VB
Publicado por: CeLaYa en 25 Noviembre 2006, 14:33
puedes poner una caja de texto para simular que el usuario esta escibiendo arriba del MSFlexGrid, y que al dar enter en el text te ponga los datos en la celda


Private Sub MSFlexGrid1_EnterCell()
    Text1.Top = MSFlexGrid1.CellTop
    Text1.Left = MSFlexGrid1.CellLeft
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then MSFlexGrid1.Text = Text1.Text
End Sub


Título: Re: crear tabla estilo Excel con VB
Publicado por: Carlosnuel en 30 Noviembre 2006, 04:53
ya he podido hacer que el usuario ingrese automaticamente los datos, gracias...

pero otra pregunta, disculpen las molestias que causo es que apenas estoy aprendiendo VB mi pregunta es... en mi FlexGrid el usuario ya escribe los datos en la dirección del arreglo que quiere... ahora lo que  necesito hacer es que en las celdas que quedan vacias escriba un 0  pero no me queda porque en todas las celdas escribe el 0 y el boton que puse no funciona para hacer esa parte que les digo de completar la tabla, en pocas palabras asi como carga el programa llena la tabla y ese no es el chiste, si no que primero el usuario escriba los campos que necesite y luego complete la tabla...


este es mi codigo

Citar
Public Sub LlenarT_Click()
  GeneraT
 End Sub

Private Sub GeneraT(ArrTerminales() As String, ArrNoTerminales() As String)
    Reng = UBound(ArrNoTerminales) + 1
    Cols = UBound(ArrTerminales) + 1
 
  For j = 0 To UBound(ArrNoTerminales)
    grd.TextMatrix(j + 1, 7) = "Explorar"
  Next j
   
End Sub


pd. no sé si lo comente antes... pero mi programa es para un analizador lexico de la materia de compiladores... tengo que realizar la recuperación de errores por ese metodo