Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Francisco 05-05-08
Programacin : Ofimtica
Ficheros
Option Explicit
Const SUBCARPETA = "Encuestas"
'BOTN 1 DE INICIO
Sub Guardar()
'''ActiveWorkbook.SaveAs
Select Case Application.LanguageSettings.LanguageID(msoLanguageIDUI)
Case 3082: SendKeys "%au" ' [A]rchivo->G[u]ardar como...
Case Else: SendKeys "%fa" ' [F]ile->Save [A]s...
End Select
End Sub
'BOTN 2 DE INICIO
Sub GuardarEncuestas()
'Crear una encuesta para cada alumno en la subcarpeta "encuestas"
'Hay que copiar las hojas en este orden: valoracion, evaluacion y datos
Dim
Dim
Dim
Dim
Dim
Dim
Dim
libroInicial As Workbook
hojaInicio As Worksheet
ruta As String, archivo As String, plantilla As String
nombreArchivo As String, alumno As String, mensaje As String
celda As range
fso As FileSystemObject
respuesta As Integer, cuentaEncuestas As Integer
.DisplayHeadings = False
.DisplayWorkbookTabs = False
End With
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveWorkbook.SaveAs plantilla, FileFormat:=xlTemplate
ActiveWorkbook.Close
'Por cada alumno del rango alumnos creamos un libro
' a partir de la plantilla y copiamos unos datos
cuentaEncuestas = 0
For Each celda In range("alumnos")
alumno = Trim(celda.Value)
If alumno = "" Then Exit For
archivo = ruta & "\Encuesta de " & alumno & ".xls"
If Dir(archivo) = "" Then
respuesta = vbYes
Else
respuesta = MsgBox("Ya existe la encuesta de " & alumno & ".
Volverla a crear?", _
vbExclamation + vbYesNo, archivo)
End If
If respuesta = vbYes Then
Workbooks.Add Template:=plantilla
ActiveSheet.range("e12") = hojaInicio.range("e5")
ActiveSheet.range("e14") = hojaInicio.range("e6")
ActiveSheet.range("e16") = alumno
ActiveSheet.range("e18") = hojaInicio.range("e7")
ActiveSheet.range("e20") = hojaInicio.range("e8")
ActiveWorkbook.SaveAs archivo, FileFormat:=xlNormal
ActiveWorkbook.Close
cuentaEncuestas = cuentaEncuestas + 1
End If
Next
'Ya no es necesaria la plantilla que hemos creado
If Dir(plantilla) <> "" Then Kill plantilla
'Mensaje final
MsgBox "Se han guardado " & cuentaEncuestas & " encuestas en " &
vbCrLf & ruta, vbInformation
End Sub
'BOTN 3 DE INICIO
Sub AbrirEncuestas()
'Abre las encuestas ya rellenadas y copia el rango "encuesta" en filas
sucesivas del rango "datos"
On Error GoTo Errores
''ActiveWorkbook.Application.Visible = False
Dim libroInicial As Workbook
Set libroInicial = ActiveWorkbook
Dim fichero As String, mensaje As String, ruta As String
fila
cell = "0"
Next
MsgBox "Se han ledo " & cuenta & " encuestas" & vbCrLf & vbCrLf
& mensaje, vbInformation
End If
Salida:
''ActiveWorkbook.Application.Visible = True
Exit Sub
Errores:
MsgBox Err.Description, vbCritical
Resume Salida
End Sub
'BOTN 4 DE INICIO
Sub IrAHojaRevision()
Sheets("revision").Select
range("numAlumno").Select
End Sub
Option Explicit
'Funciones utilizadas en frmulas de la hoja "evaluacin"
Function ExtraerNumero(texto) As Currency
'Extrae el nmero que hay al principio del texto
Dim pos As Integer, largo As Integer
Dim car As String * 1
largo = Len(texto)
For pos = 1 To largo
car = Mid(texto, pos, 1)
If InStr("0123456789,.", car) = 0 Then
texto = Mid(texto, 1, pos - 1)
Exit For
End If
Next
If IsNumeric(texto) Then
ExtraerNumero = CCur(texto)
Else
ExtraerNumero = 0
End If
End Function
Function RelacionRango(numero, minimo, maximo) As Currency
'Indica la relacin (tanto por uno) del nmero respecto al rango
(minimo..maximo)
' Si numero es minimo da 0
' Si numero es maximo da 1
numero = ExtraerNumero(numero)
RelacionRango = (numero - minimo) / (maximo - minimo)
End Function
Function MostrarPorcentaje(tantoPorUno) As String
'ROUND(AVERAGE(G25:G33)*100;2)&"%"
If IsNumeric(tantoPorUno) Then
MostrarPorcentaje = Round(tantoPorUno * 100, 2) & "%"
Else
MostrarPorcentaje = ""
End If
End Function
'Macros usadas en la hoja "evaluacin"
Sub IrAHojaInicio()
Sheets("inicio").Select
End Sub
Sub SiguienteRevision()
Call revision(1)
End Sub
Sub AnteriorRevision()
Call revision(-1)
End Sub
Function revision(avanzar)
Dim celda As range
Dim numero As Integer
Set celda = range("numAlumno")
numero = celda.Value
numero = numero + avanzar
If numero < 0 Then
numero = 25
ElseIf numero > 25 Then
numero = 0
End If
celda.Value = numero
End Function