VBA – TDU y Manejo de Archivos

Slides:



Advertisements
Presentaciones similares
SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR
Advertisements

1 Datos sobre webloggers Datos extraidos de la encuesta a webloggers disponibles en la web de los autores.
IBD Curso 2007 Clase 2.
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
1 LA UTILIZACION DE LAS TIC EN LAS MICROEMPRESAS GALLEGAS. AÑO mayo 2005.
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS ( Resumen PYMES ) Noviembre de 2004.
Interfases Contables en CIO
TEMA 2 MÚLTIPLOS Y DIVISORES
02- PLAN DOCENTE Febrero 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
01- OFERTA FORMATIVA v.2 Noviembre 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
Respuestas Buscando a Nemo.
ABECEDARIO FIGURAS GEOMÉTRICAS NÚMERO
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
MOVIMIENTO ARMÓNICO SIMPLE MOVIMIENTO ARMÓNICO SIMPLE
SIMATICA V2.0. Automatización de Viviendas con Simatic S7-200
PROGRAMACIÓN CON VISUAL BASIC.
Manejo de errores y excepciones
CLASE 3 SOFTWARE DEL MICROPROCESADOR
Programación en C para electrónica
Funciones Excel. Parte 1. Introducción 2 Una función Excel es una fórmula o un procedimiento que se realiza en el ambiente de Visual Basic, fuera de.
Lenguajes de programación
Parte 3. Descripción del código de una función 1.
EL OSO APRENDIZ Y SUS AMIGOS
Programación, Algoritmos y Estructuras de Datos
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
VARIABLES Y CONSTANTES
Tema 2: Lenguaje PHP básico
Módulo 5: Estructuras de Decisión y Bucles
¿Qué es un conjunto? Un conjunto es una colección de objetos considerada como un todo. Los objetos de un conjunto son llamados elementos o miembros del.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
3. INTRODUCCIÓN A LA PROGRAMACIÓN
INTRODUCCIÓN A LA PROGRAMACIÓN
Teoría de lenguajes y compiladores
Índice Sesión I Bloque I (09:30 a 10:30 Horas) Configuración Inicial
VISUAL BASIC CONSOLA Todas las ordenes o instrucciones se digitan dentro de sub Main() y End Sub ÁREA DE TRABAJO: Las aplicaciones de consola son aquellas.
Conceptos Básicos de Java
Realimentacion de la salida
VBA - Procedimientos Subprogramas (Procedimientos): Procedimientos Sub
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
POO Java Módulo 3 Elementos de programas Identificadores
Estructuras de control
Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*
Matrices Es una estructura homogénea, compuesta por varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria A cada elemento se.
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
Archivos.
Variables y Shapes. Variables ► Lugares de la memoria que reciben un nombre ► En VB no es necesario declarar las variables  A=8 ► Se declaran con Dim.
Informática Ingeniería en Electrónica y Automática Industrial
Conversión cadena a número
Clase 10: Estructuras de datos y arreglos.
Microsoft© Visual Basic . Net.
Programación en Pascal
Control de errores visual basic
Archivos Programación I MC Beatriz Beltrán Martínez.
Teoría – Alejandro Gonzalez
Módulo 8: Manejo de Errores y Excepciones
Programación orientada a objetos. El método main es el comportamiento por el cual comienzan todos los programas en Java, de la misma forma en la que C,
Elementos básicos del lenguaje
Arreglos y comunicación Usuario
por: Prof. Luis Vallenilla
Sistemas de Archivos Sistemas Operativos.  Se debe proporcionar un almacenamiento secundario que respalda a la memoria principal  El Sistema de archivos.
Visual Basic FUNCIONES Y PROCEDIMIENTOS
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
“variables , sentencia if y bucles”
Lic. Carla Aguirre Montalvo
Instituto Tecnológico Superior de Libres Ingeniería en Sistemas Computacionales Segundo semestre Materia: Programación Orientada a Objetos Asesora: Ing.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Visual Basic Prof.: Carol Briones García. Uso de Archivos  Definición  Es un conjunto de información que se almacena en algún medio de escritura que.
Manejo de archivos de texto.  Unidad fundamental de almacenamiento dentro del ámbito de la informática. Alberga un conjunto de datos que es posible leer,
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 5.
Transcripción de la presentación:

VBA – TDU y Manejo de Archivos TDU (Tipos de datos Definidos por el Usuario) Manejo de Archivos

Repaso: Tipos de Datos Las variables son marcadores de posición que se utilizan para almacenar valores; tienen un nombre y un tipo de dato. El tipo de dato determina la clase de datos que pueden almacenar las variables: numéricos (Byte, Integer, Long, Single, Double, Currency), alfanuméricos (String), lógicos (Boolean), otros (Variant, Date, Object, etc.). Una variable Variant es capaz de almacenar todos los tipos de datos definidos en el sistema. Clase 9

Repaso: Tipos de Datos De forma predeterminada, si no se proporciona un tipo de dato o no se declara, la variable toma el tipo de dato Variant. El valor por defecto de una variable del tipo Variant es Empty Las variables de tipo String pueden ser de longitud variable o de longitud fija: Dim variable As String  Longitud variable Dim variable As String*tamaño  Longitud fija Clase 9

Repaso: Tipos de Datos Para evitar problemas al equivocarse de nombre en las variables, puede estipular que Visual Basic le avise siempre que encuentre un nombre que no se haya declarado explícitamente como una variable incluyendo en la sección Declaraciones del módulo de formulario o estándar la instrucción: Option Explicit Es este caso, VB generará un error cuando encuentre una variable no declarada. Clase 9

Text1 es un objeto en la interfaz gráfica Repaso: Tipos de Datos La asignación de datos a variables se realiza mediante el operador de asignación (=): Dim A As Integer A = 20 Si la variable es un objeto, se debe anteponer la palabra clave Set antes de la asignación: Dim txt As TextBox Set txt = Text1 Text1 es un objeto en la interfaz gráfica Clase 9

Crear tipos de datos: TDU Se pueden combinar variables de varios tipos diferentes para crear tipos definidos por el usuario (conocidos como TDU). Los tipos definidos por el usuario son útiles si se quiere crear una única variable que registre varias unidades de información relacionadas. Para crear un TDU se utiliza la instrucción Type en la sección Declaraciones del módulo. Clase 9

Crear tipos de datos: TDU La sintaxis de la instrucción Type es: Alcance Type NombreTDU Elemento1 As Tipo Elemento2 As Tipo ... ElementoN As Tipo End Type Alcance: Opcional. Es el alcance del tipo de dato. Puede ser Private o Public. Si no se especifica se asume Public. Clase 9

Crear tipos de datos: TDU NombreTDU: Requerido. Es el nombre del tipo de dato. Elemento1, Elemento2, …, ElementoN: Son los nombres de los elementos del TDU. Debe existir al menos uno. Tipo: Corresponde a un tipo de dato del sistema u otro TDU previamente definido. Si un TDU tiene un alcance privado (Private), sólo se puede utilizar en el módulo donde está definido. Clase 9

Crear tipos de datos: TDU Si un TDU tiene un alcance público (Public), se puede utilizar en cualquier parte. Los módulos de formulario (archivos *.frm) sólo pueden tener declaraciones TDU y variables TDU privadas. Los módulos estándar (archivos *.bas) pueden tener declaraciones TDU y variables TDU privadas o públicas. Los elementos del TDU pueden ser “variables normales”, arreglos u otro TDU. Clase 9

Crear tipos de datos: TDU Para acceder a un elemento de un TDU se usa el operador punto: variableTDU.elemento Asignar y recuperar los valores de los elementos de una variable TDU es similar a establecer y obtener propiedades: variableTDU.elemento = valor También puede asignar una variable a otra si ambas son del mismo TDU: variable1TDU = variable2TDU Clase 9

Crear tipos de datos: TDU Una vez que se define un TDU, éste entra a formar parte de los tipos de datos disponibles en el proyecto: Clase 9

Ejemplo 1 Para un conjunto de puntos (x, y), contar cuántos están sobre el origen, el eje x, el eje y, el primer cuadrante, el segundo cuadrante, el tercer cuadrante y el cuarto cuadrante. Clase 9

Ejemplo 1: Definición de variables Datos de entrada: N  Número de puntos Pi  Elemento i-ésimo del vector de puntos. Cada punto tiene un valor X y un valor Y Datos de salida: Origen  Número de puntos sobre el origen EjeX  Número de puntos sobre el eje X EjeY  Número de puntos sobre el eje Y Clase 9

Ejemplo 1: Definición de variables Cuad1  Número de puntos sobre el primer cuadrante Cuad2  Número de puntos sobre el segundo cuadrante Cuad3  Número de puntos sobre el tercer Cuad4  Número de puntos sobre el cuarto Clase 9

Ejemplo 1: Código fuente '(en General-Declaraciones) Option Explicit 'Requerir declaración de variables 'Declaración del TDU Punto Private Type Punto X As Single Y As Single End Type 'Declaración de variables Dim N As Integer, P() As Punto Dim I As Integer, Origen As Integer Dim EjeX As Integer, EjeY As Integer Dim Cuad1 As Integer, Cuad2 As Integer Dim Cuad3 As Integer, Cuad4 As Integer Clase 9

Ejemplo 1: Código fuente '(en el evento Click de un CommandButton) 'Inicialización de variables Origen = 0 EjeX = 0: EjeY = 0 Cuad1 = 0: Cuad2 = 0 Cuad3 = 0: Cuad4 = 0 'Lectura de datos N = Val(InputBox("Ingrese el número de Puntos:")) ReDim P(1 To N) For I = 1 To N P(I).X = Val(InputBox("X(" & I & ") =")) P(I).Y = Val(InputBox("Y(" & I & ") =")) Next I Clase 9

Ejemplo 1: Código fuente 'Cálculos For I = 1 To N If P(I).X = 0 And P(I).Y = 0 Then Origen = Origen + 1 ElseIf P(I).Y = 0 Then EjeX = EjeX + 1 ElseIf P(I).X = 0 Then EjeY = EjeY + 1 ElseIf P(I).X > 0 And P(I).Y > 0 Then Cuad1 = Cuad1 + 1 ElseIf P(I).X < 0 And P(I).Y > 0 Then Cuad2 = Cuad2 + 1 ElseIf P(I).X < 0 And P(I).Y < 0 Then Cuad3 = Cuad3 + 1 Else Cuad4 = Cuad4 + 1 End If Next I Clase 9

Ejemplo 1: Código fuente 'Mostrar resultados Dim Aux As String Aux = Aux & "Origen = " & Origen & vbCrLf Aux = Aux & "EjeX = " & EjeX & vbCrLf Aux = Aux & "EjeY = " & EjeY & vbCrLf Aux = Aux & "Cuad1 = " & Cuad1 & vbCrLf Aux = Aux & "Cuad2 = " & Cuad2 & vbCrLf Aux = Aux & "Cuad3 = " & Cuad3 & vbCrLf Aux = Aux & "Cuad4 = " & Cuad4 & vbCrLf Text1.Text = Aux Clase 9

Manejo de Archivos Un archivo es un conjunto de datos relacionados ubicados en un disco. Dependiendo del tipo de datos que contiene el archivo, se usa el tipo de acceso apropiado. En VB hay tres tipos de acceso a archivos: Secuencial: para leer y escribir archivos de texto en bloques continuos. Aleatorio: para leer y escribir archivos binarios de texto o estructurados como registros de longitud fija. Binario: para leer y escribir archivos estructurados de forma arbitraria. Clase 9

Manejo de Archivos El tipo de acceso a archivos que se utilizará en este curso es el tipo de acceso secuencial. El acceso secuencial está diseñado para usarlo con archivos de texto normales como los archivos creados con un editor de textos típico (como el Bloc de Notas). Un archivo abierto para acceso secuencial permite: Leer datos desde el archivo (Input) Escribir datos en el archivo (Output) Anexar datos en el archivo (Append) Clase 9

Open archivo For modo As #numArchivo Instrucción Open Para abrir un archivo para acceso secuencial, se usa la instrucción Open. Sintaxis: Open archivo For modo As #numArchivo archivo: Requerido. Expresión de cadena que especifica un nombre de archivo; puede incluir el directorio o carpeta y la unidad de disco. modo: Requerido. Palabra clave que especifica el modo de archivo: Input (Lectura), Output (Escritura), Append (Escritura, agregando datos) Clase 9

Instrucción Open #numArchivo: Requerido. Un número de archivo válido entre 1 y 511 inclusive. El carácter # es opcional. Para obtener el siguiente número de archivo disponible se utiliza la función FreeFile. Si la ruta del archivo no se incluye en archivo, VB buscará el archivo en el directorio actual. El directorio actual, inicialmente, es la carpeta desde donde se ejecuta la aplicación. Para cambiar el directorio actual se utiliza la instrucción ChDir. Clase 9

Instrucción Open Cuando se abre un archivo secuencial en modo Input, el archivo ya debe existir; de lo contrario se produce un error. Cuando se abre un archivo que no existe en modo Output o Append, la instrucción Open primero crea el archivo y luego lo abre. Para cerrar un archivo abierto con la instrucción Open se utiliza la instrucción Close. Clase 9

FreeFile(numIntervalo) Función FreeFile Devuelve un tipo Integer que indica el siguiente número de archivo disponible para su uso en la instrucción Open. Sintaxis: FreeFile(numIntervalo) numIntervalo: Opcional. Un valor entero 0 o 1. Si numIntervalo es 0 (predeterminado), FreeFile devuelve un número de archivo entre 1 y 255, inclusive. Si numIntervalo es 1, FreeFile devuelve un número de archivo entre 256 y 511. Clase 9

Instrucción Close Cierra un archivo secuencial abierto con la instrucción Open. Sintaxis: Close #numArchivo #numArchivo: Opcional. Es cualquier número de archivo válido. El carácter # es opcional. Si se omite, Close cierra todos los archivos abiertos con la instrucción Open. Se pueden cerrar varios archivos separando cada numero de archivo con una coma en la misma instrucción Close. Clase 9

Instrucción ChDir Cambia el directorio o carpeta actual. Sintaxis: ChDir ruta ruta: Requerido. Un String que identifica el directorio o carpeta que va a ser el nuevo directorio o carpeta actual. Si no existe se genera un error. La ruta puede incluir la unidad de disco. Si no se especifica la unidad, la instrucción ChDir cambia el directorio de la unidad actual. Clase 9

Instrucción ChDrive Cambia la unidad de disco actual. Sintaxis: ChDrive unidad unidad: Requerido. Un String que especifica una unidad de disco existente. Si unidad es una cadena de longitud cero (""), la unidad de disco actual no cambia. Si unidad no existe se genera un error. Clase 9

App.Path La propiedad Path del objeto App (objeto global que guarda información de la aplicación) devuelve un String con la ruta de acceso desde donde se está ejecutando la aplicación. App.Path especifica la ruta de acceso del archivo .vbp de proyecto cuando se ejecuta la aplicación desde el entorno de desarrollo, o la ruta de acceso del archivo .exe cuando se ejecuta la aplicación como un archivo ejecutable. Utilice la instrucción ChDir App.Path para cambiar la carpeta actual al directorio de ejecución de la aplicación. Clase 9

Lectura y escritura de datos Para leer datos desde un archivo secuencial se puede utilizar: La instrucción Input # La instrucción Line Input # La función Input() Para escribir datos en un archivo secuencial se puede utilizar: La instrucción Print # La instrucción Write # Clase 9

Input #numArchivo, listaVariables Instrucción Input # Lee datos de un archivo secuencial abierto y asigna esos datos a variables. Sintaxis: Input #numArchivo, listaVariables numArchivo: Requerido. Cualquier número de archivo válido. listaVariables: Requerido. Lista de variables delimitada por comas que se le asignan los valores que se leen del archivo. Clase 9

Instrucción Input # Las variables a leer con la instrucción Input # no pueden ser una matriz o una variable de objeto. Sin embargo, es posible usar variables que describen elementos de una matriz o de un tipo definido por el usuario. Los elementos de datos de un archivo deben aparecer en el mismo orden que tienen las variables en listavariables y deben coincidir con variables del mismo tipo de datos. Clase 9

Instrucción Input # Si una variable es numérica y los datos no lo son, se asigna un valor cero a esa variable. Si se llega al fin del archivo cuando se está leyendo un elemento de datos, se da por terminada la entrada y se produce un error. La instrucción Input # ignora las comillas dobles ("") en la entrada de datos. Esta instrucción reconoce como separador válido de datos a la coma (,) y al Enter. Otro separador puede producir resultados inesperados. Clase 9

Instrucción Line Input # Lee una línea de un archivo secuencial abierto y la asigna a una variable String. Sintaxis: Line Input #numArchivo, variable numArchivo: Requerido. Cualquier número de archivo válido. El carácter # es obligatorio. variable: Requerido. Una variable de tipo String. Clase 9

Instrucción Line Input # La instrucción Line Input # lee un carácter en el archivo hasta que encuentra un retorno de carro (ASCII 13) o una secuencia retorno de carro-avance de línea (ASCII 13 – ASCII 10) y luego almacena en variable los caracteres leídos. Las secuencias de retorno de carro-avance de línea no se tienen en cuenta y no se añaden a la cadena de caracteres. Clase 9

Input(numCar, #numArchivo) Función Input Devuelve un tipo String que contiene caracteres de un archivo abierto en modo Input. Sintaxis: Input(numCar, #numArchivo) numCar: Requerido. Un entero correspondiente al número de caracteres a leer. #numArchivo: Requerido. Un número de archivo válido. El carácter # es opcional. Clase 9

Función Input A diferencia de la instrucción Input #, la función Input devuelve todos los caracteres que lee, incluyendo puntos y coma, retornos de carro, avances de línea, comillas y espacios iniciales. Para leer todo el contenido del archivo, utilice la función LOF para determinar el número de caracteres que tiene el archivo. LOF(numArchivo)  Devuelve un tipo Long que indica el número de caracteres de un archivo abierto mediante la instrucción Open. Clase 9

Función EOF Devuelve un tipo Boolean que indica si se llegó al final de un archivo abierto. Sintaxis: EOF(numArchivo) numArchivo: Requerido. Un número de archivo válido. La función EOF devuelve True cuando se llega al final del archivo en caso contrario devuelve False. Clase 9

Print #numArchivo, exp poscar Instrucción Print # Escribe datos en un archivo secuencial. Sintaxis: Print #numArchivo, exp poscar #numArchivo: Requerido. Un número de archivo válido. El carácter # es obligatorio. exp: Opcional. La expresión a escribir en el archivo. poscar: Opcional. Especifica el punto de inserción del carácter siguiente. Si se omite, el siguiente carácter se imprime en la línea siguiente. Clase 9

Instrucción Print # Utilice un punto y coma (;) en poscar para situar el punto de inserción inmediatamente a continuación del último carácter mostrado. Utilice una coma (,) ó Tab para situar el punto de inserción al principio de la siguiente zona de impresión. La instrucción Print # no escribe comillas dobles alrededor de una expresión de tipo String. Clase 9

Write #numArchivo, listaExp poscar Instrucción Write # Escribe datos en un archivo secuencial. Sintaxis: Write #numArchivo, listaExp poscar #numArchivo: Requerido. Un número de archivo válido. El carácter # es obligatorio. listaExp: Opcional. Una o varias expresiones delimitadas por comas, espacios o puntos y comas (;) que se desean escribir en el archivo. La instrucción Write # imprime una coma en el archivo por cada expresión que se escriba en el archivo y comillas dobles alrededor de expresiones de tipo String. Clase 9

Instrucción Write # poscar: Opcional. Especifica el punto de inserción del carácter siguiente. Puede ser una coma (,) o un punto y coma (;). Si se omite, el siguiente carácter se imprime en la línea siguiente. poscar igual a una coma (,) tiene el mismo efecto que poscar igual a un punto y coma (;): situar el punto de inserción inmediatamente a continuación del último carácter mostrado, separando los datos por una coma en el archivo. Clase 9

Ejemplo 2 El archivo “Datos.txt” contiene varios registros con los siguientes datos de estudiantes: sexo (“M”, “F”), edad ([14, 35]), código de la comuna donde vive ([1, 16]). Elaborar un programa en VB que efectúe los siguientes procesos: Leer todos los registros de datos. Calcular el total y el porcentaje de mujeres y de hombres. Calcular el total y el porcentaje de los mayores de edad y de los menores de edad. Determinar el porcentaje de los estudiantes que viven en las comunas de código impar pero distinto de 3. Clase 9

Ejemplo 2: Definición de variables Datos de entrada: Ei  Registro i-ésimo de un estudiante. Cada registro tiene: - Un elemento Sexo de tipo String - Un elemento Edad de tipo Integer - Un elemento CodComuna de tipo Integer Datos de salida: NumH  Número total de Hombres NumM  Número total de Mujeres PorcH  Porcentaje de Hombres PorcM  Porcentaje de Mujeres Clase 9

Ejemplo 1: Definición de variables MenE  Número de menores de edad MayE  Número de mayores de edad PorcMenE  Porcentaje de menores de edad PorcMayE  Porcentaje de mayores de edad PorcImpar  Porcentaje de estudiantes que viven en comunas de código impar y distinto de 3. Variables auxiliares: N  Contador de estudiantes NumImpar  Número de estudiantes que viven en comunas de código impar y distinto de 3. Clase 9

Ejemplo 1: Código fuente '(en un módulo estándar) 'Requerir declaración de variables Option Explicit 'Declaración del TDU Estudiante Public Type Estudiante Sexo As String * 1 Edad As Integer CodComuna As Integer End Type 'Declaración de variables globales Dim N As Integer, E() As Estudiante, NumH As Integer Dim NumM As Integer, PorcH As Single, PorcM As Single Dim MenE As Integer, MayE As Integer Dim PorcMenE As Single, PorcMayE As Single Dim PorcImpar As Single, NumImpar As Integer

Ejemplo 1: Código fuente '(en el evento Click de un CommandButton) ChDrive App.Path 'Cambiamos el drive actual ChDir App.Path 'Cambiamos el directorio actual 'Abrimos el archivo Dim NumArch As Integer NumArch = FreeFile() Open "Datos.txt" For Input As #NumArch 'Leer datos mientras no sea el final del archivo N = 0 Do While Not EOF(NumArch) N = N + 1 ReDim Preserve E(1 To N) Input #NumArch, E(N).Sexo, E(N).Edad, E(N).CodComuna Loop Close #NumArch Clase 9

Ejemplo 1: Código fuente 'Cálculos NumH = 0: NumM = 0: MenE = 0: MayE = 0: NumImpar = 0 Dim I As Integer For I = 1 To N If E(I).Sexo = "M" Then: NumH = NumH + 1 Else: NumM = NumM + 1: End If If E(I).Edad < 18 Then: MenE = MenE + 1 Else: MayE = MayE + 1: End If If E(I).CodComuna Mod 2 = 1 And _ E(I).CodComuna <> 3 Then NumImpar = NumImpar + 1 Next I PorcH = NumH / N: PorcM = NumM / N PorcMenE = MenE / N: PorcMayE = MayE / N PorcImpar = NumImpar / N Clase 9

Ejemplo 1: Código fuente 'Mostrar resultados Dim Aux As String Aux = Aux & "NumH = " & NumH & vbCrLf Aux = Aux & "NumM = " & NumM & vbCrLf Aux = Aux & "PorcH = " & PorcH & vbCrLf Aux = Aux & "PorcM = " & PorcM & vbCrLf Aux = Aux & "MenE = " & MenE & vbCrLf Aux = Aux & "MayE = " & MayE & vbCrLf Aux = Aux & "PorcMenE = " & PorcMenE & vbCrLf Aux = Aux & "PorcMayE = " & PorcMayE & vbCrLf Aux = Aux & "PorcImpar = " & PorcImpar & vbCrLf I = FreeFile() Open "Resultados.txt" For Output As #I Print #I, Aux Close #I Clase 9