Sub Load_log() 'Funcion para abrir y copiar el contenido de un documento excel externo en la hora Data. Dim MyResultados As String 'donde guardo el nombre del libro de resultados Dim MyInfo As String 'donde guardo el nombre del libro que voy a abrir Dim InfoPath As String 'donde se guada la información de la ubicacion del libro de info Application.ScreenUpdating = False 'para que no se vea en pantalla la apertura del libro (tarda menos) ClearData ' Dejo limpio el resto de hojas de este libro, por si tenian datos antiguos basura MyResultados = ThisWorkbook.Name InfoPath = Application.GetOpenFilename 'display para abrir libro de info Workbooks.Open Filename:=InfoPath 'abro el libro MyInfo = ActiveWorkbook.Name Worksheets("Sheet1").Select 'copiando información desde la hoja Sheet1 (descargada de moodle) Columns("A:I").Select Selection.Copy Workbooks(MyResultados).Activate 'pegado de información en hoja Data Worksheets("Data").Activate Range("A1").Activate ActiveSheet.Paste Worksheets("Resultados").Activate 'para volver a la hoja de resultados Application.DisplayAlerts = False 'para que no salte cuadro de diálogo de clipboard Workbooks(MyInfo).Close savechanges = False 'cierro el libro de info anadir_fechas End Sub Private Function ClearData() ' Función para limpiar la información de el resto de las hojas (Data, Lista_usuarios...) '1º borro la hoja Data Sheets("Data").Select Cells.Select Selection.Delete Shift:=xlUp '2º borro la hoja Lista_usuarios Sheets("Lista_usuarios").Select Cells.Select Selection.Delete Shift:=xlUp '2º borro la hoja Fechas Sheets("Fechas").Select Cells.Select Selection.Delete Shift:=xlUp '3º borro la hoja Pregrafica Sheets("Pregrafica").Select Cells.Select Selection.Delete Shift:=xlUp '4º borro la hoja gráfica Sheets("Grafica").Select Cells.Select Selection.Delete Shift:=xlUp 'borro graficas antiguas On Error Resume Next Worksheets("Resultados").Activate ActiveSheet.Shapes(4).Delete 'borro celda A32 Range("A32").Select Selection.Delete ' borro la hoja Lista_cuestionarios Sheets("Lista_cuestionarios").Select Cells.Select Selection.Delete Shift:=xlUp ' borro la hoja Lista_tareas Sheets("Lista_tareas").Select Cells.Select Selection.Delete Shift:=xlUp ' borro la hoja Lista_cuestionarios_fecha Sheets("Lista_cuestionarios_fecha").Select Cells.Select Selection.Delete Shift:=xlUp ' borro la hoja Lista_tareas_fecha Sheets("Lista_tareas_fecha").Select Cells.Select Selection.Delete Shift:=xlUp ' borro la hoja Cuestionarios_realizados Sheets("Cuestionarios_realizados").Select Cells.Select Selection.Delete Shift:=xlUp ' borro la hoja Tareas_realizados Sheets("Tareas_realizados").Select Cells.Select Selection.Delete Shift:=xlUp ' borramos datos antiguos Sheets("Resultados").Select Range("A34:AU398").Select Selection.ClearContents With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone End Function Sub Lista_cuestionarios_fecha() ' ' Lista_cuestionarios_fecha Macro ' Filtra los cuestionarios (todos de la hojaLista_cuestionarios) segun la fecha de inicio fin ' Sheets("Lista_cuestionarios_fecha").Select Cells.Select Selection.ClearContents Sheets("Lista_cuestionarios").Select Range("A1:B1").Select Application.CutCopyMode = False Selection.Copy Sheets("Lista_cuestionarios_fecha").Select Range("F1").Select ActiveSheet.Paste Range("G2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE("">="",Pregrafica!R[3]C[-5])" Sheets("Lista_cuestionarios").Columns("A:B").AdvancedFilter Action:= _ xlFilterCopy, CriteriaRange:=Range("F1:G2"), CopyToRange:=Range("J1"), _ Unique:=True Range("G2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(""<="",Pregrafica!R[4]C[-5])" Columns("J:K").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "Lista_cuestionarios_fecha!Criteria"), CopyToRange:=Range("A1"), Unique:= _ True Columns("J:K").Select Selection.ClearContents End Sub Sub Lista_tareas_fecha() ' ' Lista_tareas_fecha Macro ' Filtra las tareas (todos de la hoja Lista_tareas) segun la fecha de inicio fin 'borro contenido de la hoja Lista_tareas_fecha Sheets("Lista_tareas_fecha").Select Cells.Select Selection.ClearContents 'creo la cabecera del filtro Sheets("Lista_tareas").Select Range("A1:B1").Select Application.CutCopyMode = False Selection.Copy Sheets("Lista_tareas_fecha").Select Range("F1").Select ActiveSheet.Paste ' voy a hacer doble filtrado : primero para la fecha inicio Range("G2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE("">="",Pregrafica!R[3]C[-5])" Sheets("Lista_tareas").Columns("A:B").AdvancedFilter Action:= _ xlFilterCopy, CriteriaRange:=Range("F1:G2"), CopyToRange:=Range("J1"), _ Unique:=True ' voy a hacer doble filtrado : y luego para para la fecha fin Range("G2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(""<="",Pregrafica!R[4]C[-5])" Columns("J:K").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "Lista_tareas_fecha!Criteria"), CopyToRange:=Range("A1"), Unique:= _ True Columns("J:K").Select Selection.ClearContents End Sub Sub Tareas_vistas() ' ' Tareas_vistas Macro ' ' borro la hoja Tareas_vistas Sheets("Tareas_vistas").Select Cells.Select Selection.Delete Shift:=xlUp 'Se crea un filtro avanzado para seleccionar solo las activiades con Nombre evento=Se ha visualizado el estado de la entrega. y filtrando al usuario por nombre Sheets("Data").Select Rows("1:1").Select Selection.Copy Sheets("Tareas_vistas").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Range("D2").Select ActiveCell.FormulaR1C1 = "Tarea*" Range("F2").Select ActiveCell.FormulaR1C1 = "Se ha visualizado el estado de la entrega." 'copio al nombre del usuario de la lista Sheets("Pregrafica").Select Range("D1").Select Selection.Copy Sheets("Tareas_vistas").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("J2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE("">="",Pregrafica!R[3]C[-8])" Sheets("Data").Columns("A:J").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:J2"), CopyToRange:=Range("L1:U1"), Unique:=False Columns("L:U").Select ' se ordenan las actividades en por fecha de aparición (así se sabe la fecha de creaciòn) ActiveWorkbook.Worksheets("Tareas_vistas").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Tareas_vistas").Sort.SortFields.Add2 Key:= _ Range("U:U"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With ActiveWorkbook.Worksheets("Tareas_vistas").Sort .SetRange Range("L:U") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Sheets("Tareas_vistas").Select Columns("L:U").Select Selection.Copy Range("W1").Select ActiveSheet.Paste Columns("W:AF").Select Application.CutCopyMode = False ActiveSheet.Range("$W:$AF").RemoveDuplicates Columns:=4, Header:=xlYes 'imprimiir resultados ' filtramos la lista de tareas fecha inicio / fin introducida por el usr. Lista_tareas_fecha 'contamos el nº de actividades hechas Sheets("Resultados").Select Range("E40").Select ActiveCell.FormulaR1C1 = "=COUNTA(Lista_tareas_fecha!C[-4])-1" Dim cuest_total As Integer cuest_total = Range("E40").Value If (cuest_total <= 0) Then Range("E40").Select ActiveCell.FormulaR1C1 = "No hay tareas enviadas en el rango de fechas especificado" Exit Sub End If 'creamos tabla de resultados Range("E42").Select ActiveCell.FormulaR1C1 = "NOMBRE Tarea" Range("F42").Select ActiveCell.FormulaR1C1 = "NÚMERO DE VECES VISTA" Sheets("Lista_tareas_fecha").Select Range("A2:A" & cuest_total + 1).Select Selection.Copy Sheets("Resultados").Select Range("E43").Select ActiveSheet.Paste 'Columns("A:A").EntireColumn.AutoFit 'contamos el nº de intentos por cada cuestionario de la tabla Lista_tareas_fecha Range("F43").Select ActiveCell.FormulaR1C1 = _ "=COUNTIF(tareas_vistas!C[9],Resultados!RC[-1])" Range("F43").Select Selection.AutoFill Destination:=Range("F43:F" & cuest_total + 43 - 1), Type:=xlFillDefault 'Columns("B:B").EntireColumn.AutoFit Tareas_enviadas End Sub Sub Tareas_enviadas() ' ' Tareas_enviadas Macro ' ' borro la hoja Tareas_enviadas Sheets("Tareas_enviadas").Select Cells.Select Selection.Delete Shift:=xlUp 'Se crea un filtro avanzado para seleccionar solo las activiades con Nombre evento=Se ha visualizado el estado de la entrega. y filtrando al usuario por nombre Sheets("Data").Select Rows("1:1").Select Selection.Copy Sheets("Tareas_enviadas").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Range("D2").Select ActiveCell.FormulaR1C1 = "Tarea*" Range("F2").Select ActiveCell.FormulaR1C1 = "Entrega creada." 'copio al nombre del usuario de la lista Sheets("Pregrafica").Select Range("D1").Select Selection.Copy Sheets("Tareas_enviadas").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("J2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE("">="",Pregrafica!R[3]C[-8])" Sheets("Data").Columns("A:J").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:J2"), CopyToRange:=Range("L1:U1"), Unique:=False Columns("L:U").Select ' se ordenan las actividades en por fecha de aparición (así se sabe la fecha de creaciòn) ActiveWorkbook.Worksheets("Tareas_enviadas").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Tareas_enviadas").Sort.SortFields.Add2 Key:= _ Range("U:U"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With ActiveWorkbook.Worksheets("Tareas_enviadas").Sort .SetRange Range("L:U") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Sheets("Tareas_enviadas").Select Columns("L:U").Select Selection.Copy Range("W1").Select ActiveSheet.Paste Columns("W:AF").Select Application.CutCopyMode = False ActiveSheet.Range("$W:$AF").RemoveDuplicates Columns:=4, Header:=xlYes 'imprimiir resultados ' filtramos la lista de tareas fecha inicio / fin introducida por el usr. Lista_tareas_fecha 'contamos el nº de actividades hechas Sheets("Resultados").Select Range("G42").Select ActiveCell.FormulaR1C1 = "Envía algo (1=SI)" Range("E40").Select ActiveCell.FormulaR1C1 = "=COUNTA(Lista_tareas_fecha!C[-4])-1" Dim cuest_total As Integer cuest_total = Range("E40").Value 'creamos tabla de resultados 'contamos el nº de intentos por cada cuestionario de la tabla Lista_tareas_fecha Range("G43").Select ActiveCell.FormulaR1C1 = _ "=COUNTIF(tareas_enviadas!C[19],Resultados!RC[-2])" Range("G43").Select Selection.AutoFill Destination:=Range("G43:G" & cuest_total + 43 - 1), Type:=xlFillDefault 'Columns("B:B").EntireColumn.AutoFit Dim cuest_alumno As Integer Range("E40").Select ActiveCell.FormulaR1C1 = "=COUNTA(tareas_enviadas!C[21])-1" cuest_alumno = Range("E40").Value ActiveCell.FormulaR1C1 = "Tareas enviadas: " & cuest_alumno & " de " & cuest_total 'colorear tabla Range("E40").Select With Selection.Font .Name = "Calibri" .Size = 18 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontMinor End With Range("E42:G42").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 15773696 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Range("E43:G" & cuest_total + 43 - 1).Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent1 .TintAndShade = 0.599993896298105 .PatternTintAndShade = 0 End With Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub Sub Graficar() ' ' Graficar Macro ' 'limpiamos la hoja Worksheets("Resultados").Activate On Error Resume Next ActiveSheet.Shapes(4).Delete Sheets("Grafica").Select Cells.Select Selection.Delete Shift:=xlUp ' Creamos el eje de ordenadas ' el inicio del eje de ordenadas es la fecha de inicio que el usuario metió en la celda Resultados.E2 Range("A1").Select ' pegamos esa fecha de inicio en la celda Grafica.Ai ActiveCell.FormulaR1C1 = "=Pregrafica!R[4]C[1]" Range("B1").Select ActiveCell.FormulaR1C1 = "=Pregrafica!R[5]C" Range("A1:B1").Select Selection.NumberFormat = "General" ' transformamos ambas fechas en formato númerico Dim FechaFin As Long FechaFin = Worksheets("Grafica").Range("B1").Value 'guardo en la variable FechaFin el valor de la fecha de fin(situado en Grafica.B1) Range("A1").Select ' creo una serie desde la fecha inicio hasta la fecha fin, para crear el eje de ordenadas Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _ Step:=1, Stop:=FechaFin, Trend:=False 'ahora creo el eje de abcisas. Para ello debo comparar todas las fechas desde el inicio del curso hasta el final, con las fechas con que el alumnado se ha iniciado sesión ' para ello uso la funcion Contar.SI(). Si existe, pongo 1.si no dejo un 0. Range("C1").Select ActiveCell.FormulaR1C1 = "=COUNTA(C[-2])" Dim numerodias As Long numerodias = Worksheets("Grafica").Range("C1").Value Range("B1").Select ActiveCell.FormulaR1C1 = "=COUNTIF(Pregrafica!C[12],Grafica!RC[-1])" Selection.AutoFill Destination:=Range("B1:B" & numerodias), Type:=xlFillDefault Range("C1").Select Selection.ClearContents Columns("A:A").Select Selection.NumberFormat = "m/d/yyyy" Columns("A:A").EntireColumn.AutoFit 'pintar el gráfico Columns("B:B").Select ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select ActiveChart.SetSourceData Source:=Range("Grafica!$B:$B") ActiveChart.FullSeriesCollection(1).XValues = "=Grafica!$A:$A" 'modificar titulo grafico ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = Worksheets("Pregrafica").Range("D1").Value Selection.Format.TextFrame2.TextRange.Characters.Text = "Dias en los que " & Worksheets("Pregrafica").Range("D1").Value & " ha accedido al curso. Periodo del " & Worksheets("Pregrafica").Range("B5").Value & " al " & Worksheets("Pregrafica").Range("B6").Value ActiveChart.Axes(xlValue).Select Selection.Delete 'modificar tamaño Dim tamanoGrap As Double tamanoGrap = 1 + numerodias * 0.03 ActiveSheet.Shapes(1).ScaleWidth tamanoGrap, msoFalse, _ msoScaleFromTopLeft ' Copiar y pegar a Resultados ActiveChart.ChartArea.Copy Sheets("Resultados").Select Range("A16").Select ActiveSheet.Paste ' mostrar estadísticas Range("A32").Select ActiveCell.FormulaR1C1 = "=SUM(Grafica!C2)" Dim diasAcceso As Integer diasAcceso = Range("A32").Value ActiveCell.FormulaR1C1 = "Total de dias que ha accedido: " & diasAcceso & " de " & numerodias & " .Periodo del " & Worksheets("Pregrafica").Range("B5").Value & " al " & Worksheets("Pregrafica").Range("B6").Value Cuestionarios_realizados Tareas_vistas Range("A20").Select End Sub Sub anadir_fechas() ' anadir_fechas Macro ' esta funcion añade una nueva columna a los datos llamada 'Fecha', que calcula la fecha en formato numérico. ' la funcion principal es =Fecha(A1), que cambia la fecha de la columna hora (A) en un formato que excel puede procesar. Sheets("Data").Select 'selecciona la hoja DATA Range("J1").Select ' Se posiciona en la primera columna libre de datos,es decir la J ActiveCell.FormulaR1C1 = "=DATEVALUE(RC1)" 'escribe en J1, =FECHA(A1) Range("J2").Select ActiveCell.FormulaR1C1 = "=DATEVALUE(RC1)" 'escribe en J2, =FECHA(A2) ' determino el numero de filas de la tabla de datos Range("K1").Select ActiveCell.FormulaR1C1 = "=COUNTA(C[-10])" Dim numCampos As Long numCampos = Worksheets("Data").Range("K1").Value Selection.ClearContents Range("J1:J" & numCampos).Select ' selecciono solo aquellos que esten rellenos Selection.FillDown ' se autorellena toda la columna J con la formula =FECHA(A?) siguiendo una serie Range("J1").Select ActiveCell.FormulaR1C1 = "Fecha" ' Se escribe en la cabecera (primera celda) de la columan J la palabra de Fecha, que servira de encabezado 'eliminamos al usuario Jesús Rincón. Range("K1").Select ActiveCell.FormulaR1C1 = "=IF(RC2=""Jesús Rincón"",RC[-8],RC[-9])" Range("K1:K" & numCampos).Select ' selecciono solo aquellos que esten rellenos Selection.FillDown Columns("K:K").Select Selection.Copy Columns("B:B").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("K:K").Select Selection.ClearContents ' Sheets("Data").Select ' Columns("J:J").Select ' se copia el contenido de la columna J de Data y se pega en la columna J de la hoja Lista_usuarios, pues aquí será donde se procese realmente la información ' Selection.Copy ' Sheets("Lista_usuarios").Select ' Columns("J:J").Select ' Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ ' :=False, Transpose:=False 'Sheets("Resultados").Select ' se vuelve a la pagina Resultados Filtrar_usuarios Lista_cuestionarios Lista_tareas End Sub Sub Filtrar_usuarios() ' Filtrar_usuarios Macro 'Esta función filtra los valores que toma la columna "Nombre completo del usuario" para quedarse con una la lista simple de participantes del curso. 'se copia de la hoja data la columan "Nombre completo del usuario" a la hoja Lista_usuarios, para hacer los cómputos intermedios Sheets("Data").Select Columns("B:B").Select Selection.Copy Sheets("Lista_usuarios").Select ' Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False 'se eliminan los dupicados (= BOTON -> DATOS -> QUITAR DUPLICADOS) de la columna "Nombre completo del usuario", de esta forma nos quedamos con la lista de alumnos y profesores distintoss que alguna vez accedieron al curso ActiveSheet.Range("$A:$A").RemoveDuplicates Columns:=1, Header:= _ xlYes ' se crea una serie 1,2,3,4.. en toda la columna B, para numerar a los usuarios. Es necesaria para el control de lista de seleccion Sheets("Lista_usuarios").Select Range("B1").Select ActiveCell.FormulaR1C1 = "=COUNTA(C[-1])" Dim numerousr As Long numerousr = Range("B1").Value numerousr = numerousr - 1 Range("B2").Select ActiveCell.FormulaR1C1 = "1" Range("B2").Select Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _ Step:=1, Stop:=numerousr, Trend:=False ActiveWindow.SmallScroll Down:=-12 Range("B1").Select ActiveCell.FormulaR1C1 = "NumeroUsuario" ' se añade una cabecera (la palabra NumeroUsuario) a la columna C Sheets("Resultados").Select ' El 'control de lista de seleccion' de la hoja Resultados se configura ... numerousr = numerousr + 1 ActiveSheet.Shapes.Range(Array("Drop Down 2")).Select Application.CutCopyMode = False Application.CutCopyMode = False With Selection .ListFillRange = "Lista_usuarios!$A2:$A" & numerousr ' ... con la lista de usuarios del curso (hoja Lista_usuarios - columna A), para luego poder seleccionar uno .LinkedCell = "Pregrafica!$A$1" ' el resultado de la seleccion del usuario, al picar en el 'control de lista de seleccion' se guardará en formato numero en la hoja Pregrafica, celda A1 .DropDownLines = 8 .Display3DShading = False End With Filtrar_fechas End Sub Sub Pregrafica() ' ' Esta macro hace unos calculos intermedios para establecer los datos en un formato graficable por excel. ' NOTA: Se ejecuta despues del modulo 6. Sheets("Pregrafica").Select ' los calculos intermedios se harán en la hoja Pregráfica Columns("M:N").Select ' se borran las columnas M y N de la hoja Pregráfica por si contenían basura de otra iteración antigua Selection.ClearContents Range("D1").Select ActiveCell.FormulaR1C1 = "=INDEX(Lista_usuarios!C[-3],Pregrafica!RC[-3]+1)" ' Se calcula con la funcion INDEX el nombre completo del usuario elegido en el 'control de seleccion', para ello se compara la lista de usuarios con el número de usuario asignado. 'Se creará un filtro avanzado, para filtrar solo las fechas de actividad de un alumno (el elegido por el usuario en 'control de seleccion' de la hoja Resultados Sheets("Fechas").Select Columns("A:B").Select 'el filtro avanzado tendrá como datos las fechas de sesion y todos los usuarios. Selection.Copy ' para ello se copian de la hoja Fechas. Sheets("Pregrafica").Select Range("G1").Select ActiveSheet.Paste ' y se pegan en la columna G:H Range("G1:H1").Select Application.CutCopyMode = False Selection.Copy Range("J1").Select ' como criterios sera el nombre del alumno elegido ActiveSheet.Paste Range("D1").Select Application.CutCopyMode = False Selection.Copy Range("J2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("G:H").Select Application.CutCopyMode = False Application.CutCopyMode = False Application.CutCopyMode = False Application.CutCopyMode = False Application.CutCopyMode = False Columns("G:H").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "J1:K2"), CopyToRange:=Range("M1"), Unique:=True Columns("M:N").Select ActiveWorkbook.Worksheets("Pregrafica").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Pregrafica").Sort.SortFields.Add2 Key:=Range( _ "N:N"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Pregrafica").Sort .SetRange Range("M:N") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ' convertimos la fecha de inicio y fin del curso a string Sheets("Pregrafica").Select If Not IsEmpty(Worksheets("Resultados").Range("E2")) Then Range("B5").Select ActiveCell.FormulaR1C1 = "=Resultados!R[-3]C[3]" Else ' si no hay fecha de inicio introducida por el usuario se coge las fechas min Range("B5").Select ActiveCell.FormulaR1C1 = "=MIN(Fechas!C)" End If If Not IsEmpty(Worksheets("Resultados").Range("E3")) Then Range("B6").Select ActiveCell.FormulaR1C1 = "=Resultados!R[-3]C[3]" Else ' si no hay fecha de fin introducida por el usuario se coge las fechas máx Range("B6").Select ActiveCell.FormulaR1C1 = "=MAX(Fechas!C)" End If Range("B5:B6").Select Selection.NumberFormat = "m/d/yyyy" If Worksheets("Pregrafica").Range("B5").Value > Worksheets("Pregrafica").Range("B6").Value Then MsgBox "La fecha de inicio no puede ser posterior a la de fin" Exit Sub End If ' Sheets("Resultados").Select ' se vuelve a la pagina Resultados Graficar End Sub Sub Filtrar_fechas() ' Filtrar_fechas Macro (este macro se ejecuta antes que el 5) 'En este macro se crea un filtro avanzado sobre las columnas 'Nombre completo del usuario' y 'Fecha', ' para eliminar aquellos usuarios que en una misma fecha hicieron generaron varios eventos, es decir eliminar usuarios y fechas duplicadas ' Sheets("Data").Select 'De la hoja ' Data ' se copia las columnas B y J (es decir 'Nombre completo del usuario' y 'Fecha'). Range("B:B,J:J").Select Range("J1").Activate Selection.Copy Sheets("Fechas").Select 'y se pegan en la columnas A y B de la hoja Fechas. estas columnas seran los datos a filtrar ActiveSheet.Paste Columns("A:B").Select Application.CutCopyMode = False ActiveSheet.Range("$A:$B").RemoveDuplicates Columns:=Array(1, 2), Header:= _ xlYes Sheets("Resultados").Select ' el resultado del filtrado (en G:H) es una lista de usuarios sin duplicados, cada uno con la fecha en que iniciarion sesion en el curso. End Sub Sub Lista_cuestionarios() ' ' Lista_cuestionarios Macro ' 'Se crea un filtro avanzado para seleccionar solo las activiades con Nombre evento=Intento enviado (es decir aquellos cuestionarios enviados) Sheets("Data").Select Rows("1:1").Select Selection.Copy Sheets("Lista_cuestionarios").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Range("E2").Select ActiveCell.FormulaR1C1 = "Cuestionario" Range("F2").Select ActiveCell.FormulaR1C1 = "Intento enviado" Sheets("Data").Columns("A:J").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:J2"), CopyToRange:=Range("L1:U1"), Unique:=False Columns("L:U").Select ' se ordenan las actividades en por fecha de aparición (así se sabe la fecha de creaciòn) ActiveWorkbook.Worksheets("Lista_cuestionarios").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Lista_cuestionarios").Sort.SortFields.Add2 Key:= _ Range("U:U"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With ActiveWorkbook.Worksheets("Lista_cuestionarios").Sort .SetRange Range("L:U") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ' se mueve los resultados para que aparezcan en la 1º fila, y se borra los remanentes de las operaciones intermedias Columns("L:U").Select ActiveSheet.Range("$L:$U").RemoveDuplicates Columns:=4, Header:=xlYes Range("O:O,U:U").Select Selection.Copy Range("A1").Select ActiveSheet.Paste Columns("C:AE").Select Selection.ClearContents Range("C1").Select ActiveCell.FormulaR1C1 = "=COUNTA(C[-2])" Dim numerotareas As Long numerotareas = Range("C1").Value numerotareas = numerotareas - 1 Range("C2").Select ActiveCell.FormulaR1C1 = "1" Range("C2").Select Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _ Step:=1, Stop:=numerotareas, Trend:=False Range("C1").Select ActiveCell.FormulaR1C1 = "NumeroDeCuestionario" ' se añade una cabecera (la palabra NumeroDeTarea) a la columna C End Sub Sub Lista_tareas() ' ' Lista_tareas Macro ' 'Se crea un filtro avanzado para seleccionar solo las activiades con Nombre evento=Intento enviado (es decir aquellos cuestionarios enviados) Sheets("Data").Select Rows("1:1").Select Selection.Copy Sheets("Lista_tareas").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Range("D2").Select ActiveCell.FormulaR1C1 = "Tarea*" Sheets("Data").Columns("A:J").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:J2"), CopyToRange:=Range("L1:U1"), Unique:=False Columns("L:U").Select ' se ordenan las actividades en por fecha de aparición (así se sabe la fecha de creaciòn) ActiveWorkbook.Worksheets("Lista_tareas").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Lista_tareas").Sort.SortFields.Add2 Key:= _ Range("U:U"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With ActiveWorkbook.Worksheets("Lista_tareas").Sort .SetRange Range("L:U") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ' se mueve los resultados para que aparezcan en la 1º fila, y se borra los remanentes de las operaciones intermedias Columns("L:U").Select ActiveSheet.Range("$L:$U").RemoveDuplicates Columns:=4, Header:= _ xlYes Range("O:O,U:U").Select Selection.Copy Range("A1").Select ActiveSheet.Paste Columns("C:AE").Select Selection.ClearContents Range("C1").Select ActiveCell.FormulaR1C1 = "=COUNTA(C[-2])" Dim numerotareas As Long numerotareas = Range("C1").Value numerotareas = numerotareas - 1 Range("C2").Select ActiveCell.FormulaR1C1 = "1" Range("C2").Select Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _ Step:=1, Stop:=numerotareas, Trend:=False Range("C1").Select ActiveCell.FormulaR1C1 = "NumeroDeTarea" ' se añade una cabecera (la palabra NumeroDeTarea) a la columna C Sheets("Resultados").Select ' se vuelve a la pagina Resultados ' End Sub Sub Cuestionarios_realizados() ' ' Cuestionarios_realizados Macro ' ' ' borro la hoja Cuestionarios_realizados Sheets("Cuestionarios_realizados").Select Cells.Select Selection.Delete Shift:=xlUp 'Se crea un filtro avanzado para seleccionar solo las activiades con Nombre evento=Intento enviado y filtrando al usuario por nombre Sheets("Data").Select Rows("1:1").Select Selection.Copy Sheets("Cuestionarios_realizados").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Range("E2").Select ActiveCell.FormulaR1C1 = "Cuestionario" Range("F2").Select ActiveCell.FormulaR1C1 = "Intento enviado" 'copio al nombre del usuario de la lista Sheets("Pregrafica").Select Range("D1").Select Selection.Copy Sheets("Cuestionarios_realizados").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("J2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE("">="",Pregrafica!R[3]C[-8])" Sheets("Data").Columns("A:J").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:J2"), CopyToRange:=Range("L1:U1"), Unique:=False Columns("L:U").Select ' se ordenan las actividades en por fecha de aparición (así se sabe la fecha de creaciòn) ActiveWorkbook.Worksheets("Cuestionarios_realizados").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Cuestionarios_realizados").Sort.SortFields.Add2 Key:= _ Range("U:U"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal With ActiveWorkbook.Worksheets("Cuestionarios_realizados").Sort .SetRange Range("L:U") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Sheets("Cuestionarios_realizados").Select Columns("L:U").Select Selection.Copy Range("W1").Select ActiveSheet.Paste Columns("W:AF").Select Application.CutCopyMode = False ActiveSheet.Range("$W:$AF").RemoveDuplicates Columns:=4, Header:=xlYes 'imprimiir resultados ' borramos datos antiguos Sheets("Resultados").Select Range("A34:AU398").Select Selection.ClearContents With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone ' filtramos la lista de cuestionarios por fecha inicio / fin introducida por el usr. Lista_cuestionarios_fecha 'contamos el nº de actividades hechas Sheets("Resultados").Select Range("A40").Select ActiveCell.FormulaR1C1 = "=COUNTA(Lista_cuestionarios_fecha!C[1])-1" Dim cuest_total As Integer cuest_total = Range("A40").Value If (cuest_total <= 0) Then Range("a40").Select ActiveCell.FormulaR1C1 = "No hay cuestionarios enviados en el rango de fechas especificado" Exit Sub End If 'creamos tabla de resultados Range("A42").Select ActiveCell.FormulaR1C1 = "NOMBRE CUESTIONARIO" Range("B42").Select ActiveCell.FormulaR1C1 = "NÚMERO DE INTENTOS" Sheets("Lista_cuestionarios_fecha").Select Range("A2:A" & cuest_total + 1).Select Selection.Copy Sheets("Resultados").Select Range("A43").Select ActiveSheet.Paste 'Columns("A:A").EntireColumn.AutoFit 'contamos el nº de intentos por cada cuestionario de la tabla Lista_cuestionarios_fecha Range("B43").Select ActiveCell.FormulaR1C1 = _ "=COUNTIF(Cuestionarios_realizados!C[13],Resultados!RC[-1])" Range("B43").Select Selection.AutoFill Destination:=Range("B43:B" & cuest_total + 43 - 1), Type:=xlFillDefault 'Columns("B:B").EntireColumn.AutoFit Dim cuest_alumno As Integer Range("A40").Select ActiveCell.FormulaR1C1 = "=COUNTA(Cuestionarios_realizados!C[25])-1" cuest_alumno = Range("A40").Value ActiveCell.FormulaR1C1 = "Cuestionarios enviados: " & cuest_alumno & " de " & cuest_total 'colorear tabla Range("A40").Select With Selection.Font .Name = "Calibri" .Size = 18 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontMinor End With Range("A42:B42").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 15773696 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlBottom .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Range("A43:B" & cuest_total + 43 - 1).Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent1 .TintAndShade = 0.599993896298105 .PatternTintAndShade = 0 End With Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub