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 de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
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ó.