Foros del Web » Soporte técnico » Ofimática »

Macro VBA Excel

Estas en el tema de Macro VBA Excel en el foro de Ofimática en Foros del Web. Hola, Estoy trabajando con un libro de excel para realizar un inventario. He hecho una macro programada en Vba para insertar los productos. Lo que ...
  #1 (permalink)  
Antiguo 24/06/2010, 05:57
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Macro VBA Excel

Hola,
Estoy trabajando con un libro de excel para realizar un inventario.
He hecho una macro programada en Vba para insertar los productos.
Lo que quiero es que al insertar productos, en la columna de códigos se ponga un código automáticamente, de aquí saco dos opciones:
1) Hacer un rango de códigos y que se inserten automáticamente al escribir el nombre del producto. (El código me da igual como sea. Me vale 1, 2, 3.. o me vale 0001, 0002, etc. No quiero un código demasiado complicado)
2) La opción que yo estaba intentando. Usando un for.
Código:
 
Private Sub btn_insertar_Click()
   Dim marca As String
   Dim maxrow as double

    marca = txt_insertar_marca.Value
    maxrow = Cells.SpecialCells(xlLastCell).Row + 1

  For i = 1 To maxrow
   Cells(maxrow, 2) = Cells(maxrow, 2) + 1
  Next i

   Cells(maxrow,3)=marca
End Sub
Con ese código, la insercción de la marca se hace bien, normal, como siempre.
Lo único que con ese for me inserta como código el número de fila... Yo lo que quiero es empezar un código desde 1 por ejemplo usando como referencia la última celda escrita con marca.

EDIT: También se me acaba de ocurrir hacerlo de forma independiente al código VBA. Haciendo un formato condicional con una fórmula. Ya me contaréis!!

Espero haberme expresado medianamente bien, para que me entendais.
Espero vuestras respuestas. Saludos.

Última edición por KonnaN; 24/06/2010 a las 06:41
  #2 (permalink)  
Antiguo 24/06/2010, 19:57
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
De acuerdo Respuesta: Macro VBA Excel

Hola! KonnaN
No entiendo que es "eso" de txt_insertar_marca.Value.

Pero si te funciona, aplícalo del siguiente modo:

Código:
Private Sub btn_insertar_Click()
With Range("b" & Rows.Count).End(xlUp).Offset(1)
  .Value = 1 + .Offset(-1)
  .Offset(, 1) = txt_insertar_marca.Value
End With
End Sub 
Saludos, Cacho.

Última edición por mrocf; 28/06/2010 a las 12:05
  #3 (permalink)  
Antiguo 28/06/2010, 04:44
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Macro VBA Excel

Hola mrocf,
gracias por tu respuesta y lo siento !
el txt_insertar_marca.value es el nombre que le puse al cuadro de texto del programa.
Ahora lo pruebo y te comento :)
__________________
Si tienes un problema e intentamos ayudarte, coméntanos la solución si no la conseguimos.
  #4 (permalink)  
Antiguo 28/06/2010, 06:37
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Macro VBA Excel

Buff.. Que crack eres.. Me ha funcionado !!!!!!
Ahora queda viva otra duda.. Al insertar insertas por ejemplo 10 marcas.
Supongamos que yo me he equivocado en las ultimas 5.. cojo y las borro..
después las vuelvo a insertar y me continúa insertando en la onceava fila. (Las 5 celdas en "blanco" que borre las toma como si estubieran escritas...)

A ver si me puedes ayudar. Muchas gracias, de nuevo.

Saludos.
__________________
Si tienes un problema e intentamos ayudarte, coméntanos la solución si no la conseguimos.
  #5 (permalink)  
Antiguo 28/06/2010, 12:08
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
Respuesta: Macro VBA Excel

1º) He eliminado dos líneas del código que antes te mostrara a modo de optimización, a partir de tu comentario.

2º) Si -en verdad- comprendes que representa

Range("b" & Rows.Count).End(xlUp).Offset(1)

advertirás que tienes el problema en el método de borrado de esas últimas 5 líneas...

¿Por qué no publicas ese método para verlo?
Saludos, Cacho.
  #6 (permalink)  
Antiguo 29/06/2010, 07:02
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Macro VBA Excel

Si, claro, aquuí te dejo el código del borrado:
Código:
Private Sub btn_borrar_Click()
Dim codigo As Double
Dim maxrow As Double
Dim celdacodigo As Double

    codigo = txt_borrar_codigo.Value
    maxrow = Cells.SpecialCells(xlLastCell).Row + 1

    For i = 1 To maxrow
     If Cells(i, 2) = codigo Then
      Cells(i, 2).Clear
      Cells(i, 3).Clear
     End If
    Next i
End Sub
Se borran el código, y la marca.
A ver si doy con la solución.. Me trae de cabeza desde hace mucho...
No he entendido muy bien el 2º) punto.
Gracias por todo, de verdad.

Saludos.
__________________
Si tienes un problema e intentamos ayudarte, coméntanos la solución si no la conseguimos.
  #7 (permalink)  
Antiguo 01/07/2010, 03:03
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Macro VBA Excel

Hola de nuevo,
Ahora me da error en esta línea: .Value = 1 + .Offset(-1)
Podrías explicarme la funcionalidad del código, a ver si saco el fallo?
Mil gracias.
__________________
Si tienes un problema e intentamos ayudarte, coméntanos la solución si no la conseguimos.
  #8 (permalink)  
Antiguo 01/07/2010, 08:41
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Macro VBA Excel

¿Ninguna solución?
Gracias.
__________________
Si tienes un problema e intentamos ayudarte, coméntanos la solución si no la conseguimos.
  #9 (permalink)  
Antiguo 01/07/2010, 08:59
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
Respuesta: Macro VBA Excel

Hace -ya- una semana que tienes ese código...
La pregunta es: ¿Qué has cambiado -de la base de datos- en esta última semana?

Desde mi punto de vista: se hace difícil "adivinar" (como hasta ahora) cual es la estructura de tus datos y otros detalles que sólo se comprenden cuando se puede observar la hoja del libro.

De modo que si no puedes encontrar el problema, te sugiero que subas tu libro a algún servicio gratuito, para poder mirarlo.

Saludos, Cacho.
  #10 (permalink)  
Antiguo 02/07/2010, 02:58
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Macro VBA Excel

Hola mrocf.
Aquí he subido el libro: http://www.megaupload.com/?d=0O0Z67XU
Me he dado cuenta de lo siguiente: con el código que me diste tan sólo me va insertando (muy bien, de la forma que yo quería) cuando ya haya insertado yo anteriormente un código y una marca. Es decir para que me ponga el código dos, antes he tenido que meter yo a mano el código 1. Marca X.
¿Me entiendes ahora?
Disculpa mi tardanza y molestías.
Agradezco tu ayuda.
Un saludo
__________________
Si tienes un problema e intentamos ayudarte, coméntanos la solución si no la conseguimos.
  #11 (permalink)  
Antiguo 02/07/2010, 07:17
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
De acuerdo Macro VBA Excel

Hola! KonnaN. Al mirar el código que tienes:
Código:
Private Sub btn_insertar_Click()

Dim marca As String
Dim maxrow As Double
 
marca = txt_insertar_marca.Value
maxrow = maxrow = Cells.SpecialCells(xlLastCell).Row + 1

With Range("b" & Rows.Count).End(xlUp).Offset(1)
  .Value = 1 + .Offset(-1)
  .Offset(, 1) = txt_insertar_marca.Value
End With

Cells(maxrow, 3) = marca

End Sub

y compararlo con el código que te sugerí, se advierten 5 líneas de más:

Código:
Dim marca As String
Dim maxrow As Double
marca = txt_insertar_marca.Value
maxrow = maxrow = Cells.SpecialCells(xlLastCell).Row + 1
Cells(maxrow, 3) = marca

Ello me indica que te encuentras en los niveles iniciales del tema, y ése es un dato muy importante de conocer.
En efecto: al saberlo, no doy por sentado que conoces ciertas cuestiones básicas y -por el contrario- te las explico.

Por ejempo: hubiese sido muy importante que aclararas que en la fila 2 tienes los encabezados de columna.
Al saberlo, te hubiese sugerido lo siguiente:
Código:
Private Sub btn_insertar_Click()
With Range("b" & Rows.Count).End(xlUp)
  .Offset(1) = 1 + IIf(IsNumeric(.Cells), .Cells, 0)
  .Offset(1, 1) = txt_insertar_marca
End With
End Sub

COMENTARIOS
- Range("b" & Rows.Count).End(xlUp)
Localiza la última celda ocupada de la columa B

- .Offset(1)
Es la celda inmediata inferior a la anterior

- IsNumeric(.Cells)
Esta función devuelve Verdadero ó Falso según si la última celda ocupada de la columna B se puede evaluar como un número.

- IIf()
Es la clásica función SI() ó IF() del Excel. Como se ve: si la última celda ocupada de la columna B es numérica, obtenemos su valor. Y si no es numérica (o sea que estamos viendo el encabezado de columna), obtenemos un cero.

- .Offset(1, 1)
Respecto de la última celda ocupada de la columna B, esta celda está una fila abajo y una columna a su derecha.

Espero que te haya sido de utilidad.
Saludos, Cacho.
  #12 (permalink)  
Antiguo 02/07/2010, 08:08
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Macro VBA Excel

Hola de nuevo,
solo 3 palabras: "eres un crack". Muchas gracias por la explicación. Ahora me queda todo más claro. También debería haber advertido de mis conocimientos básicos de VBA.

Siento las molestias, y agradezco tu paciencia y respuestas.
Si te parece seguiré poniendo en el mismo post las dudas que iré teniendo después de terminar con la insercción de datos, por lo que veo eres bastante profesional.
Posteriormente quiero hacer una para borrar por código, y otra para modificar, por si el usuario se equivoca al introducir datos, que pueda rectificarlos.

Muchas gracias.
Saludos.
__________________
Si tienes un problema e intentamos ayudarte, coméntanos la solución si no la conseguimos.
  #13 (permalink)  
Antiguo 02/07/2010, 08:37
Avatar de KonnaN  
Fecha de Ingreso: diciembre-2009
Ubicación: Madriles
Mensajes: 214
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Macro VBA Excel

Hola de nuevo,
ya he hecho la macro de Borrar :)
Como se aprecia he insertado algunas cabeceras más para el inventario. (No es que esté loco y por eso las ponga de más).
Parece que está bien...pero yo quiero ir más allá.
Cuando se me borre una fila por un código me gustaría que se recolocaran las inferiores, es decir que la siguiente fila sustituya a la anterior, y la anterior a la anterior, y así sucesivamente. Pero no sé cual sería el procedimiento exacto. Estoy dando vueltas al código que me envío mrocf antes, a ver si le puedo dar algún uso aquí.

Código:
Private Sub btn_borrar_Click()
Dim codigo As Double
Dim maxrow As Double

codigo = txt_borrar_codigo.Value
maxrow = Cells.SpecialCells(xlLastCell).Row + 1

  For i = 1 To maxrow
     If Cells(i, 2) = codigo Then
      Cells(i, 2).Clear
      Cells(i, 3).Clear
     End If
    Next i
End Sub
Simplemente yo escribo un código y se me borran todas las filas para ese código. Sin que se me queden filas intermedias en blanco.
Saludos.
__________________
Si tienes un problema e intentamos ayudarte, coméntanos la solución si no la conseguimos.

Última edición por KonnaN; 15/07/2010 a las 02:57

Etiquetas: excel, macro, vba
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 12:11.