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
Mira en agregar componentes Microsoft Office XP Web Componets.
Si no te sirve puedes usar FlexGrid.
Un saludo.
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
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
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
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
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