Solución a copiado de datos

Tengo un problema con un macro. Quiero que a través de un botón, lame a un inputbox donde coloco un mes y que me copie de otra hoja los datos de un rango especifico. Por ejemplo al activar el botón ponga en mes de enero y que copie los rangos B5:G269 de otra hoja, si pongo Febrero que copie I5:N269.

1 respuesta

Respuesta
1
Aquí tienes el código que necesitas para hacer lo que solicitabas.
La experiencia me dice que para cualquier usuario (eso te incluye) es más simple ingrresar el número de mes que el nombre, ademas evita conflictos por problemas de tipeo. La macro pedirá, entonces, el número de mes a liquidar. De todos modos, dejará el nombre del mes en la celda que querías.
Vi que tu secuencia, a partir de la columna B, es copiar seis columnas habiendo una séptima que, aparentemente, separa los rangos de cada mes.
El número de mes se convierte en vital para resolver esto más fácilmente que con una cadena de If ElseIf...
Si esto es correcto, activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "´Modulo") y pega el siguiente código:
Sub CopiaMes()
Dim Mes As String
Dim Recibos As String
Dim NumMes, CantCol As Long
'Ike, ingresa la cantidad de columnas a copiar por cada mes
CantCol = 6
CeldaDest = "B5" ' celda donde debe pegar lo copiado de hoja Liquidación"
'============================================
NumMes = InputBox("Ingrese Nº de Mes de Liquidación", "NUMERO DE MES?")
If Len(NumMes) = 0 Then
M_Tit = "FALTA NUMERO DE MES"
M_Mens = "Al no ingresar un número de mes alguno, proceso termina aquí"
MsgBox M_Mens, vbCritical, M_Tit
'esta forma de estructurar los mensajes se parece "mucho" a la que suelo utilizar yo ;)
ElseIf NumMes > 12 Then
M_Tit = "NUMERO DE MES INCORRECTO"
M_Mens = NumMes & " no es un número de mes correcto, proceso termina aquí"
MsgBox M_Mens, vbCritical, M_Tit
Else
NomMeses = Array("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre")
Mes = NomMeses(NumMes)
ActiveSheet.Range("C2").Value = Mes
Worksheets("Liquidacion").Select
Range(Range("B3:B24").Offset(0, (CantCol + 1) * (NumMes - 1)), Range("B3:B24").Offset(0, (CantCol + 1) * (NumMes - 1) + CantCol - 1)).Copy
Worksheets("Recibos").Select
Range(CeldaDest).Select
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Range(CeldaDest).Select
End If
End Sub
----
Antes de la serie de signos iguales, hay un par de variables que puedes modificar para que se adapte a tu planilla.
Una de ellas indica la celda donde deberá pegarse lo que copies de la hoja liquidación (no me diste ese dato)
Cierra el editor de Visual basic y graba el archivo antes de ejecutar la macro.
Tratándose de una macro, es aconsejable tener una copia hasta estar seguro de que funcionó OK (para esto no hay opción de deshacer)
Luego ejecuta la macro CopiaMes (por menú o con un botón en la hoja) y tendrás el resultado esperado.
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
En caso contrario, puedes preguntarme nuevamente
aclarando qué entendí mal o qué faltó.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas