border
VB 6
 
 
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Antiguo 04-12-2007, 20:01:29
Nuevo Amigo
 
Registrado: dic 2007
Posts: 2
Créditos: 86
JOHANMORENO Valoración +2
Predeterminado DUDA CODIGO PARA INSERTAR DATO

71 mensajes desde
Mayo 2007
Nominale a experto hola sres experto tengo una duda

poseo un formulario donde cargo la informacion con un userform...nombre, cedula y ltf por ejemplo

codigo de ingreso:

Dim Fila As String
"verificamos que todos los campos esten llenos
If TextBox1 = Empty Or TextBox2 = Empty Or TextBox3 = Empty Or TextBox5 = Empty Or ComboBox1 = Empty Then
MsgBox prompt:="No deje ningun campo vacio", Buttons:=vbOKOnly, Title:="Campo vacio"
GoTo seguir
End If
Range("a3").Select
If ActiveCell <> Empty Then
GoTo ingresar
End If
Fila = ActiveCell.Row
ActiveCell = Val(TextBox5)
Range("A" + Fila) = TextBox5
Range("b" + Fila) = TextBox1
Range("as6") = TextBox1

ingresar:
Range("a2").End(xlDown).Offset(1, 0).Select
Fila = ActiveCell.Row
ActiveCell = Val(TextBox5)
Range("A" + Fila) = TextBox5
Range("b" + Fila) = TextBox1
Range("as6") = TextBox1

Worksheets("MENU").Activate

Exit Sub

seguir:
TextBox1.SetFocus

End Sub

adicionalmente tengo un codigo para consultar datos

Hoja5.Activate
Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate...

quisiera colocar un campo para modificar la informacion respetando el orden de cada en la hoja de excel ya que registro que esta numerado.... quiero esto con la finalidad de para asignarle un dato adicional a los campos nombre cedula y tlf.... fecha...

lo intente colocando el codigo de ingreso que coloque arriba de esta nota solo con el campo que llamado tlf pero no me agrega en el textbox...

si me pueden ayudar

se me`presenta la duda puesto que el debe respetar la celda en la cual esta cargado el dato...
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #2 (permalink)  
Antiguo 04-12-2007, 23:30:11
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
Créditos: 20
IvanArt Valoración +2
Predeterminado

hola Johan,

espero que me disculpes, pero me temo que no he entendido nada de lo que quieres hacer ni de cual es el problema [a lo mejor estoy un poco espeso].

si quieres intenta explicarlo un poco mas claro

de todas formas espero que no te moleste si te hago algunos comentarios (solo por si te pueden ayudar):

creo que en el codigo que expones hay unas cuantas cosas 'comentables', empezando por el operador de concatenacion que estas usando (+), que aunque es valido, en alguna ocasion te puedes llevar algun disgusto/sorpresa.

Te recomiendo que para concatenar cadenas utilices el ampersand ('&') [no se si lo he escrito bien el nombre pero el simbolo es el que es)

por otro lado, utilizas un par de 'saltos' en el codigo (Goto) que, aparte del uso de goto, [segun tengo entendido] no demasiado recomendable en terminos de estructuracion del codigo si no es en determinasdos casos, se pueden evitar.

otra cosa mas seria la des/activacion y/o des/seleccion de rangos que realizas. En general en la mayoria de los casos no es necesario la activacion ni seleccion de nada para trabajar con ello, resultando normalmente codigos bastante mas eficientes y seguros al no hacerlo.

bueno, no me hagas caso 100% pero creo que son datos interesantes de conocer si te interesa esto del vba. Si quieres echale un ojo a los siguienttes codigos, que si no me equivoco hacen lo mismo que el tuyo (he separado en una funcion independiente la parte que comprueba si hay algo en los controles para hacerla mas versatil y utilizable en mas casos):

Código:
'...............en el modulo de un formulario con al menos 5 textbox, 1 combobox y un commandbutton
'                (con sus nombres originales)
'
'------
'-- funcion para comprobar que los controles cuyo nombre se pasa en una
' --  matriz (mtrNombreCtls) no estan vacios. Devuelve verdadero si todos
'  --  los controles pasados contienen datos. Si no, devuelve falso y en nroCtl
'    --  la posicion, dentro de la matriz pasada, del 1er control vacio
'      -- NOTA: para usar dentro del modulo del formulario de los controles
'
Function ControlesLlenos(mtrNombreCtls As Variant, nroCtl As Integer) As Boolean
  Dim n As Integer
  For n = LBound(mtrNombreCtls) To UBound(mtrNombreCtls)
    If Trim(Controls(mtrNombreCtls(n))) = "" Then _
      nroCtl = n: Exit Function
  Next
  ControlesLlenos = True
End Function
'
' -- codigo que +/- hace lo mismo que el tuyo.
'   --  NOTA: si alguno de los campos es de fecha, para evitar conflictos
'     --  con las configuraciones, conviene:
'     --1º) formatear el campo/columna al formato de fecha que quieras
'     --2º) pasar el valor del textbox a la celda mas o menos asi:
'           Range("a" & Fila) = CLng(CDate(TextBox1.Value))
'
Sub test_2()
  Dim Fila As String, nCt As Integer, MatrizNombresCtls
  MatrizNombresCtls = _
    Array("TextBox1", "TextBox2", "TextBox3", "TextBox5", "ComboBox1")
  If Not ControlesLlenos(MatrizNombresCtls, nCt) Then MsgBox _
      "No deje ningun campo vacio", , "Campo vacio": _
      Me.Controls(MatrizNombresCtls(nCt)).SetFocus: Exit Sub
  If Range("a3") = "" Then Fila = 3 Else Fila = [a65536].End(xlUp).Row + 1
  Range("a" & Fila) = TextBox5.Value
  Range("b" & Fila & ",as6") = TextBox1.Value
End Sub
'
'----- lo llamamos, por ejemplo, desde un commandbutton
'
Private Sub CommandButton1_Click()
  test_2
End Sub
'-----------
bueno, espero te ayude en algo y si te animas a intentar aclara un poco tu consulta quizas se la pueda echar un ojo

un saludo
Ivan
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #3 (permalink)  
Antiguo 05-12-2007, 01:36:24
Nuevo Amigo
 
Registrado: dic 2007
Posts: 2
Créditos: 86
JOHANMORENO Valoración +2
Predeterminado REPREGUNTA

HOLA AMIGO SOY DE VENEZUELA... GRACIAS POR TU AYUDA Y COLABORACION

TE EXPLICO VOY A INTERTAR PODER EXPLICARME BIEN...

TENGO UN FORMULARIO EN EXCEL DONDE CARGO LA INFORMACION DE EMPLEADOS PUES ES UNA NOMINA...
TENGO 5 CAMPOS NOMBRE CARGO SUELDO FECHA DE NACIMIENTO FECHA DE INGRESO Y FECHA DE EGRESO DE LA EMPRESA...

TENGO EL USERFORM 4 TEXTBOX 4 BOTONES

BOTON 1 INGRESAR BOTON 2 CONSULTAR BOTON 3 EGRESAR BOTON 4 SALIR

CARGO 4 DATOS DE ESOS 5 CAMPOS CON EL CODIGO QUE COLOCO AQUI

codigo de ingreso:

Dim Fila As String
"verificamos que todos los campos esten llenos
If TextBox1 = Empty Or TextBox2 = Empty Or TextBox3 = Empty Or TextBox5 = Empty Or ComboBox1 = Empty Then
MsgBox prompt:="No deje ningun campo vacio", Buttons:=vbOKOnly, Title:="Campo vacio"
GoTo seguir
End If
Range("a3").Select
If ActiveCell <> Empty Then
GoTo ingresar
End If
Fila = ActiveCell.Row
ActiveCell = Val(TextBox5)
Range("A" + Fila) = TextBox5
Range("b" + Fila) = TextBox1
Range("as6") = TextBox1

ingresar:
Range("a2").End(xlDown).Offset(1, 0).Select
Fila = ActiveCell.Row
ActiveCell = Val(TextBox5)
Range("A" + Fila) = TextBox5
Range("b" + Fila) = TextBox1
Range("as6") = TextBox1

Worksheets("MENU").Activate

Exit Sub

seguir:
TextBox1.SetFocus

End Sub

EL BOTON DE CONSULTA BUSCA POR EL CAMPO NOMBRE Y SE COLOCA EN LA FILA....
EL BOTON DE CONSULTA LO REALICE CON LA FINALIDAD DE SELECCIONAR EL QUE VOY A ELIMINAR

CODIGO DE BUSQUEDA
Hoja5.Activate
Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate...


BOTON DE EGRESO

CON ESTE BOTON ELIMINO DE MI LISTA AL TRABAJADOR QUE NO PRESTA SERVICIOS PARA LA EMPRESA PERO ANTES QUIERO COLOCARLE LA FECHA DE EGRESO EN EL CAMPO Y LUEGO CON EL COMANDO MUEVO LA FILA A OTRA HOJA ...

COLOQUE EL CODIGO DE INGRESO QUE COLOQUE AL PRINCIPIO PERO NO ME EDITA LA INFORMACION....

SI TE PARECE BIEN TE PUEDO ENVIAR ELL ARCHIVO PARA QUE ME AYUDES...
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #4 (permalink)  
Antiguo 05-12-2007, 02:37:37
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
Créditos: 20
IvanArt Valoración +2
Predeterminado Re: REPREGUNTA

hola Johan


Cita:
Empezado por JOHANMORENO
............COLOQUE EL CODIGO DE INGRESO QUE COLOQUE AL PRINCIPIO PERO NO ME EDITA LA INFORMACION......
de momento y mietras busco un hueco para intentar verlo un poco mas claro, si quieres prueba [con copias] los codigos que te envie para realizar el ingreso

copialos/pegalos en el modulo del formulario, tal cual estan, sin tocarlos de momento, pon un boton llamado CommandButton1 (sin cambiarle el nombre) y prueba a ver que tal estando la hoja donde quieres ingresar los nuevos datos como activa

bueno, mañana si puedo lo miro

un saludo
Ivan

PD: solo por si lo desconoces, en el mundo de los foros, el uso de mayusculas es como si estuvieras gritando, aparte de hacer mas dificil/pesada la lectura.
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #5 (permalink)  
Antiguo 07-12-2007, 03:10:06
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 140
Créditos: 20
IvanArt Valoración +2
Predeterminado

hola Johan,

disculpa la tardanza pero ando liadillo, aprte de que sigo sin tener claras unas cuantas cosas:

Cita:
TENGO 5 CAMPOS NOMBRE CARGO SUELDO FECHA DE NACIMIENTO FECHA DE INGRESO Y FECHA DE EGRESO

TENGO EL USERFORM 4 TEXTBOX 4 BOTONES
¿que control se corresponde con que campo/columna?? Ej: Textbox1 = Nombre = Columna A, Textbox2 = Cargo = columna B, etc..

si tienes 5 campos y 4 textbox, supongo que el campo que falta se carga en el combo

por cierto, y solo como curisidad, aqui hablas de 4 textbox, pero en el codigo haces mencion al TextBox5



Cita:
Código:
'verificamos que todos los campos esten llenos 
If TextBox1 = Empty Or TextBox2 = Empty Or TextBox3 = Empty Or TextBox5 = Empty Or ComboBox1 = Empty Then 
MsgBox prompt:="No deje ningun campo vacio", Buttons:=vbOKOnly, Title:="Campo vacio" 
GoTo seguir
si revisas la funcion que te envie, veras que te hace la misma comprobacion, pero si hay un control vacio pone el foco en ese control (en el 1º vacio que encuentra, no obligatoriamente en el 1er control <Textbox1>) y sale del procedimiento, sin necesidad de pegar el salto para hacer lo mismo en definitiva

Cita:
Código:
Range("a3").Select 
If ActiveCell <> Empty Then 
GoTo ingresar 
End If 
Fila = ActiveCell.Row
en esta parte hay varias cosas a comentar (desde mi punto de vista)

por un lado: seleccionas la celda A3 y una vez seleccionada usas activecell para comprobar si esata o no vacia. Esto mismo se podria hacer de una forma mucho mas sencilla y eficiente. En vez de seleccionar la celda y luego comprobar si 'la activa' esta o no llena, directamente compruebas si dicha celda (A3) esta llena o vacia. +/- asi =>

Código:
If Range("a3") = "" then
en este caso ademas lo que quieres es que si dicha celda esta vacia ponga los datos en determinadas celdas de esa fila y si no es asi que los ponga en la 1ª fila libre ¿me equivoco?

si es asi no te hace falta pegar ningun salto (ni volver a seleccionar nada) ni repetir otra vez un codigo identico pero cambiando la fila. Simplemente te valdria con al comprobar si A3 esta vacia o llena asignar una fila u otra de destino para los datos. +/- asi=>

Código:
If Range("a3") = "" then fila =3 else fila = range("a65536").end(xlup).row + 1
una vez obtenida la fila de destino te valdria con una sola de las series repetidas de instrucciones que utilizas para cargar las celdas

Cita:
Código:
ActiveCell = Val(TextBox5) 
Range("A" + Fila) = TextBox5 
Range("b" + Fila) = TextBox1 
Range("as6") = TextBox1
y aqui ya si que no entiendo nada (aunque sospecho que tambien aqui esta la llave de que no te cargue la nueva fecha)

1º cargas la celda activa (que en tu codigo, en este punto teiene que ser A3 por narices) con el Valor del textbox5,

2º inmediantamente VUELVES a CARGAR la misma celda A3 con el mismo contenido del textbox5 pero ahora sin convertir el dato a valor (cosa por otra parte solo necesaria si no usas la propiedad Value o Text del textbox explicitamente)

supongo que esto no tiene mucho sentido, asi que te recomiendo revisarlo a ver si tiene que ver con tu dato no cargado

finalmente cargas el contenido del textbox1 en 2 celdas diferentes ¿¿??

en definitiva cual es el campo en el que debes cargar la fecha del 'egreso'

NOTA: otra cosa, como te comentaba en mi primer mensaje, yo que tu usaria '&' para concatenar cadenas en lugar de '+'


Cita:
EL BOTON DE CONSULTA BUSCA POR EL CAMPO NOMBRE Y SE COLOCA EN LA FILA....
EL BOTON DE CONSULTA LO REALICE CON LA FINALIDAD DE SELECCIONAR EL QUE VOY A ELIMINAR

PERO ANTES QUIERO COLOCARLE LA FECHA DE EGRESO EN EL CAMPO Y LUEGO CON EL COMANDO MUEVO LA FILA A OTRA HOJA ...

COLOQUE EL CODIGO DE INGRESO QUE COLOQUE AL PRINCIPIO PERO NO ME EDITA LA INFORMACION....

dado que al parecer conoces el campo por el que buscar¿¿?? podrias restringir la busqueda a esa columna en lugar de buscar en toda la hoja (mira en la ayuda (F1) el metodo find)

aprte de nuevo no es necesario que selecciones nada (ni fila, ni celda, ni ...) para realizar lo que deseas, bastaria con hacer referencia ello.Pej. puedes hacer lago asi:

suponiendo que en la columna B tienes el dato a buscar ( al menos en ella crgas el textbox1) y que en la columna E (pej) quieres cargar la fecha de egreso contenida (tambien pej.) en el textbox3, y que dicha fila quieres eliminarla tras mover una copia a una hoja llamada pej. "Egresos"

Código:
'  al inicio del procedimiento aññades esta declaracion de variable
dim celda as range

with Hoja5   ' por cierto, OJO con esta forma de llamar a la hoja. Estas usando el CODEnAME y no el nombre (Name)
  set celda = .Range(.cells(1,2),.cells(65536,2).End(xlup)).Find(What:=TextBox1.value, _
                 After:=.cells(1,2), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
                 SearchDirection:=xlNext, MatchCase:=False)
  if not celda is nothing then
    celda.offset(,3)=textbox3.value
    celda.entirerow.cut Worksheets("Egresos").range("a65536").end(xlup).offset(1)
  else
    msgbox "No se encontraron coincidencias"
  end if
end with
bueno, no se si te aclara algo pero si quieres estudia los codigos con calma y la ayuda de F1 y scomentas exactamente la correspondencia de los controles con los campos/columnas

un saludo
Ivan
__________________
Nadie ve el mismo horizonte desde el mismo sitio.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
Respuesta


Herramientas

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado

LinkBacks (?)
LinkBack to this Thread: http://www.foro.vb-mundo.com/f39/duda-codigo-insertar-dato-12475/
Escrito Por For Type Fecha
VBA (Excel, Word, Outlook, Access) [Archivo] - Pgina 2 - VB-MUNDO - Programacion Visual This thread Refback 28-02-2012 04:45:48

Temas Similares
Tema Autor Foro Respuestas Último Mensaje
codigo para insertar otra hoja de excel en el mismo libro Arturo Vidal 77 VBA (Excel, Word, Outlook, Access) 5 16-05-2011 08:33:09
Como insertar una imagen en un reporte CR via Codigo?? cs2003mx Crystal Reports 2 27-02-2008 17:07:43
INSERTAR UNA FILA COMPLETA EN EXCEL POR CODIGO DIVEMASTER2002 VBA (Excel, Word, Outlook, Access) 3 28-05-2007 01:50:34
Error al insertar dato en tabla crashman Visual Basic.NET 3 13-04-2007 10:05:11
insertar fechas en access con insert into - codigo tetin Visual Basic 6.00 5 26-10-2006 17:19:48


La franja horaria es GMT. Ahora son las 07:04:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
© VB-MUNDO CO. Todos los derechos reservados
Tutoriales Premium | Juegos Online 


right

Programacion, vb 6, visual basic, foro programacion

Inactive Reminders By Icora Web Design