UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA Apunte de Visual Basic de Excel aplicado a Hormigón Armado I USM Campus Santiago I Semestre 2015
Hormigón Armado I, UTFSM Santiago.
TABLA DE CONTENIDOS 1. ALCANCE
4
2. NOCIONES BÁSICAS
5
2.1. INGRESAR AL AMBIENTE VISUAL BASIC 2.2. AMBIENTE VISUAL BASIC 2.3. ENTRANDO A UN ESPACIO DE PROGRAMACIÓN
5 7 8
3. PROGRAMACIÓN
10
3.1. VARIABLES 3.1.1. TIPOS DE VARIABLES 3.1.2. DECLARACIÓN DE UNA VARIABLE 3.2. DECLARACIÓN DE UNA SUB 3.3. DECLARACIÓN DE UNA FUNCIÓN 3.4. SENTENCIAS BÁSICAS DE PROGRAMACIÓN 3.4.1. DECLARACIÓN DE UN "FOR" 3.4.2. DECLARACIÓN DE UN "IF" 3.4.3. DECLARACIÓN DE UN "SELECT CASE" 3.4.4. DECLARACIÓN DE UN "DO WHILE". 3.5. LLAMADO DE SUB, FUNCIONES Y VARIABLES DESDE OTRAS SECCIONES 3.6. HERRAMIENTAS ÚTILES DE VISUAL BASIC 3.6.1. MENSAJE EN PANTALLA 3.6.2. CONCATENAR (&) 3.7. MANEJO DE ARREGLOS (MATRICES). 3.7.1. DECLARACIÓN DE UN ARREGLO 3.7.2. DIMENSIONES DE UN ARREGLO 3.7.3. REDIMENSIONAR UN ARREGLO 3.7.4. PEGAR UN ARREGLO EN UNA HOJA DE CÁLCULO 3.8. MANEJO DE CADENAS DE TEXTO. 3.8.1. FUNCIÓN REPLACE 3.8.2. FUNCIÓN LEN 3.8.3. FUNCIÓN SPLIT 3.8.4. FUNCIÓN LEFT 3.8.5. FUNCIÓN RIGHT 3.8.6. FUNCIÓN MID 3.8.7. FUNCIÓN INSTR 3.8.8. FUNCIÓN JOIN 3.8.9. FUNCIÓN LCASE 3.8.10. FUNCIÓN UCASE 3.9. MANEJO DE ARCHIVOS DE TEXTOS
10 10 11 11 12 14 14 15 16 17 18 19 19 22 22 23 23 24 26 28 29 29 29 29 30 30 30 31 31 31 31
Tutorial
1 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 3.9.1. ABRIR UN ARCHIVO DE TEXTO 3.9.2. LEER UN ARCHIVO DE TEXTO 3.9.3. ESCRIBIR UN ARCHIVO DE TEXTO NUEVO: 3.9.4. ESCRIBIR UN ARCHIVO DE TEXTO CONSERVANDO LO ALMACENADO 3.9.5. EJEMPLO DE UTILIDAD 3.10. FUNCIONES ÚTILES DE MICROSOFT EXCEL 3.10.1. GRABAR MACRO 3.10.2. BUSCARV – BUSCARH 3.10.3. K.ESIMO.MAYOR & K.ESIMO.MENOR 3.11. MANEJO DE CELDAS 3.11.1. REFERENCIAR UNA CELDA MEDIANTE CELLS(). 3.11.2. REFERENCIAR UNA CELDA O RANGO MEDIANTE RANGE() 3.12. RUTINA BUSCAR OBJETIVO 3.12.1. BUSCAR OBJETIVO, FUNCIÓN DE EXCEL. 3.12.2. BUSCAR OBJETIVO, PROGRAMADA EN VISUAL BASIC A. 3.13. FUNCIONES MATEMÁTICAS DE VB. 3.14. FUNCIONES DE EXCEL 3.15. MANEJO DE ERRORES 3.15.1. EVITAR QUE LOS ERRORES DERIVEN EN MOSTRAR EL CÓDIGO
32 32 33 34 34 36 36 38 39 40 40 41 42 42 43 44 45 46 47
4. INTERFAZ GRÁFICA DE VB
49
4.1. INTRODUCCIÓN A LOS FORMULARIOS (USERFORM) 4.1.1. INICIANDO UN FORMULARIO 4.1.2. PROGRAMACIÓN EN UN FORMULARIO 4.2. OBJETOS (CONTROLES) 4.2.1. PROGRAMACIÓN DE LA RUTINA DE RESPUESTA A UNA ACCIÓN DE UN OBJETO 4.2.2. MANEJO DE LAS PROPIEDADES DE UN OBJETO
49 49 50 51 52 53
4.2.3. CUADRO DE TEXTO , TEXTBOX ( 4.2.4. ETIQUETA, LABEL ( )
56 57
4.2.5. 4.2.6. 4.2.7. 4.2.8. 4.2.9.
)
MARCO, FRAME ( ) BOTÓN DE COMANDO, COMMANDBUTTON ( CASILLA DE VERIFICACIÓN, CKECKBOX ( ) BOTÓN DE OPCIÓN, OPTIONBUTTON ( ) CUADRO DE LISTA , LISTBOX ( )
4.2.10. CUADRO COMBINADO, COMBOBOX ( 4.2.11. BOTÓN DE NÚMERO, SPINBUTTON (
)
)
57 58 59 59 60 61
)
62
4.2.12. TOGGLEBUTTON ( ) 4.3. EJECUCIÓN DE RUTINAS
63 64
5. EJEMPLOS APLICADOS A HORMIGÓN ARMADO
65
Tutorial
2 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 5.1. MOMENTO CURVATURA 65 5.1.1. CONSIDERACIONES 65 5.1.2. GEOMETRÍA Y PROPIEDADES DE LA VIGA 66 5.1.3. ANÁLISIS Y DESARROLLO 67 5.1.4. PROGRAMACIÓN EN VISUAL BASIC 67 5.2. ARMADO DE VIGAS 73 5.2.1. DISEÑO VIGA SIMPLEMENTE ARMADA 73 5.2.2. ANÁLISIS DE LA VIGA DOBLEMENTE ARMADA 76 5.2.3. PROGRAMACIÓN EN VISUAL BASIC COMO CÓDIGO 80 5.2.4. INTERACCIÓN EXCEL - VISUAL BASIC 84 5.3. DIAGRAMA DE INTERACCIÓN CARGA AXIAL – MOMENTO 85 5.4. PUNTOS CARACTERÍSTICOS DEL DIAGRAMA DE INTERACCIÓN CARGA AXIAL - MOMENTO 88 5.4.1. PUNTO DE TRACCIÓN PURA : 88 5.4.2. PUNTO DE FLEXIÓN PURA : 88 5.4.3. PUNTO DE BALANCE EN FLEXO COMPRESIÓN : 89 5.4.4. PUNTO DE 90 5.4.5. PUNTO DE : 90 5.4.6. PUNTO DE COMPRESIÓN PURA : 91 5.5. DIAGRAMA DE INTERACCIÓN P-M DE DISEÑO 92 5.6. EJEMPLO DIAGRAMA DE INTERACCIÓN CARGA AXIAL - MOMENTO : 93 5.6.1. CÁLCULO DEL CENTROIDE PLÁSTICO : 94 5.6.2. TRACCIÓN PURA: 94 5.6.3. FLEXIÓN PURA: 94 5.6.4. PUNTO DE : 96 5.6.5. PUNTO DE : 96 5.6.6. PUNTO DE BALANCE EN FLEXO COMPRESIÓN : 97 5.6.7. PUNTO DE COMPRESIÓN PURA: 98 5.6.8. RESUMEN DE LOS PUNTOS CARACTERÍSTICOS : 98 5.7. ELABORACIÓN DE UNA RUTINA EN VISUAL BASIC DE EXCEL QUE CALCULE UN DIAGRAMA DE INTERACCIÓN 99 CARGA AXIAL - MOMENTO. 5.8. DIAGRAMA MOMENTO CURVATURA CON CARGA AXIAL 106 5.8.1. CÓDIGO EN VISUAL BASIC: 109 258.1. GRÁFICA DE KENT & PARK PARA DISTINTAS CUANTÍAS DE CONFINAMIENTO 114 258.1.1. CÓDIGO Y COMENTARIOS: 115 258.1.2. UTILIZACIÓN DEL CÓDIGO MEDIANTE BOTÓN EN PLANILLA . 118
,
,
=. =.
,
,
=. =.
Tutorial
3 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
El presente documento tiene por objetivo acercar al alumno de Hormigón Armado I a las herramientas de análisis contenidas en Microsoft Excel a través de Visual Basic. El documento se encuentra en desarrollo a medida que el curso avanza en contenidos, los cuales se enumeran a continuación: Capitulo Introducción Materiales Diseño
Tópico Condiciones del curso - 1. Introducción NCh 430 - Otra normas 2. Materiales 3. Conceptos de Diseño - Ejemplo 4. Flexión: Comportamiento - Momento-Curvatura - Agrietamiento 4. Flexión: Post-agrietamiento - Rango no lineal
Flexión
4. Flexión: Rango no-lineal 4. Flexión: Diseño sección rectangular refuerzo en tracción - Ref en compresión 4. Flexión: Viga de sección T 4. Flexión - Ejemplos 5. Corte: General - Previo agrietamiento - Post agrietamiento
Corte en Vigas
5. Corte: Post agrietamiento - Diseño 5. Corte: Diseño - Ejemplos 6. Flexo-compresión: Compr. Axial - Flexo-compr. Uniaxial
Flexo-compresión
6. Flexo-compresión: Diseño 6. Flexo-compresión: Cap. de deformación - Flexión Bi-axial 6. Flexo-compresión: Ejemplo Marco
Adherencia y Anclajes Detallamiento Diseño por capacidad
Tutorial
7. Adherencia y Anclajes 8. Detallamiento 9. Diseño por capacidad: Mecanismo de Colapso 9. Diseño por Capacidad: Casos
Profesor Casa Central: curso. Profesor Campus Santiago: Ayudantes Campus Santiago: o Ignacio Mayorga, o Ignacio Ruiz,
Gilberto Leiva,
[email protected], coordinador del Ricardo Bustamante,
[email protected] [email protected] [email protected]
4 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
2.1. Ingresar al Ambiente Visual Basic
Para utilizar Visual Basic para Excel, es necesario ejecutar el software Excel para luego proceder a ejecutar el VB. Importante destacar que al guardar una planilla de Excel en la cual se programará, ésta debe ser guardada como un archivo de Excel habilitada para Macros
∗..
A continuación se mostrará la interfaz de Excel
Ilustración 1-¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..1: Vista "Normal" de una hoja de Excel.
Luego es necesario ejecutar Visual Basic, para lo cual se tienen dos opciones, la primera es tener activada en la barra de herramientas de Excel la sección de Programación (Excel 2010 y anteriores) o de Desarrollador (Excel 2013 y posteriores), como se muestra a continuación:
Tutorial
5 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Ilustración 2-1-¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..2: se muestra cómo abrir Visual Basic mediante las herramientas de Excel.
En la imagen anterior se aprecia que en la barra de herramienta, anteriormente mencionada, se encuentra la opción para acceder a Visual Basic. En el caso que esta no esté activada, se puede activar en la sección de opciones de Excel, yendo a “Archivo” y luego a “Opciones”, en donde se ejecutará la siguiente pantalla:
Ilustración 2-1-¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..3: modo de activar la herramienta programador o desarrollador de Excel.
Tutorial
6 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Luego se tiene que dirigir a la sección de “Personalizar cinta de opciones” y darle un ‘check’ a la opción de “Desarrollador” o “Programación” dependiendo el Excel en el que se esté trabajando.
Una forma más fácil y rápida de entrar a Visual Basic es oprimiendo las teclas "Alt+F11".
2.2. Ambiente Visual Basic Una vez ingresando desde Excel a Visual Basic se observará lo siguiente:
Ilustración 2-2-1: ambiente de trabajo en Visual Basic para Aplicaciones.
La interfaz mostrada anteriormente es idéntica para los distintos Excel. Se aprecia en esta que la pantalla está dividida en dos secciones definidas a continuación: Lado derecho (verde): en esta sección es donde se procederá a programar en todas las secciones
definidas anteriormente y se diseñarán las interfaces gráficas en el caso de los formularios. Lado izquierdo (Rojo): En esta sección se muestran los archivos de Excel que se mantienen
ejecutados en ese momento, en donde cada archivo está subdividido en tres secciones, las cuales tienen ciertas características:
Tutorial
Microsoft Excel Objetos: en esta sección se muestran las hojas de cálculos que posee el archivo seleccionado, además de gráficos y ‘ThisWorkbook’. Ésta última corresponde a la hoja de trabajo del documento. Formularios: en los formularios se muestran los ‘Userform’, los cuales corresponden a la interfaces gráficas que se pueden crear en VB.
7 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Módulos: esta sección está netamente dedicada a la creación de rutinas de programación, macros y creación de funciones dentro de Excel, para ser utilizadas posteriormente tanto en las Hojas de cálculo como en los Formularios
En las tres secciones anteriores se puede programar, la diferencia radica en lo siguiente:
Programar en las hojas de cálculo (Microsoft Excel Objectos) implica que todas las funciones, variables, y rutinas que se programen en una hoja dada, solo podrán ser ejecutadas en esa hoja. En el caso de programar en Thisworkbook lo declarado se puede utilizar en todas las hojas de cálculo. Estos códigos (en hoja de cálculo o en Thisworkbook) no pueden ser utilizados para interfaz gráfica.
Programar en Formularios, la creación de un formulario (Una Interfaz) funciona de manera independiente a las hojas de cálculo, por ende cada formulario genera su espacio para escribir códigos, variables, funciones, rutinas.
Programar en Módulos considera que la información es de uso público, es decir, si declaro una función, esta puede ser llamada tanto de una hoja de cálculo como de un Userform.
Comentario: Lo usual, y a modo de llevar un orden es: en el caso de tener varias hojas de cálculo que se tengan distintas "Macros (códigos que generan una acción)", por hoja, es declarar esas macros en cada hoja (programar en Microsoft Excel Objetos). En el caso de tener una macro que mezcla información de Varias hojas, ideal que esté programada en Thisworkbook. Las funciones generales que se utilizan programarlas en Módulos. Y en el caso de hacer una interfaz, utilizar la programación en Userform y Módulos.
2.3. Entrando a un Espacio de Programación Como se comentó en la sección anterior, existen tres espacios de programación,
Microsoft Excel Objetos Formularios Módulos
La forma de entrar a estos difiere:
Tutorial
En el caso de Microsoft Excel Objetos, basta sólo decidir en qué hoja programar y hacer doble click en ésta. En el caso de Formularios, primeramente se debe crear un nuevo formulario (yendo a Insertar UserForm). Luego creado, click derecho en el Userform Ver código. Como se observa a continuación:
→
→
8 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Ilustración 2-3-1: entrar a un espacio de programación de un formulario.
En la imagen anterior se destacan dos opciones, las cuales corresponden a “Ver código” y “Ver objetos”. Para el caso de formularios direcciona inmediatamente a los objetos ( se
observa la interfaz con sus diferentes objetos como botones, etiquetas, etc.), pero al ingresar a los códigos se abre el espacio para programar.
Tutorial
Y por último, en el caso de los módulos, para entrar al espacio de programación basta solamente te crear y módulo y doble "click" sobre éste.
9 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Se procederá definir los aspectos más importantes de la programación en Visual Basic.
3.1. Variables La capacidad de este programa es bastante amplia en términos de datos de entrada, pudiéndose generar variables del tipo numérico, textos, caracteres entre otros. Además se pueden generar variables con dimensiones, generando así variables de tipo matricial. En este caso se mostrarán algunos de los tipos de variables, las cuales tienen un mayor índice de utilización en el desarrollo de rutinas relacionas a los cursos de “Hormigón Armado”.
3.1.1. Tipos de Variables
Integer:
corresponde a una variable representa los números enteros. (orden de magnitud aprox.: E+9 y E-9).
Single:
corresponden a los números reales, además posee un rango más amplio que los del tipo “Interger” (orden de magnitud aprox.: E+38 y E-45).
Double:
este tipo de variable posee las mismas características de las variables de tipo “single”, la diferencia radica en el orden de magnitud de los máximos
y mínimos. (orden de magnitud aprox.: E+308 y E-324).
Short:
corresponde a una variable numérica de tipo entero, y de valores positivos y negativos (orden de magnitud aprox.: E+4)
Long:
corresponde a una variable numérica de tipo entero, similar a los “Short”, y de valores positivos y negativos (orden de magnitud aprox.: E+18)
String:
corresponden a una de tipo texto, la longitud de ésta variable es cercana a los 2 millones de caracteres. (ej emplo “casa”)
Char:
corresponde a un carácter individual. (ejemplo “X”)
Boolean:
las variables de tipo “boolean” solo pueden tener dos tipos de valores, los cuales son solamente “True” o “False”.
De no definir una variable, VB tomará dicha variable como tipo " Variant " lo asigna como texto, entero o decimal. Otra diferencia entre las distintas variables es el tamaño en Bytes que ocupan. Por ejemplo una variable que será utilizada como contador, es preferible declararla como Integer o Short antes que Double, debido a que Integer "pesa" menos, que se podría traducir en rutinas más rápidas, mas refinadas y livianas. Tutorial
10 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
3.1.2. Declaración de una Variable Para definir las variables se tiene que hacer de la siguiente manera: Dim Nombre_de_Variable As Tipo_de_Variable
Si queremos definir una variable la cual tenga 2 dimensiones, el caso de una matriz, ésta se debe definir de la siguiente manera: Dim Nombre_de_Variable(n_inicial To n_final) As Tipo_de_Variable
En la definición anterior el tipo de variable no es mandatorio incorporarlo. Por ejemplo si se quiere tener una variable que se llame Tipos_Acero, y que sea una matriz de del tipo “Double”, se tendrá lo siguiente:
33
Dim Tipos_Aceros(1 To 3, 1 To 3) As Double Comentario: las matrices también se pueden definir del siguiente modo:
Dim Tipos_Aceros(2,2) As Double
33 0 2
La matriz definida en Ilustración 2.1.3 también corresponde a una matriz de dimensiones . Pero a diferencia del ejemplo anterior, la matriz en este caso se llenará desde el índice hasta . (en el caso anterior, se tenía comienzo desde el índice ).
1
Para llamar o definir un término en específico de esta variable, se tiene que hacer de la siguiente manera:
Para asignar un valor a un coeficiente de una matriz: Tipos_Aceros(1, 1) = Valor_a_Asignar
Para asignarle a una variable cualquiera el valor que corresponde a un cierto coeficiente de una matriz. Alguna_Variable = Tipos_Aceros(1, 1)
En una sección posterior se profundizará mas en el tema Matrices. (Manejo de Arreglos (Matrices).)
3.2. Declaración de una Sub Las "Sub" son el espacio donde se debe programar lo que se desee hacer, éstas tiene que estar definas por un nombre y se pueden crear en los tres espacios posibles (Módulos, Hojas de cálculo o formularios). La forma de declararlas es la siguiente: Sub Nombre1()
Tutorial
11 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 'Acá va la rutina End Sub
Dentro de espacio de programación se pueden crear múltiples Sub de manera independiente de modo que no interfieren entre sí, la única forma de activarlas es llamarla desde la rutina de una. Supongamos que se tienen dos Sub, una llamada “Nombres” y otra “Rut ”, y dentro del código de la sub rutina Nombres llamaremos a Rut de la siguiente forma: Sub Nombres() Call Rut 'Se ejecutó la sub Rut End Sub
Por otro lado, existe una función para que éstas rutinas sean privadas o públicas, esto quiere decir que si se está trabajando dentro de un Userform y se crea una rutina cualquiera de forma privada, ésta no se podrá utilizar en los códigos de las hojas de cálculo o módulos. Para que la rutina quede de forma privada se tiene que declarar de la siguiente manera: Private Sub Nombre1() 'Acá va la rutina End Sub
De manera análoga, si se quiere la rutina sea de carácter público y pueda ser utilizada desde todas las secciones se debe declarar de la siguiente manera: Public Sub Nombre1() 'Acá va la rutina End Sub
3.3. Declaración de una Función La creación de funciones es de gran utilidad dentro de la programación ya que permite ordenar los códigos y encontrar errores más fácilmente. Para declarar las funciones se requiere asignarle un nombre y señalar las variables de entrada para la función, las cuales serán utilizadas dentro de la rutina de la función, posteriormente se debe asignar un valor al nombre de la función, que será lo
Tutorial
12 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. que el valor que devolverá dicha función. Para declarar las funciones se hace de la siguiente manera,
Public Function Nombre1(Variable1, Variable2) Dim n As Double 'al definirla acá sólo estará en la función n = Variable1 + Variable2 Nombre1 = n 'La función devuelve el valor de n End Function
Ó Private Function Nombre2(Variable1, Variable2) Dim n As Double 'al definirla acá sólo estará en la función n = Variable1 * Variable2 Nombre2 = n 'La función devuelve el valor de n End Function
Se observa que las funciones funcionan de manera similar a las rutinas Sub, ya que éstas se pueden declarar de manera pública o privada. Del mismo modo como se explicó antes. Para la utilización de las funciones dentro de los códigos, basta simplemente con asignar valores a las variables de entrada de la función, como se muestra a continuación Public Sub Suma() Dim a As Double Dim b As Double a = 1 b = 2 Range("A1") = Nombre1(a,b) End Sub
En el ejemplo anterior al ejecutar la rutina, la Celda A1 tendrá un valor de 3. Dado que lo que hace la función creada previamente Nombre1, es sumar los dos parámetros de entrada.
Comentario: es recomendable también definir qué tipo de variable se ingresará a la función.
(porque de no definirla VB lo tomará como Variant, siendo esta una variable que pesa más). La forma de definir el tipo de variable de entrada y el tipo de variable de retorno es: Public Function Nombre1(Var1 As String, Var2 As String) As Double
Tutorial
13 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Nombre1 = Var1 + Var2 End Function
Las funciones pueden ser utilizadas en planillas de cálculos, para utilizarlas, estas funciones deben ser declaradas como públicas y no deben tener un nombre que genere conflicto con el nombre de las celdas por ejemplo “AB12”, para utilizarlas se debe llam ar como cualquier función integrada en Excel.
3.4. Sentencias Básicas de Programación Para generar algoritmos son necesarios elementos básicos de programación tales como los ‘For’, ‘If ’ o ‘While’, entre otros. Se procederá a mostrar las distintas formas de cómo declarar éstas estructuras.
3.4.1. Declaración de un "For"
Para caso que se necesite repetir una operación número de veces, una alternativa es aplicar un “For” la cual se debe declarar de la siguiente manera
For n = n_o To n_1 Step 2 'Acá va la rutina Next
En lo anterior se aprecia que se utilizó un paso (Step) de valor 2, esto implica que el valor de la variable irá aumentando de dos en dos. El valor del paso puede ser positivo o negativo. Además no es necesario incorporarlo, ya que al no estar presente, el programa trabaja con un paso automático de , en tal caso el valor de las variables y deben corresponder a un parámetro de valor entero.
1
5
0
Por ejemplo, si se quiere definir un proceso reiterativo que parta desde el y termine en con un paso de 0.5 se tiene que declarar de la siguiente manera
0
Por otro lado, si se requiere generar un rutina que parta desde hasta Se tiene lo siguiente
Tutorial
14 - Ignacio Mayorga / Ignacio Ruiz.
100
con un paso unitario.
Hormigón Armado I, UTFSM Santiago.
3.4.2. Declaración de un "If" En el caso de tener que efectuar distintas operaciones según alguna condición o conjunto de éstas. Según si son incluyentes o excluyentes La manera de declararla, es la siguiente:
.
Se pueden asignar múltiples de condiciones. Las cuales se sientan en los siguientes funciones matemáticas:
< > <= >= <> =
: : : : : :
menor que... mayor que... menor o igual que... mayor o igual que... distinto a... igual a...
Además se pueden complementar dichas condiciones utilizando:
And Or
: :
∧ ∨.
corresponde a "Y", lo que en lógica es . corresponde a "Ó", lo que en lógica es
Ejemplo:
En el ejemplo anterior, el uso de "And" y "Or" son opcionales y no requieren de ser utilizadas, basta con sólo una condición. Al igual que el uso del "Elseif", que en este caso se usa dado a la cantidad de alternativas que se tiene. Para el caso en que se tienen condiciones que utilizan un caso en especial, es conveniente el uso de la rutina Case.
Tutorial
15 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Otro aspecto bastante útil del uso del If, por su sencillez, es en el caso de que dado una condición en especial se asigne un valor, como lo muestra el siguiente ejemplo.
Que es la forma más simplificada del uso del If. Un uso bastante común del uso del " If" , es en el caso de condicionar el valor de una variable en función de otras dos o más variables. Como lo muestra el siguiente ejemplo:
3.4.3. Declaración de un "Select Case" El “Case” funciona de manera similar al ‘ If ’. Solo se puede manejar una variable para las
condiciones, siendo ésta variable de cualquier tipo. Para declarar un ‘Case’ se hace de la siguiente manera:
3
Las Cláusulas tienen tipos de opciones para definir, las cuales se mostrarán a continuación:
Forma 1:
lo primero y más sencillo es definir una expresión, la cual puede ser una variable, valor o un ‘True’ o ‘False’, lo que indicará que la variable será igual a esta expresión.
á:
Tutorial
Forma 2:
en el caso de que la variable sea de carácter numérica, se puede definir un rango para la aplicación del caso mediante los 2 valores y la expresión ‘To’, de la siguiente manera.
16 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
á:12
Forma 3:
la última forma es ocupar restricciones del tipo <=, >=, = . Para poder utilizar este forma es necesario anteponer la expresión ‘Is’.
á:<= 3.4.4. Declaración de un "Do While". En los casos que se esté buscando algún resultado en específico o se requiera efectuar un procedimiento hasta que se cumpla una condición, para aquello se requiere definir un ‘Do’. Para aquello existen dos formas de declarar estos bucles, como se muestra a continuación: 1. Restricción en fase Inicial Esta forma permite restringir la iteración desde un primer momento
2. Restricción en fase Final Al considerar la condición en su fase final, esto permite asegurar que por lo menos de ejecutar al menos una vez.
Las condiciones a utilizar en estos casos corresponden a tipos de comprobación, similares a las que se utilizan en un ‘If ’. Ejemplo:
Tutorial
17 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
3.5. Llamado de Sub, Funciones y Variables Desde Otras Secciones Cuando se tienen definidas funciones, rutinas y/o variables en distintas ubicaciones, sean éstas módulos, formularios u hojas de cálculo, éstas pueden ser utilizadas desde cualquier ubicación con tan sólo anteponer el nombre de la ubicación de lo que se esté buscando, siempre y cuando estén definidos como público. Se mostrarán ejemplos para llamar todos los t ipos de elementos
Para hacer el llamado de una función, sub, variable, objeto, etc. Se debe Anteponer la ubicación de éste. Ejemplo:
Sub que está en un módulo:
Del mismo modo se llama a funciones que estén en algún módulo.
Funciones que estén en algún formulario:
En el caso de los objetos(etiquetas, cuadros de textos, cuadros de listas, etc). Se llaman igual, por ejemplo se quiere el valor de un cuadro de texto que está en un cierto formulario sería:
El uso de "Value" se verá posteriormente, pero es para especificar que se quiere el valor del cuadro de texto.
Variable que está definida en una hora o formulario. Para llamar a una variable que fue definida en alguna hoja, o en algún formulario en específico, basta con identificar su origen.
Aquí se mostró un par de ejemplos, pero se puede extrapolar a cualquier combinación, lo importante es mencionar la ubicación de donde se encuentra el elemento de interés. Además se puede efectuar lo mismo con elementos de interfaz gráfica que aún no se han mencionado, tales como:
Tutorial
TextBox CheckBox ListBox SpinButton ComboBox 18 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
OptionButton CommandButton Label
Notar que sólo es necesario anteponer el nombre de la sección en la que se encuentre.
3.6. Herramientas útiles de Visual Basic En esta sección se mostrarán distintos tipos de herramientas que son bastante útiles en la programación, además de algunas herramientas para utilizar algunas opciones de Excel y algunos códigos de programación con características muy útiles.
3.6.1. Mensaje en Pantalla Una de las herramientas más útiles al momento de comenzar a programar es el mensaje en pantalla, debido a que pidiéndole a la rutina que muestre un valor obtenido o cualquier cosa en medio de un código es bastante útil para:
Identificar errores Entender un código Uso de interfaz gráfica
La forma de hacer que muestre algo por pantalla es mediante el código A modo de ejemplo:
Lo que se mostrará por pantalla es lo siguiente:
Algunas propiedades de los mensajes de texto:
Agregar un formato Formato General:
o VbCritical: o VbQuestion:
Tutorial
19 - Ignacio Mayorga / Ignacio Ruiz.
.
Hormigón Armado I, UTFSM Santiago.
o VbInformation: o VbExclamation: La forma de agregar estos formatos generales, es colocándolos después del texto mediante posterior a una coma. Ejemplo:
Mostrará:
Formato de botones (msgbox como función):
o VbAbortRetryIgnore: mostrará los botones Anular, Reintentar, Omitir. o VbOKCancel: mostrará los botones Aceptar y Cancelar. o VbOKOnly: mostrará sólo el botón Aceptar. o VbYesNo: mostrará los botones Si y No. o VbYesNoCancel: mostrará los botones Si, No y Cancelar. Lo lógico sería utilizar el msgbox con distinto tipos de botones para obtener algún retorno, y en función de esta continuar con el código. En este caso, como el mensaje de texto devolvería un valor (dependiendo del botón seleccionado por el usuario) es correcto decir que se utilizará como función, de modo que se debe programar como tal. En primer lugar los valores que se obtienen en función del botón seleccionado son:
Tutorial
Constante
Valor
Aceptar
1
Cancelar
2
20 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Anular
3
Reintentar
4
Omitir
5
Si
6
No
7
Y dado que es una función se programa como tal. Ejemplo:
Se mostrará:
Existen más opciones de formato de botones, en esta sección se expusieron lo que se consideraron fundamentales.
Agregar un Título: se debe ingresar posterior al formato escogido. Por ejemplo,
(Caso de utilizar el msgbox como sólo un mensaje)
(Caso de utilizar el msgbox como función) En el último ejemplo se mostrará,
Tutorial
21 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
3.6.2. Concatenar (&) Esta herramienta sirve para juntar varios textos distintos y a su vez variables numéricas dentro un texto. En las planillas de cálculo ésta opción se puede utilizar mediante la siguiente forma
=1,2,… En el caso de la programación cuando se requiera unir textos con valores numéricos, sea esto para una variable o algún mensaje, para esto se debe utilizar el carácter “&”, un ejemplo clásico es al definir una celda
En el ejemplo anterior el mensaje de texto mostrará el valor de la variable TipoAcero:
3.7. Manejo de Arreglos (Matrices). La utilización de los arreglos es un aspecto fundamental que debemos conocer y aplicar. Las principales razones de que son de gran utilidad son:
Tutorial
Para realizar operaciones matemáticas. Orden de nuestras variables. Hacer códigos más eficientes.
22 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. El último aspecto es de gran importancia dado que la experiencia nos dice que el uso de matrices mejora considerablemente el tiempo de ejecución de una rutina. Para comenzar, un arreglo es una variable que almacena datos ordenados en columnas y filas. En el caso de tener un arreglo con solamente filas hablaremos de un vector. Y en su defecto estaremos utilizando una Matriz.
3.7.1. Declaración de un Arreglo Visual Basic tiene dos formas de declarar un arreglo, que es:
En ambos casos son vectores que almacenan datos tipo Double. En lo que difieren ambas formas es que en el primer caso se tiene un elemento más, dado que considera que el elemento PrimeraForma(0). La manera de llenar dichos vectores as asignándole un valor a una cierta posición del arreglo, es decir:
Para el caso de querer declarar una matriz (filas y columnas) es análogo.
Al igual que el ejemplo del vector, se difiere sólo en que en el primer caso considera un elemento más, debido a que toma desde el elemento cero. La forma de llenar el arreglo es análogo al caso del vector, es decir:
3.7.2. Dimensiones de un arreglo Para conocer la dimensión que tiene un arreglo utilizaremos la función UBound, esta nos entrega el índice del último valor del arreglo. En el caso de los Vectores definidos previamente al utilizar:
Tutorial
23 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
ó 10 10
Obtendríamos en ambos casos el número elemento está en la posición .
, debido a que para ambos vectores el último
En el caso de estar interesados en conocer la cantidad de filas y columnas que tiene una matriz, el procedimiento es el mismo, pero se debe especificar si se quiere conocer las filas o las columnas, mediante el número ó de la siguiente forma.
12
Lo que obtendríamos en el caso anterior sería
10 5
y .
También es bueno conocer la función Lbound, que entrega el índice del primer elemento del arreglo. Funciona igual que la función Ubound. Es decir si utilizamos:
Esto para el caso de preguntar por los Vectores. Se entregan valores distintos debido a que como se mencionó anteriormente, uno parte desde cero y el otro desde uno. Dependiendo de cómo se definieron.
3.7.3. Redimensionar un Arreglo Puede que inicialmente no conozcamos la dimensiones que tendrá el vector o matriz que utilizaremos, para esto existe la función Redim y Redim Preserve. La función Redim se utiliza para redimensionar un arreglo, por ejemplo:
En el caso anterior se observa que se redimensionó la matriz a una que tuviese una fila y una columna más. Para el uso de esta función se debe tener en cuenta lo siguiente:
La función Redim no conserva los valores previos, borra y asigna dimensiones nuevas. Para que se pueda utilizar, el arreglo tuvo que previamente ser definido como SIN DIMENSIONES, es decir de la siguiente forma:
La función Redim Preserve se utiliza para redimensionar un arreglo pero CONSERVANDO los valores almacenados. Por ejemplo:
Tutorial
24 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
En este caso se agregó una columna. Para el uso de esta función se debe tener en cuenta lo siguiente:
Solo se pueden redimensionar la cantidad de columnas. En este caso también se debe haber definido el arreglo como sin dimensiones.
Comentario: la función Redim Preserve, es de gran utilidad debido a que muchas veces no tendremos certeza de cuántos elementos tendrá la matriz a utilizar. el siguiente ejemplo se muestra el uso de la función Redim Preserve. Ejemplo función Redim Preserve: Se llenará una matriz que contenga los datos de la siguiente tabla:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..4: datos que contendrá la matriz creada.
La intención de este ejemplo es crear una matriz que almacene los datos la tabla mostrada. Ahora bien, la gracia es que se hará genérica de modo que si la tabla de datos tuviese una fila más, la matriz pudiese tomarla. El código es:
Tutorial
25 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Entonces se observa que lo que se hizo es:
Declarar la Variable Viga_Ancho_Alto como un arreglo SIN DIMENSIÓN. Para así posteriormente poder utilizar la función Redim Preserve. Se entrará al Do While, siempre y cuando la celda no esté vacía. Esto es por que como queremos que la matriz contenga todos los datos que yo llene en la tabla, debemos saber cuándo parar. Como se mencionó previamente, la función Redim Preserve solo permite redimensionar la cantidad de columnas, por lo que en verdad uno está haciendo es agregando los datos de la tabla de una forma Traspuesta. Es decir, si uno puede ver el contenido de la matriz creada sería así:
Por ende los mensajes por pantalla que mostraría sería columnas.
35
. Que corresponden a tres filas y cinco
3.7.4. Pegar un arreglo en una hoja de cálculo Muy útil para visualizar los resultados obtenidos es pegar los datos de un arreglo en una hoja de cálculo.
Tutorial
26 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Una formar de hacer esto es recorriendo todo el arreglo e ir vaciando su contenido en celdas. Mediante el uso de la sentencia For esto es sencillo. Sin embargo no es la forma más eficiente. Una manera óptima de hacerlo es seleccionado un rango y pegando los datos. (mucho más rápido que corriendo todos los elementos de la matriz y pegando uno a uno). Se selecciona el rango donde se mostrarán los valores, para esto hay que conocer las dimensiones de la matriz, se utilizará la función UBound:
Donde el rango es:
Se utilizó la función Range para seleccionar el rango. La celda se asignó porque ahí se copiarán los datos.
11,2
que corresponde a la "B11".
Ahora bien los datos se copiarán tal cual están en la matriz. Y como se comentó anteriormente estos están transpuestos a los originales. Por lo que si se desea pegar los datos como estaban originalmente se puede ocupar la función de Excel Transponer. Como se muestra a continuación.
Donde Rango es:
Corriendo el código lo que se obtiene es:
Tutorial
27 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..5: Se muestra lo obtenido de mostrar los datos de una matriz en una hoja de cálculo.
Lo que se hizo en este ejemplo fue:
Crear una matriz general para la cantidad de filas que se tengan en la tabla que comienza en la celda "B2". Almacenar los datos en esta matriz. Mostrar los datos a través de una hoja de cálculo. Mostrarlos según distribución del arreglo y la transpuesta de éste.
3.8. Manejo de Cadenas de Texto. En este apartado se verán algunas funciones para trabajar las cadenas de texto (Strings). El buen manejo de las cadenas de texto facilita a los usuarios a crear rutinas que apunten a manejo de datos, modificación de archivos, creación de archivos, lectura, etcétera. Las principales funciones son: Para los ejemplo se usará la cadena de texto:
Tutorial
28 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
3.8.1. Función REPLACE Remplaza un caracter de una cadena de texto por otro a elección. Por ejemplo, al utilizar:
Se mostrará por pantalla el texto:
3.8.2. Función LEN Entrega la cantidad de caracteres que posee la cadena de texto. Por ejemplo:
Se obtiene
33.
3.8.3. Función SPLIT Crea un vector que almacena lo filtrado de una cadena. La dimensión que se asigna al vector depende de la cantidad de particiones en que queda la cadena después del filtro. A modo de ejemplo, si uno utiliza:
4.
El mensaje por pantalla mostrará Debido a que se filtró todo lo que no lleva espacio ende los elementos del vector generado serán:
" "
. Por
3.8.4. Función LEFT Devuelve la parte de la cadena que se encuentra a la izquierda de la posición indicada. Considerando el caracter de la posición indicada. Por ejemplo, al utilizar:
Tutorial
29 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
En la posición
12
se encuentra la letra
"" "" de
. Por ende se mostrará:
3.8.5. Función RIGHT Devuelve la parte de la cadena que se encuentra a derecha de la posición indicada. La posición se contabiliza del último caracter hacia la izquierda. Considerando el caracter de la posición indicada. Por ejemplo, al utilizar:
En la posición mostrará:
15
de derecha a izquierda se encuentra la letra
"" "ó" de
. Por ende se
3.8.6. Función MID Con esta función se puede extraer parte de una cadena. Se debe seleccionar la posición desde donde se comenzará a extraer, y la cantidad de caracteres a extraer. Por ejemplo:
En la posición mostrará:
10
se encuentra la letra
"" "" de
3
. Y como se extraerán caracteres se
3.8.7. Función INSTR Devuelve la posición de una caracter especificado, dentro de una cadena. En caso que el caracter esté más de una vez, solo devolverá la primera posición. por ejemplo:
""
7,12,15,17 31. "" "".
La letra se encuentra en las posiciones Notar que esta función es sensible a las mayúsculas, y no considera el caracter igual a Lo que mostrará por pantalla será . debido que es la primera posición donde se encuentra el caracter buscado.
Tutorial
30 - Ignacio Mayorga / Ignacio Ruiz.
7
Hormigón Armado I, UTFSM Santiago.
3.8.8. Función JOIN Función para vectores que sirve para unir los elementos de un vector. Por ejemplo:
Se unirá
"ó" "" con
, mediante una separación
" "
.
3.8.9. Función LCASE Función que cambia de mayúsculas a minúsculas. Por ejemplo:
Se mostrará:
3.8.10. Función UCASE Función que cambia de minúsculas a mayúsculas. Por ejemplo:
Se mostrará:
3.9. Manejo de Archivos de Textos En esta sección se verá los aspectos básicos de manejar archivos de texto. La utilidad que tiene esto apunta a que muchos de los programas que utilizamos en ingeniería civil permiten exportar sus datos en un formato de texto. Por ende aprender a manejar estos archivos y complementando con el manejo de cadenas de texto puede ser de gran utilidad. Entonces, a modo de motivación la razones del porqué aprender esto:
Tutorial
Poder leer y manipular la información que exportan los programas.
31 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
El mantener la información en archivos de texto hace que las planillas de Excel no estén colapsadas implicando rutinas más eficientes en velocidad.
3.9.1. Abrir un Archivo de Texto para abrir un archivo de texto es necesario conocer la dirección donde se encuentra. Para esto se utilizará una función de muy útil. La función entrega la ruta donde se encuentra el libro de Excel que se está utilizando. Por ejemplo:
ℎ.ℎ
Mostrará que el archivo que estoy utilizando está en el escritorio (dado que ahí lo tengo guardado).
Ahora bien, supongamos que se quiere abrir un archivo de texto que se llama y se encuentra en la carpeta que está en el escritorio con nombre Se debe hacer de la siguiente forma:
.
Tener en consideración:
Se creó una variable tipo texto que incluye la dirección en formato que utiliza . Notar que al final de la dirección tiene que estar especificado que el archivo corresponde a una archivo de texto, por eso la extensión hace referencia a que el archivo será abierto para ser leído, no para poder escribir sobre este. hace referencia al nombre de archivo abierto, para efectos de código, y como se verá un poco más adelante, VBa tratará a este archivo abierto como número . Se pueden tener muchos archivos de texto abiertos a la vez. El archivo se encontrará abierto pero de forma interna, es decir como usuarios no notaremos que el archivo está abierto debido a que no se abre ninguna pestaña en el computador.
#
..
1
3.9.2. Leer un Archivo de Texto Una vez que se ha abierto el archivo, se está en condición de comenzar a leerlo. La forma de hacer esto:
Tutorial
32 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Donde:
#,
hace referencia a que se hará lo que se especifica hasta que el archivo llegue a su fin. (END OF FILE). El número , es porque es el archivo número . Se culmina con . se refiere a leer una línea y asignársela a la variable cadena.
1
1
Por ende se recorre el archivo de texto y cada línea pasa a ser tomada por una variable que se llamó cadena. Teniendo la línea como cadena de texto asignada en una variable se puede trabajar ésta mediante lo que se aprendió en (Manejo de Cadenas de Texto.)
3.9.3. Escribir un Archivo de Texto Nuevo: En este caso se debe abrir el archivo de texto en el cual se va a escribir, este puede o no existir, de no existir lo crea. Por ende ya no sería de la forma , tal como se muestra a continuación:
Considerar qué:
Tutorial
#, ""
hace referencia a que el archivo que se abrirá será utilizado para escribir. Si el archivo ya existe y se abre como se borrará todo lo que éste contiene. se refiere a escribir el texto. cada vez que se utiliza es una línea nueva. Por ende en este caso se tendría:
#, "" 33
- Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..6: resultado de escribir en un archivo de texto.
3.9.4. Escribir un Archivo de Texto Conservando lo Almacenado En este caso se debe abrir el archivo de texto en el cual se va a escribir conservando lo que ya tiene. Solo se podrá escribir sobre el archivo de texto y no leerlo.
Considerar qué:
hace referencia a que el archivo se abrirá para seguir escribiendo sobre este. El texto nuevo se escribirá a continuación del existente. Es decir por debajo de la última línea.
3.9.5. Ejemplo de Utilidad Supongamos tenemos un registro de aceleración basal del terremoto del 2010, denominado concepción. La fuente es una estación que contiene la implementación de un acelerógrafo.
Tutorial
34 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. El formato del registro está en un archivo de texto, como se muestra en la siguiente imagen:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..7: registro de concepción.
Donde, En la primera columna corresponde al tiempo y la segunda a la aceleración percibida en observa que los datos están separados por un espacio.
/2
. Se
Si se desea extraer estos datos y graficarlos en Excel para ver el tiempo historia sería:
Se observa qué:
Tutorial
Se abrió el archivo de texto para ser leído. Se declaró una matriz que irá almacenando todos los datos que contenga el archivo de texto. Esto se aprendió en la sección Manejo de Arreglos (Matrices).
35 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Se utilizó el manejo de cadenas para poder trabajar con la información que contenía el archivo de texto. Esto se aprendió en la sección Manejo de Cadenas de Texto.
Ahora bien, como ya se tiene una matriz que contiene todos los gráficos, se puede pasar dicha matriz a una hoja de cálculo y mostrar la gráfica de los datos obtenidos. La forma de pasar los datos de una matriz a la hoja de cálculo se explico en la sección Manejo de Arreglos (Matrices). Se obtiene:
Tiempo historia ] g [ n ó i c a r e l e c A
5 3 1 -1 0
10
20
30
40
50
60
70
80
90
100
-3 -5
Tiempo [seg]
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..8: resultado de graficar los datos de la matriz registro aceleración.
3.10.
Funciones Útiles de Microsoft Excel
En esta sección se presentarán algunas funciones útiles de Microsoft Excel, pensando en ser utilizadas y llamadas desde Visual Basic.
3.10.1. Grabar Macro Microsoft Excel presenta una herramienta de gran utilidad que permite grabar lo que uno realiza en las hojas de cálculo, con el fin de posteriormente realizar la misma acción nuevamente. La idea es que se utilice para rutinas que son repetitivas. Pero la gran característica que posee es que al momento de ser grabada la acción todo queda registrado como una rutina que se almacena con el nombre de en lenguaje Visual Basic. El siguiente ejemplo muestra la utilidad de esto:
Tutorial
Para comenzar a grabar Macro, ir a
→→ … 36
- Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..9: aquí. .9: herramienta de Excel que permite grabar una rutina y después visualizar su código.
Se abre una ventana emergente que solicita al usuario ingresar el nombre con cual se grabará la rutina. Esta se grabará en el ambiente de Visual Basic sección Módulos. Se aprendió en la sección Ambiente Visual Basic. Basic. Posterior a esto ya se está grabando todo y escribiendo instantáneamente lo que uno realice en una rutina Sub. Por ejemplo, supongamos que ya se realiza lo que se observa a continuación:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..10: aquí. .10: ejemplo de grabar una Macro.
Para detener la grabación se debe ir a puede acceder a ver lo grabado, poner lo siguiente:
Tutorial
→ → … →→ …→
Luego ahí mismo se . Y se verá
37 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Si se observa se grabó todo lo que se ejecutó. Ahora bien, el lenguaje en el cual se graba quizás no va muy de la mano de cómo se ha enseñado en este tutorial, dado que existen muchas formas de hacer lo mismo. Por ejemplo, el siguiente código realiza lo mismo, pero más acorde a lo que se ha enseñado.
Que claramente es más legible. Comentario: el uso de esta herramienta es muy potente, debido a que permite al usuario a hacer mucho sabiendo poco, es simplemente grabar cosas, verlas, modificarlas un poco y en términos concreto copiarlas. Para cuando uno está aprendiendo es fundamental.
3.10.2. BuscarV BuscarV – – BuscarH BuscarH Esta función busca un valor específico en la primera columna de una matriz de tabla y devuelve, en la misma fila, un valor de otra columna de dicha matriz de tabla. La V de BUSCARV significa vertical. Utilicar BUSCARV en lugar de BUSCARH si los valores de comparación se encuentran en una columna situada a la izquierda de los datos que desea buscar.
= buscarVval buscarVvalor_buscado; or_buscado;matri matriz_buscar_en z_buscar_en;; indicador_c indicador_column olumnas;as;orden ordenado ado Tutorial
38 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Donde sus parámetros de entrada son:
Valor_buscado: valor que se buscará en en la primera primera columna de de la matriz la matriz de tabla. Valor_buscado puede ser un valor o una referencia. Si valor_buscado es inferior al menor de los valores de la primera columna de matriz_buscar_en, BUSCARV devuelve al valor de error #N/A. Matriz_buscar_en: Matriz_buscar_en: dos o más columnas de datos. Use una referencia a un rango o un nombre de rango. Los valores de la primera columna de matriz_buscar_en son los valores que busca valor_buscado. Estos valores pueden ser texto, números o valores lógicos. Las mayúsculas y minúsculas del texto son equivalentes. Indicador_columnas: Indicador_columnas: número de columna de matriz_buscar_en desde la cual debe devolverse el valor coincidente. Si el argumento indicador_columnas es igual a 1, la función devuelve el valor de la primera columna del argumento matriz_buscar_en; si el argumento indicador_columnas es igual a 2, devuelve el valor de la segunda columna de matriz_buscar_en y así sucesivamente. Si indicador_columnas es:
o Inferior a 1, BUSCARV devuelve al valor de error #VALUE! o Superior al número de columnas de matriz_buscar_en, BUSCARV devuelve el valor de error #REF!
Ordenado: Ordenado: valor lógico que especifica si BUSCARV BUSCARV va a buscar una coincidencia exacta o aproximada:
o Si se omite o es VERDADERO, se devolverá una coincidencia exacta o aproximada. Si no localiza ninguna coincidencia exacta, devolverá el siguiente valor más alto inferior a valor_buscado.
Los valores de la primera columna de matriz_buscar_en deben estar clasificados según un criterio de ordenación ascendente; en caso contrario, es posible que BUSCARV no devuelva el valor correcto. Para obtener más información, vea Ordenar vea Ordenar datos.
o Si es FALSO, BUSCARV sólo buscará una coincidencia exacta. En este caso, no es necesario ordenar los valores de la primera columna de matriz_buscar_en. Si hay dos o más valores en la primera columna de matriz_buscar_en, se utilizará el primer valor encontrado. Si no se encuentra una coincidencia exacta, se devolverá el valor de error #N/A.
3.10.3. K.esimo.mayor & K.esimo.menor Devuelve el valor k-ésimo mayor (o menor) de un conjunto de datos:
Tutorial
39 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
=K.esimo.mayomatriz;k.esimo_buscado 3.11.
Manejo de Celdas
Las celdas de las planillas se pueden declarar de dos formas distintas. Mediante la denotación de celda o mediante un rango, este último puede seleccionar más de una celda.
3.11.1. Referenciar una Celda mediante Cells(). En este caso se debe conocer el número de Fila y de Columna a la cual se quiere referenciar. En la interfaz clásica de Hoja de Excel, se tiene que por el costado izquierdo están numeradas las filas, mientras que por el costado superior se tienen las letras de las diferentes columnas. La forma de referencial la celda es:
Como en este caso se requiere conocer el número de la fila (no la letra). Para esto, en vez de contar las leras es conveniente seleccionar el rango, y Excel arroja el número de filas. Ejemplo: Se requiere asignar el valor de la Celda
"5"
a la variable (previamente definida)
.
Entonces se tiene:
5 ¿? →
Número de la fila: Número de la columna: propio Excel la fila.
dos opciones, contar o seleccionar rango y que nos diga el
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..11: seleccionando un rango se obtiene el número de la columna que tiene cierta celda. En el ejemplo la cel da “AA5”
Ya sabiendo la fila y la columna de la celda a referenciar se lleva a código.
Ventaja
Tutorial
40 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. La ventaja de referenciar una celda de este modo es que es de fácil uso para códigos en que es necesario variar la celda. Porque dado que se ingresa la fila y la columna, estos perfectamente podrían tener un valor variable que permita el poder recorrer una tabla de datos, por ejemplo.
3.11.2. Referenciar una Celda o Rango Mediante Range() Otra forma de referenciar una celda es mediante la letra de su columna y el número de su fila. De la siguiente forma:
Para el caso de referenciar un rango se denota de la siguiente forma:
Ahora bien, con lo ya aprendido, la celda uno y dos las podemos escribir como Cells() o como Range(). Además se puede asignar mediante la notación que ocupa Excel para un Rango. Ver el siguiente ejemplo. Ejemplo de uso: Es muy común trabajar con matrices en los códigos. Por ende, si se requiere asignar a una matriz un rango de una hoja, una alternativa sería hacerlo de la siguiente forma:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..12: tabla de una hoja de Excel que pasará a ser una matriz mediante Range().
Por lo tanto el Rango que se desea utilizar es desde la celda explicado se tiene:
Celda 1: Celda 2:
4 8 a la
. Por ende según lo antes
4 8
Para el código, se creará una matriz que se llamará Geometría_Vigas y se le asignará el rango mencionado.
Tutorial
41 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5
4
Los tres casos cumplen con el objetivo, creándose una Matriz de filas y columnas. En donde su primera columna será el nombre de la viga, la segunda el alto, tercera el ancho y cuarta el recubrimiento. Importante La variable Geometría_Vigas no debe ser previamente declarada (Dim G…). Todo lo referente a matrices se verá en un apartado posterior. Ventajas Las ventajas de preferir usar Range() antes que Cells() son:
Para el caso de querer referenciar una celda en específico y que ésta no variará (celda fija). Es conveniente ocupar Range() debido a que el código queda más legible. (es más fácil encontrar la celda que la celda ). Para llenar Matrices es de gran utilidad.
"AA56"
3.12.
56,27
Rutina Buscar Objetivo
Esta función de Excel es una de las más potentes que posee este programa y de gran utilidad. Lo que hace es variar el valor de una celda, de tal manera que una segunda celda, la cual depende de la primera, obtenga un valor dado específico. La función es muy útil en los casos donde la variable buscada no se logra despejar explícitamente de una ecuación, sino que está implícita en ella y para la obtención de ésta se requiere hacer iteraciones.
3.12.1. Buscar Objetivo, función de Excel. La función es propia de Excel y se puede utilizar yendo a Datos
→
Análisis
→
Buscar Objetivo…
Ejemplo: Se tiene una Función que depende de la variable
.
Se quiere que la función sea igual a
45.
Nota: se tiene la opción de hacer la función objetivo a la celda C3 variando la celda B3. Sin embargo, lo que se hará será crear en otra celda el delta entre lo obtenido y lo que se desea obtener, y a ésta función aplicar Buscar objetivo variando la celda B3.
Tutorial
42 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. ¿Por qué esto?, la razón del porqué es debido a que muchas funciones que se utilizan son muy complejas, lo que hace dificultoso que Excel dé con el valor exacto que cumpla la condición. Es por esto que creando una celda como el diferencial uno puede asignar una tolerancia, ¿cómo?, asignando a la celda E3 la siguiente fórmula:
De este modo, se dejará de iterar cuando el F(x) buscado con el F(x) obtenido difieran en la centésima.
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..13: función buscar objetivo.
Se observa en el ejemplo anterior que la función requiere:
Definir la celda: corresponde a la celda a la cual se obtendrá el valor deseado. Con el Valor: corresponde al valor deseado. Cambiando la celda: corresponde a la celda que se iterará su valor.
Al apretar aceptar comienza la iteración que es bastante rápida. Nota: hay funciones que tiene más de una solución. Y Buscar Objetivo no detecta esto, solamente se detiene al momento en que encuentra la primera. Por ende es recomendable comenzar la iteración (dejar el valor de x en este caso) en un valor cercano al esperado.
3.12.2. Buscar Objetivo, programada en Visual Basic A. Al ser la función Buscar Objetivo una iteración de una variable que se detiene al encontrar un resultado. Es posible programar una rutina que haga lo mismo y que incluya la sentencia “Do While”. Sin
embargo nuestra experiencia nos dice que los resultados de hacer esto no son mejores que la función Buscar Objetivo, debido al tiempo en la obtención del resultado.
Tutorial
43 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Es por esta razón que es preferible utilizar la función Buscar Objetivo en una hoja de cálculo, pero programarla por dentro. La manera de declarar esta función desde VB es la siguiente:
Donde,
La primera celda corresponde a la celda donde se espera el valor.
“valor” corresponde al valor esperado
Y la segunda celda en la celda que se iterará.
La mayor utilidad que tiene definir la función mediante VB, es que permite generar varias funciones objetivos. Cómo se verá en el siguiente ejemplo: Supongamos que en el ejemplo anterior se desea utilizar la función Buscar Objetivo para más de una celda:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..14: función buscar objetivo, para múltiple celdas.
Para esto se requiere de la siguiente programación:
Que ejecutará la función objetivo en todas las filas requeridas y de manera rápida.
3.13.
Funciones matemáticas de VB.
Es necesario saber cómo aplicar algunas herramientas matemáticas esenciales, como lo pueden ser el cálculo de un coseno, seno o un logaritmo entre otros, para esto existe una herramienta matemática la cual ofrece de manera sencilla todas las opciones disponibles. Para ocupar esta herramienta se declara de la siguiente manera:
Sin embargo para la aplicación no es necesario anteponer Math.
Tutorial
44 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Las funciones matemáticas más utilizadas son: FUNCIÓN Abs Acos Asin Atan Ceiling Cos Cosh Exp
DESCRIPCIÓN Devuelve el valor absoluto de un número. Devuelve el ángulo cuyo coseno es el número especificado. Devuelve el ángulo cuyo seno es el número especificado. Devuelve el ángulo cuya tangente corresponde al número especificado. Devuelve el valor entero más pequeño que es mayor o igual Decimal especificado o Double. Devuelve el coseno del ángulo especificado. Devuelve el coseno hiperbólico del ángulo especificado. Devuelve e (base de los logaritmos naturales) se produce a la potencia especificada. Devuelve el entero más grande que sea menor o igual que Decimal o el número especificado de Double.
Floor
IEEERemainder Devuelve el resto que es el resultado de la división de un número especificado por otro número especificado.
Log
Devuelve el logaritmo natural (de e base) de un número especificado o el logaritmo de un número especificado en una base especificada.
Log10 Max Min Round
Devuelve el logaritmo en base 10 de un número especificado.
Sin Sinh Sqrt Tan Tanh Truncate
Devuelve el seno del ángulo especificado.
Devuelve el mayor de dos números. Devuelve el menor de dos números. Devuelve un valor de Decimal o de Double redondeado al valor entero más cercano o a un número especificado de dígitos fraccionarios. Devuelve el seno hiperbólico del ángulo especificado. Devuelve la raíz cuadrada de un número especificado. Devuelve la tangente del ángulo especificado. Devuelve la tangente hiperbólica del ángulo especificado. Calcula la parte entera de Decimal o un número especificado de Double. Tabla 1: funciones matemáticas de Visual Basic.
3.14.
Funciones de Excel
De igual manera que en la sección anterior, se pueden utilizar funciones utilizadas frecuentemente en una planilla de Excel. Es importante tener esto en consideración debido a que Excel contiene una infinidad de funciones que pueden ser usadas en VB. Para utilizar estas funciones es necesario ingresar el siguiente código:
Tutorial
45 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
3.15.
Manejo de Errores
Los errores pueden provenir de un gran espectro de posibilidades, las cuales tengan que ver con la programación en sí. Por ejemplo el caso de no definir una variable, o errores matemáticos como tener una división por , son los errores más recurrentes.
0
Generalmente la mayoría de los errores ventana emergente como la siguiente:
los detecta e informa al usuario mediante una
Que sería en el caso que por algún motivo se haya ejecutado una división por cero. Se observa que en este caso es bastante específico .
Los errores más recurrentes son:
División por cero: dirá explícitamente División por cero. Tipo de variable: este error ocurre cuando una variable toma un tipo de dato que no le corresponde. Por ejemplo declarar una variable como y asignarle un valor de texto. dirá que No coinciden los tipos. Error matricial: en el caso que se llame a un índice de una matriz, pero que este no exista. Por ejemplo un vector de cinco elementos y que se llame a un elemento seis. dirá que Sub índice fuera del intervalo.
Entre muchos otros, siendo estos del tipo ejecución. Muchos de estos los detecta y da la alternativa de ir a la sección de código donde se encuentra la falta. ¿cómo? mediante el botón depurar, que lo que hace, es amistosamente dirigirnos a la parte del código que se encuentra la inconsistencia y no solo eso sino que además la destaca en amarillo. Muy útil. Sin embargo, existe un sin fin de situaciones donde no se puede acceder a depurar, y es acá cuando empiezan los dolores de cabeza intentando descubrir el error. Que por cierto no tiene porque ser un error que interrumpa la ejecución sino que podría ser un error que haga que los resultados no sean válidos. Entonces, cabe preguntarse, ¿qué hacer en estos casos?, intentar descubrirlo, no queda otra. Una forma de encontrar de manera rápida el error es apoyándose en los mensajes de texto, ubicarlos en ciertas partes del código de modo de saber hasta dónde está
Tutorial
46 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. corriendo bien, dado a que si el mensaje se muestra sabremos que el código se ejecutó hasta ahí. O mostrar una variable en específico, para saber si se está considerando bien, etcétera. Son de gran utilidad.
3.15.1. Evitar que los Errores Deriven en Mostrar el Código Para programaciones más elaboradas donde no es deseable que al ocurrir un error el usuario visualice el código, existe la alternativa de manejar los errores en tiempo de ejecución. Para esto existen funciones de
como:
:
que como su traducción indica, en caso de haber error no se continúa y se salta a donde especifique el programador. De este modo, podría por ejemplo pedírsele al usuario que vuelva a comenzar porque ha ocurrido un error. A modo de ejemplo:
La imagen anterior muestra una interfaz gráfica que claramente al apretar el botón se obtendrá un error. Para evitar el error se utilizará como se muestra a continuación.
Donde:
Tutorial
47 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
o o
direcciona a la línea
___
los dos puntos. se utiliza para terminar la ejecución del ejecutaría de todas forma el mensaje.
. Esta línea debe llevar
. De no poner esto, se
:
en este caso, de haber error se omite y el código continúa en la siguiente línea. Es la forma más sencilla para evitar que salte la ventana emergente de error de , pero de este modo el usuario no se da cuenta que hubo un error y podría interpretar mal la información. El código sería:
Y en el caso de ingresar un valor negativo, no se mostraría el mensaje por pantalla diciendo dado que el error estaría en esa línea y se la saltaría. Pero al ingresar una letra, se mostraría como respuesta cero, dado que el error se produce al asignarle valor a la variable , por ende al saltarse esta línea, ésta nunca obtuvo un valor.
:
Tutorial
48 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
En esta sección se verán los aspectos necesarios para poder lograr una interfaz gráfica que incorpore los diferentes objetos que presenta Visual Basic para aplicaciones.
4.1. Introducción a los Formularios (UserForm) Los formularios (Userforms) corresponden a la interfaz gráfica que almacena los diferentes objetos (recién mencionados) que dan vida y utilidad a éste.
4.1.1. Iniciando un Formulario La manera de crear un UserForm es simplemente yendo a: Insertar
→
UserForm
En la ventana de Visual Basic. Con lo que se debería visualizar lo siguiente:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..15: creación de un formulario. Se observan los principales aspectos.
En la imagen anterior se observan varios aspectos importantes:
Tutorial
49 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
El formulario se crea con un nombre automático, que depende de la cantidad de formularios existentes, en este caso, al ser el primero se llamó UserForm1. En el recuadro en verde se pueden seleccionar el formulario que se desea. El contenido de las diferentes carpetas que se observan en el recuadro verde se vio con mayor detalle en la sección Ambiente Visual Basic. El recuadro en rojo (cuadro de herramientas) es fundamental en el formulario, dado que éste contiene a los objetos (Etiquetas, botones…) que se ins ertarán en el formulario. La forma de abrir este cuadro es mediante el ícono que se observa en la imagen o yendo a Ver Cuadro de Herramientas.
→
También se observa debajo del recuadro verde que están las propiedades del formulario, esto se verá en una sección aparte.
4.1.2. Programación en un Formulario La programación de los formularios se basa a responder con algún código a alguna acción que sea ejecutada en el formulario. Es decir, uno debe programar que cuando inicie el formulario corra cierto código, que cuando se seleccione alguna opción se ejecute otro, y así. Para hacer esto se debe entrar a la sección donde se programa, existen dos formas: 1. Click derecho
→
Ver código
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..16: ingresar a la sección donde se programan los formularios.
2. O simplemente Doble Click al fondo del formulario. Se observará una hoja en blanco en donde uno puede comenzar a escribir las rutinas que se utilizarán en el formulario (Funciones o Subs). La hoja en blanco presenta las siguientes propiedades:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..17: sección donde se programan los formularios.
Tutorial
50 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. En la imagen anterior se observan dos características muy importantes en lo que es la programación de un formulario. Se presentan como cuadros combinados (permiten seleccionar una opción). Estos son:
Cuadro Combinado de la izquierda (color verde): En este cuadro permite seleccionar lo siguiente:
o (General): caen todas las rutinas declaradas como Sub y Funciones. Al asignar esta sección, en el cuadro combinado de la derecha (color rojo) se cargarán todas las funciones y rutinas que hay en el formulario. o Objetos: caen todos los objetos creados en el formulario (botones, etiquetas, Imágenes, etcétera). Además del formulario en sí, que también tiene acciones (como cuando se abre, cuando se cierra, etcétera). Al seleccionar algún objeto, en el cuadro combinado de la derecha (color rojo) se cargarán todas las acciones que se pueden hacer este objeto.
Cuadro Combinado de la derecha (color rojo): este cuadro depende de lo seleccionado en el cuadro anterior. En el caso de haber seleccionado (General) en el anterior, se mostrarán acá las funciones o rutinas, seleccionado una se irá automáticamente a la parte de la hoja que contiene ésta. En el caso de haber seleccionado un objeto, acá se mostrarán las acciones que se pueden hacer con éste, al seleccionar una se abrirá instantáneamente un código que permite programar en caso que se haga dicha acción. Esto se verá más detalladamente en la sección posterior.
Tener esto presente es muy útil al momento de agilizar el encontrar una rutina y o función en específico (caso de tener códigos muy extensos).
4.2. Objetos (Controles) En esta sección se mostrará los diferentes tipos de objetos que le dan vida a los formularios. Se verán los principales aspectos que permiten comprender la utilidad de cada uno de estos. Los objetos que se verán son:
Tutorial
Etiqueta (Label) Cuadro de Texto (Text Box) Cuadro Combinado (Combo Box) Cuadro de Lista (List Box) Casillas (Check Box) Botón de opción (Option Button) Marco (Frame) Botón de Comando (Command Button)
51 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Barra de Tabulaciones (Tab Strip) Página Múltiple (Multi Page) Barra de Desplazamiento (Scroll Bar) Botón de Número (Spin Button) Imagen (Image)
La creación de un objeto en el formulario se hace mediante el cuadro de herramientas que se explicó en la sección Iniciando un Formulario.
4.2.1. Programación de la rutina de respuesta a una acción de un objeto El apretar un botón, ingresar una tecla, iniciar un formulario, terminar un formulario, posicionar el mouse sobre una etiqueta, seleccionar algo. Son algunos ejemplos de lo que en éste formularios llamaremos como Acciones. Estas acciones actúan sobre los objetos o formularios, y la forma de declarar una respuesta (código) a una acción es la siguiente:
En la sección anterior se comentó que al seleccionar el un objeto en el recuadro combinado de la izquierda (ver Programación en un Formulario). En el recuadro combinado de la derecha aparecían todas las acciones de dicho objeto. Y al hacer click en una se abría el código en el cual se puede especificar la respuesta. Ejemplo:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..18: ir a la sección donde se programa la respuesta a una acción.
Se observa que se seleccionó el objeto TextBox1 y se desea programar la respuesta cuando la acción sea que éste cambie. Es decir, cada vez que el valor del cuadro de texto 1 cambie, se ejecutará la rutina que está dentro de:
Tutorial
52 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Del mismo modo se programan todas las respuestas a las acciones. Las acciones más utilizadas son:
_Click():
Acción de clickear el objeto. Siempre utilizado en los botones de comando.
_Change():
Acción de que cambie de valor el objeto. Se utiliza en los objetos que pueden cambiar de valor, como por ejemplo un cuadro de texto, un cuadro de lista, entre otros.
_AfterUpdate():
Acción de después que se actualizó de valor del objeto. Se asimila a Change() la diferencia radica en que éste actúa después de haber cambiado todo el valor.
_mouseMove():
Acción de pasar el mouse por sobre el objeto.
_Initialize(): Acción de iniciar el formulario. Importante declarar acá por ejemplo los datos que cargan el formulario. _Terminate(): Acción de cerrar el formulario.
Existen otras, pero estas son las de mayor Utilidad.
4.2.2. Manejo de las propiedades de un objeto Los objetos (etiquetas, cuadros de texto, botones, listas, etcétera) tienen propiedades como el ancho, el alto, el estilo, el valor que toman, el si están o no habilitados, entre otros. Es importante saber cómo manipular estos, para hacer un correcto uso del objeto en un formulario. El lugar donde se controlan las propiedades es:
Tutorial
53 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí. .¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..19: Ambiente Visual Basic, se observa un objeto (textbox) que se ha cambiado su propiedad Text.
En la imagen anterior se muestra que las propiedades del objeto TextBox se muestran en el recuadro rojo. Las propiedades del objeto escogido están en el r ecuadro rojo. Se observa que lo que se modificó es la propiedad Text del objeto TextBox1. Ahora bien, muchas veces se requiere que en tiempo de ejecución se vean modificadas las propiedades de algún objeto, la forma de hacer esto es la siguiente:
Se observa que primero se pone el formulario al cual pertenece el objeto, posterior el nombre del objeto seguido de la propiedad que se quiere modificar. En este ejemplo se modificó lo mismo que se hizo mediante el recuadro del ambiente de Visual Basic. Ejemplo de aplicación Se hará lo que se muestra en la siguiente Ilustración:
Tutorial
54 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Como se observa, lo que se hará es que al apretar el botón Bloquear/Desbloquear se activará la propiedad Enabled (habilitado) del objeto textbox que se observa. La forma de hacer esto es asignando un código a la acción de hacer click sobre el objeto "botón". En la sección anterior (Programación de la rutina de respuesta a una acción de un objeto) se explicó más a fondo este aspecto. Entrando a la sección donde se programa la respuesta a la acción de clickear se pone el siguiente código:
Se observa que se utilizó en tiempo de ejecución el cambio de las propiedades Enabled y Caption. De este modo se trabajan todas las propiedades que tienen los objetos. Las propiedades más comunes y que muchas son generales para todos los objetos son:
Enabled: propiedad que hace referencia a si el objeto está habilitado o no (para ser usado). Booleana, es decir True o False. Visible: propiedad que hace referencia a si el objeto es visible o no. Es de tipo booleana. Font: propiedad de la fuente de la letra. (Tamaño, tipo de letra, altura, estilo).
o En el caso del tipo de letra se debe especificar del siguiente modo:
o En el caso del tamaño de letra se debe especificar del siguiente modo: o En el caso del estilo negrita o cursiva se debe especificar del siguiente modo:
Tutorial
55 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
o En el caso del color de letra se debe especificar del siguiente modo:
Height: la altura del objeto. Left: valor que especifica la posición horizontal del objeto, medido desde borde del formulario o del “Frame”.
Locked: propiedad que hace referencia a si el objeto está bloqueado o no (para ser usado). Booleana, es decir True o False. La diferencia con Enabled es que acá el objeto no se pone de color opaco. Top: valor que especifica la posición vertical del cuadro de texto, medido desde borde del formulario o del “Frame”.
Width: el ancho del objeto. Value: entrega el valor que tiene el objeto actual.
Estas son solo algunas propiedades. Comentario: debido a que cada objeto tiene bastantes propiedades, no se profundizará en estas y se dejará tarea para el usuario conocerlas mediante el recuadro en rojo.
4.2.3. Cuadro de Texto, TextBox (
)
Los Cuadros de Texto son la principal herramienta para la recepción de información. Corresponde a las cajas donde el usuario del formulario puede ingresar los valores que serán los que utilizará el código. La apariencia que tiene es:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..20: cuadro de texto (TextBox)
Las propiedades más comunes que se utilizan son:
Font: se explicó previamente (Manejo de las propiedades de un objeto) Enabled: se explicó previamente (Manejo de las propiedades de un objeto) Text: se roba el valor que tiene como String. Value: se explicó previamente (Manejo de las propiedades de un objeto)
La recomendación de cómo obtener los valores de una cuadro de texto es:
Tutorial
56 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Para el caso de utilizar los cuadros de texto para ingreso de valores. Para tomar el valor del objeto usar la propiedad Value. Para el caso de utilizar los cuadros de texto para el ingreso de cadenas de testo. Para tomar el valor del objeto usar la propiedad Text.
Si se desea restringir el tipo de caracteres que ingresan dentro se puede utilizar una sub rutina predeterminada para limitar el ingreso de datos, por ejemplo, que sean sólo números, se debe utilizar el siguiente código:
4.2.4. Etiqueta, Label ( ) Este objeto es de gran utilidad dentro de los formulario, ya que tiene la particularidad de ser los textos que orientan al usuario. Las principales propiedades que se utiliza son:
Caption: es el texto que lleva escrito la etiqueta. Visible: se explicó previamente (Manejo de las propiedades de un objeto). Muchas veces en función de lo que hace el usuario se hacen o no visibles ciertas etiquetas.
Un ejemplo de una etiqueta es:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..21: se observan dos objetos, una etiqueta (Label) y un cuadro de texto (TextBox).
En este caso la propiedad Caption del objeto Label corresponde a Ingrese su nombre.
4.2.5. Marco, Frame (
)
Los ‘Frames’ son marcos que se generan para agrupar otros controles.
Tutorial
57 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Son de gran utilidad ya que funcionan como un sub formulario dentro de otro formulario. Más adelante se verá que para el manejo de múltiples objetos (por ejemplo el querer que se verifiquen que muchos cuadros de texto no estén vacíos) son de gran utilidad. Además que brindan un bonito aspecto y orden, como lo muestra la siguiente imagen:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..22: objeto marco (Frame).
La propiedad que más utiliza este objeto es el Visible y Caption. Visible se utiliza ya que como funciona como sub formulario, al hacer un frame invisible implica que se hace todo lo que contenga invisible. La propiedad Caption es para darle el nombre y en el ejemplo anterior la propiedad tiene valor "Este es un frame".
4.2.6. Botón de Comando, CommandButton (
)
Este control es un botón de acción, e l cual reacciona al hacer un “Click” sobre ella, este control se
visualiza de la siguiente manera:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..23: objeto botón (CommandButton)
Las propiedades que más se utilizan es Caption y Enabled. Dado que lo que se espera de un botón es que se ejecute una rutina al momento de hacer click sobre éste. Se debe programar como se explicó en la sección (Programación de la rutina de respuesta a una acción de un objeto). La siguiente imagen muestra el código de la rutina que se ejecuta al apretar un botón y que tiene como finalidad saludar por pantalla.
Tutorial
58 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Entonces lo que ocurre al apretar el botón es:
4.2.7. Casilla de Verificación, CkeckBox (
)
Este control corresponde a una caja en la cual se puede dar un "Check ", la estructura de estos controles son la siguiente:
Este control es independiente de los demás Chekbox que existan, además éste control tiene dos valores, los cuales son “True” cuando esta con un check y “False” en caso contrario, como se muestra a continuación:
ℎ1.= De igual manera que en los controles anteriores, si se le quiere cambiar el nombre que aparece junto al ‘Checkbox’, se debe aplicar la función “Caption” :
ℎ1.= 4.2.8. Botón de Opción, OptionButton ( ) Este control es muy similar al ‘Checkbox’ ya que para utilizar este control es necesario hacer Click sobre alguna opción, la estructura es la siguiente:
Este control interactúa con los demás similares que existan en una misma sección de este tipo, por lo que no son independientes, si se requieren seleccionar más de una de estas opciones se recomienda dividirlas con el control ‘Frame’, lo que independiza los ‘Optionbutton’ que existan. Por otro lado este control puede tomar dos valores, los cuales corresponden a ‘True’ cuando está seleccionado y ‘False’ en caso contrario, como se muestra a continuación:
Tutorial
59 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
1.= De igual manera que en los controles anteriores, si se le quiere cambiar el nombre que parece junto al ‘Optionbutton’, se debe aplicar la función “Caption”:
1.= 4.2.9. Cuadro de Lista, ListBox (
)
Este control corresponde a un rectángulo en el cual existen múltiples opciones, las cuales se pueden agregar o eliminar. Además los ítems seleccionados pueden tener múltiples columnas, un ejemplo de esto es lo siguiente
Como en el ejemplo anterior se ve que existen dos opciones y está seleccionada una, la cual está destacada en azul, si no se dice especifica otra acción, solamente se podrá seleccionar una sola opción. Para poder seleccionar más opciones existen los siguientes comandos
Para seleccionar opciones especificas por separado se debe ingresar el siguiente código
Para seleccionar opciones las cuales estén juntas, de debe declarar lo siguiente
1. = 1. =
Para especificar el número de columnas que posee el ‘Listbox’ se debe ingresar lo siguiente:
1. = Para eliminar todos los datos dentro del ‘ListBox’ se debe aplicar el siguiente comando:
1. Para agregar ítems se debe realizar lo siguiente
ℎ 1 . ., = " 3" ℎ Para el caso anterior tanto el número de la fila como el de la columna parten desde el 0, en caso de querer remover un ítem se debe hacer lo siguiente:
ℎ 1 Tutorial
60 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
. ., ℎ O si se quiere remover toda la fila el proceso es similar como se muestra a continuación
1. Para verificar cual ítem esta seleccionado o indicar en un comienzo cual dato seleccionar, hay que utilizar la opción ‘selected’ de éste control, la cual tiene dos opciones, ‘true’ para indicar que está seleccionado y ‘false’ en caso contrario. La forma de utilizar esta función es la siguiente:
1. = Si se requiere obtener el contenido dentro de algún ítem basta con hacer lo siguiente
=1.(,)
o
=1.
Por último, para saber cuántos ítems (Filas) existen en la ‘ListBox’, se debe ingresar lo siguiente:
1. 4.2.10. Cuadro Combinado, ComboBox (
)
Este control es muy similar a la anteriormente descrita, sólo que en este control las opciones se ocultan en la pestaña derecha del control, además en este control solo se puede seleccionar un sólo ítem a diferencia del anterior que se podían seleccionar múltiples. La visualización clásica de estos controles es la siguiente:
Para este control todas las funciones mencionadas en la de ‘ListBox’ son aplicables, excepto por la de selección múltiple, dado eso se procederá a mostrar a simplemente mostrar los comandos con una simple descripción
Numero de Columnas
1. =
Borrar todo
1.
Agregar ítems
ℎ 1 . ., = " 3" ℎ Tutorial
61 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Remover Ítems de columnas múltiples
ℎ 1 . ., ℎ Remover filas completas
1. Selección de Ítem
1. = Obtener o cambiar contenido de algún ítem
=1.(,)
o
=1.
Conteo de filas existentes
1. 4.2.11. Botón de Número, SpinButton (
)
Este control permite aumentar o disminuir el valor de alguna variable, por lo mismo se relacionan generalmente con los ‘Textbox’, tal como se muestra a continuación:
La principal función que posee este control son las subrutinas integradas relacionadas al uso de ambos botones, dichas rutinas se mostrarán a continuación y se mostrará la aplicación para relacionarlas con un ‘Textbox’:
Tutorial
Botón Superior
Botón inferior
1_ 2. = 2. + 1_ 2. = 2. – 62
- Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. En las rutinas anteriores se genera que al apretar una de las opciones, el valor del ‘Textbox’ aumenta o disminuye en “ ”, según corresponda.
4.2.12. ToggleButton ( ) Este control es similar a un “ CommandButton” a diferencia que este control tiene valores
predeterminados, los cuales corresponden a ‘true’ cuando está seleccionado y ‘false’ cuando no. La visualización de este control en sus distintas formas es la siguiente ToggleB utton1
ToggleB utton1
(Seleccionado)
(No seleccionado)
Para verificar el estado de este control en alguna rutina o para asignar automáticamente el estado de ésta se requiere declarar:
1.= Finalmente si se desea cambiar el nombre que se presenta en el control se debe utilizar la función ‘Caption’ tal como en los controles anteriores, de forma que se genere lo siguiente
1.=" "
Tutorial
63 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
4.3. Ejecución de Rutinas Lo principal que se busca en este capítulo es mostrar cómo crear o eliminar secciones para efectuar algunas rutinas, como hacer correr las rutinas, detenerlas, encontrar errores entre otros temas de interés. Ejecución de rutinas Primera es necesario conocer cómo ejecutar las rutinas, para aquello se deben ejecutar con el botón Play ( ) o apretar la tecla F5, éste botón se encuentra en la barra superior del Visual Basic, como se muestra en la siguiente imagen
Además se encuentra los comandos para pausar y detener las rutinas respectivamente, según sea su requerimiento.
Tutorial
64 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.1. Momento curvatura A continuación se obtendrá el gráfico de momento-curvatura, obtenido mediante un algoritmo en Visual Basic. Para aquello primeramente se presentarán los parámetros de la viga que se analizará y las consideraciones de análisis que se efectuarán, luego de esto se mostrará el código de VB y su respectivo comentario. Finalmente la visualización de este, ya sea en las hojas de cálculo o en un Userform.
5.1.1. Consideraciones Se trabajará bajo la ley de “Navier” para elementos en flexión, la que postula que las caras planas permanecen planas. Por otro lado se considerará que el acero tiene un comportamiento elastoplástico y se supondrá que la deformación máxima del acero traicionado es de un 10%. En relación al hormigón, se utilizará alguna de las curvas de distribución de esfuerzo-deformación, en este caso la deformación inicial del hormigón es variable, se considerará que éste no se encuentra confinado y además que la deformación recorre desde un 0 hasta un 3.8 ‰. En este caso se considerará la curva de “Hognestad”, mostrada a continuación
Ilustración 2
Tutorial
65 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.1.2. Geometría y Propiedades de la viga En la siguiente imagen se mostrará la sección transversal de la viga, en la cual se indica la posición del acero, las zonas en compresión y tracción del hormigón, las deformaciones de las secciones y los esfuerzos y fuerzas dentro del elemento, tal como se muestra a continuación
B
εc
Cc
c
xc
Compresión
H
Tracción
Ts As
r
εs
Ilustración 3
Los valores de algunas de las propiedades mostradas en la figura anterior serán mostrados en la siguiente lista
=2.1∙10 ⁄ ó =15100∗ √ ⁄ =4200⁄ ′=250 ⁄ =25 =50 =3 = 16.31
El término corresponde a la deformación del acero, en tanto es la deformación de la fibra más comprimida del hormigón, en un instante dado. Por otro lado corresponde a la fuerza generada al integrar los esfuerzos generados por las deformaciones existentes, además esta fuerza se ubica a una distancia de la sección superior de la viga, que corresponde al centroide de los esfuerzos en compresión. y es la fuerza en tracción generada por el esfuerzo en el acero.
Tutorial
66 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.1.3. Análisis y desarrollo Para generar una gráfica del momento curvatura se requieren la interacción de múltiples pares de momento y curvatura las cuales están relacionadas mediante la profundidad del eje neutro (c), la curvatura se obtiene de la siguiente manera
=
Lo siguiente es definir el valor del momento, ya que se está trabajando con una viga, se supondrá que ésta no está expuesta a cargas axiales, sean estas de tracción o compresión, dado esto se tienen que compatibilizar las deformaciones dentro de la viga y el equilibrio de fuerzas dentro de la sección analizada, dado esto primero, se debe generar un equilibrio de fuerzas, de donde se obtiene lo siguiente
,, = 0{ }
De la ecuación anterior se procede a despejar el valor de para respetar la igualdad, luego se procede a realizar una sumatoria de momento a la altura de la fibra del acero, con esto se obtiene el valor del momento asociado a unas deformaciones dadas del concreto y acero. Con esto se obtiene finalmente que
=,∗, De la ecuación anterior se obtiene el valor del momento el cual es función de la deformación del hormigón y de la profundidad del eje neutro, ya que la fuerza generada por el hormigón depende de éstas al igual que la ubicación de esta reacción
.
Finalmente para generar el diagrama se tiene que realizar un barrido de la deformación del hormigón desde 0 hasta un 3.8 ‰. Y obtener el valor de C asociado a esa deformación ya que solo existe un valor de que genere el equilibrio de fuerzas dentro de la sección y con esto obtener el valor de la curvatura y del momento.
5.1.4. Programación en Visual Basic Para realizar la rutina anterior de manera más clara se crearán funciones independientes para no generar confusiones, algunas de las funciones serán por ejemplo
Para calcular el esfuerzo de una barra de acero dependiendo la deformación de ésta. La resultante de los esfuerzos del hormigón La ubicación de la resultante de la fuerza en compresión El valor del esfuerzo del hormigón según su deformación entre otras
Dado lo anterior se adjuntará los códigos a continuación 1.- la siguiente función es sencilla y lo que hace es entregar el valor de la deformación asociado a una deformación dada, éstas ecuaciones se obtuvieron de la curva de Hognestad mostrada anteriormente. Los datos de ingreso son únicamente la deformación del hormigón (e),
Tutorial
67 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Function esf(e) e0 = 0.002 If e < e0 Then esf = 2 * (e / e0) - (e / e0) ^ 2 Else esf = 1 - 0.15 * (e - e0) / (0.0038 - e0) End If End Function
2.- La siguiente función (ccmc) tiene como objetivo entregar el valor de la resultante de los esfuerzos del hormigón, para lo cual se procedió a realizar una suma de Riemman, para lo cual se discretizó la longitud desde el eje neutro hasta la cara en tracción (c), para el correcto funcionamiento de esta función, se tienen que ingresar la deformación máxima del hormigón (e), el ancho de la viga (b) y la resistencia del hormigón (fc), dado ésto, la función es la siguiente Function ccmc(c, fc, b, e) n = 1000 dc = c / n dcc = 0 For i = 1 To n dcc = dcc + b * fc * dc * esf((2 * i - 1) * e / (2 * 1000)) Next i ccmc = dcc End Function
3.- la función “ts” mostrada a continuación, es bastante sencilla, lo que realiza es entregar el valor del esfuerzo de una barra de acero, según su deformación (e) y esfuerzo de fluencia (fy), trabaja tanto para barras en tracción y compresión, el código de esta función es el siguiente Function ts(e, fy) If Abs(e) > fy / 2100000 Then ts = fy * e / Abs(e) Else ts = 2100000 * e End If End Function
4.- esta última función es para determinar la ubicación de la fuerza concentrada, generada por la deformación del hormigón. El resultado entregado se representó en la figuran anterior con “xc”, y para obtener ésta es necesario ingresar la longitud de la zona en compresión (c) y la deformación máxima del hormigón (e). La rutina es la mostrada a continuación Function x_cc_mc(c, e) n = 1000 dc = c / n dcc_1 = 0 For i = 1 To n dcc_1 = dcc_1 + dc * ((2 * i - 1) / 2) * dc * esf((2 * i - 1) * e / (2 * 1000))
Tutorial
68 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Next i Next i dcc_2 = 0 For j For j = 1 To To n n dcc_2 = dcc_2 + dc * esf((2 * j - 1) * e / (2 * 1000)) Next j Next j x_cc_mc = dcc_1 / dcc_2 End Function
Con las funciones creadas anteriormente, dentro del mismo modulo se creará la siguiente rutina (sub) para crear el diagrama de momento curvatura. Para aquello, primeramente se mostrará la visualización de la planilla final en donde se observarán los datos y sus posiciones
Dada esta estructura de datos se procede a mostrar el código generado en Visual Basic aración de variables Dim u As Double Dim c Dim c As Double Dim curv(1 To 39) As Double Dim momento(1 Dim momento(1 To To 39) 39) As Double Public Sub mcVSA() Sub mcVSA() Range("j4", "k41").Value = "" fy = Range("c6") fc = Range("c5") b = Range("c3") h = Range("c4") r = Range("c7") As_trac = Range("c8") Carga_axial = 0 c_aux = h - r ‘Decl
For i = 1 To For i 1 To 38 38 def_hor = i / 10000 c = c_aux u = def_hor aux = True Do
Tutorial
69 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 'Compresión zona Hormigón ComH = ccmc(c, fc, b, u) 'Fin Compresión 'borde tracción es_bt = 10000 * (h - r - c) / c F_acero = As_trac * ts(u * es_bt / 10000, fy) mom = (h - r - c + x_cc_mc(c, u)) * ComH axial = ComH - F_acero 'compresión positivo If Round Round((axial ((axial - Carga_axial) / 1000, 1) = 0 Then aux = False momento(i) = mom / 100000 curv(i) = u * 100 / c c_aux = 1.2 * c ElseIf c ElseIf c < 0 Then aux = False Else c = c - 0.01 End If Loop While While aux aux = True Next i Next i For j For j = 1 To To 38 38 Range("j" & j + 3) = momento(j) Range("k" & j + 3) = curv(j) Next i Next i End Sub
Con lo anterior sólo resta asignar la rutina r utina o macro al botón utilizado, para aquello se debe realizar lo siguiente
En la figura anterior se ve claramente cual botón insertar, una vez hecho esto, se debe tener activado el modo diseño para posteriormente seleccionar el botón y oprimir la opción propiedades, para asignarle un nombre a dicho comando, como se muestra a continuación
Tutorial
70 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
En el casillero anterior se debe colocar el nombre del CommandButton1, un ejemplo sería
“ “ ” Una vez realizado, se debe asignar la rutina o macro al botón, para aquello se puede realizar doble clic sobre el botón en modo de diseño y agregar el siguiente código
1 1_ _ O se puede ir directamente a la interfaz de visual Basic y copiar este código dentro de la hoja que se está trabajando, tal como se muestra a continuación
Tutorial
71 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Finalmente se debe guardar el archivo como un libro de Excel habilitado para macros, una vez hecho esto se puede ejecutar el código. Advertencias: Ya que en el código se genera un algoritmo iterativo de gran espectro, la solución puede tardar algunos minutos según la potencia del equipo.
Tutorial
72 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.2. Armado de Vigas 5.2.1. Diseño Viga Simplemente Armada En el siguiente ejemplo se verá como implementar un código en Visual Basic que calcula los parámetros de diseño de una viga Simplemente Armada. 5.2.1.1.
Parámetrosaconsiderar:
Se trabajará con la viga de la figura 1.1 cuyos parámetros a considerar:
=2.1∙10 ⁄ =4200⁄ =250 ⁄ = =25 =50 =3
Asumiendo comportamiento regido por la ley de Navier de secciones planas permanecen planas, se tiene la siguiente distribución de esfuerzos y deformaciones:
Figura 1: esquemas viga simplemente armada.
Notar: que se trabajará con el rectángulo equivalente de esfuerzos en compresión que permite utilizar ACI318 para estado último. En base a:
Tutorial
Equilibrio interno de la sección Leyes constitutivas de los materiales
73 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Se obtienen las siguientes expresiones:
=
.1
de la relación en los esfuerzos (ley de Navier) se obtiene que
= ∙ Donde Y considerando las siguientes situaciones:
si
≤
=
el acero está en el rango lineal elástico, por lo cual la fuerza en tracción será:
= ∙ ∙
Si es mayor, el acero fluye por lo cual la fuerza en tracción será:
= ∙
Y por el rectángulo equivalente,
=0.85∙ ∙ ∙ ∙ℎ ó Y por equilibrio de momento
= ∙ ∙ → ó. Nota: podría calcularse respecto a otro punto de la sección. Por último se debe cumplir qué:
=ϕ∙ 31808 5.2.1.2.
Análisisdelasecciónsimplementearmada
Como la Viga se diseñará como Viga Simplemente Armada es fundamental saber si es que con la sección actual se puede obtener la resistencia nominal requerida que cumpla con ser una falla tipo dúctil que es lo que estipula
31808.
Para esto, se calculará cuál es la máxima resistencia nominal cuando la sección se arma con el máximo acero permitido (a mayor acero en tracción, menor deformación debido a que el hormigón para equilibrar la fuerza en tracción necesita más sección en compresión lo que se
Tutorial
74 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. traduce en bajar el eje neutro por ende disminuir la deformación en el acero). Se trabajará con una deformación última del acero mínima del para así obtener un factor de reducción de .
0.005
0.9 31808 9.3
ϕ
Dado que:
Entonces:
= ∙ = 0.003, = 0.005 = 47 =17,625
Siendo se obtiene que Y con las relaciones antes obtenidas se obtiene que,
= 31.44 = ϕ∙ =28.3 .
Este último resultado quiere decir que hasta momentos de la solicitación se puede cubrir con acero de modo que la falla última esperada sea falla dúctil con deformación en el acero mayor al . Esto último dado que de requerir satisfacer momentos mayores a este, no es posible armándola simplemente si se quiere obtener una falla dúctil, debido a que las deformaciones obtenidas en el acero en tracción serían bajo el . Para los casos en que el momento requerido sea mayor al valor obtenido, una solución es adicionar acero en compresión de modo que el eje neutro sube y así la deformación en el acero aumenta y permite adicionar mayor cuantía en tracción para cubrir el delta de momento. Más adelante se desarrollará esta idea con mayor profundidad.
⁄
Tutorial
5 ⁄
75 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Por otro lado se puede calcular los centímetros cuadrados que están asociados a este valor límite. Despejando de la ecuación 1.
∙ ∙∙ 0.85∙ = ⇒ =18.95
Cuantías mayores a ésta darán una deformación última inferior al código.
5.2.1.3.
Suponiendo que
5 ⁄
. No cumpliendo con el
Calcularloscentímetroscuadradosnecesariosparacubrirlorequerido
= 25 28. 3 5 ⁄ 0.9
Como el momento requerido es inferior a acero será mayor al con lo que será
, en estado último la deformación en el
.
Con lo que la resistencia nominal debe ser
De la ecuación 2 se tiene,
Despejando , se obtiene Por ecuación 1
= ⇒ = 27.78 ϕ = ∙ 2∙ =0.85∙∙ ∙∙∙ ∙ =15.17 = 68.5 ⇒ = =. [] y,
Nota: no se calculó la deformación del acero debido a que por análisis antes mencionado esta será mayor al .
5 ⁄
5.2.2. Análisis de la Viga Doblemente Armada Con los resultados obtenidos hasta ahora se tiene:
Tutorial
76 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
La viga armada simplemente (sólo refuerzo a tracción) resiste un momento máximo último de:
= ϕ∙ =28.3 5 ⁄ ϕ=0.9. =18.95
Para cumplir con una deformación en el acero mayor al
La cuantía que le brinda esa resistencia máxima es:
Estos últimos resultados indican, como se comentó, que para cuantías menores la deformación en el acero será mayor al cinco por mil y para cuantías mayores no. Ahora bien, ¿Qué sucede si la solicitación de la viga es mayor a
?.
Si la solicitación es mayor, se requiere una mayor cuantía de refuerzo en tracción, y como se comentó asignar una cuantía mayor implica no cumplir con la deformación del acero en tracción. Para esto, se requiere entonces asignar acero en compresión, que le entrega mayor ductilidad a la viga dado que el eje neutro sube debido a que necesita menos sección en compresión ya que el acero en compresión también trabaja. Entonces al asignarle acero en compresión se puede asignar cierta cuantía en tracción de modo de cumplir con las deformaciones.
Figura 1: esquemas Viga Doblemente armada.
40
28.3
Supongamos el caso en que el solicitado es . Este valor es mayor que por ende se requiere refuerzo en compresión ¿cuánto? Una forma alternativa, pero muy útil de saber cuánto acero en compresión se requiere sin tener que hacer mayores cálculos es:
Tutorial
Se requiere cubrir un momento extra de,
∆ = 0.409 31.44 = 13
77 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Este delta de momento se cubrirá con un momento par generado por el refuerzo en tracción que se asignará y el refuerzo en compresión. De modo qué si se tiene:
Figura 3: esquema representativo del aporte del momento par.
Primero, como se busca no alterar el equilibrio, de modo de conservar el mismo eje neutro y el mismo estado de deformaciones se impone la condición:
∙ = Ahora bien, el momento que genera el par fuerza es:
∆ = ∙ ∙′ = 13 Implica que,
Siendo
∙ ∙′ = ∆ ∆ ⇔ = ∙′ el recubrimiento superior. Se obtiene,
= .
Y,
= ∙ ∙ ⇒ = ∙ ∙ o,
Tutorial
78 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
= ∙ ⇒ =
Saber si fluye o no arriba, es muy sencillo y se desprende del diagrama de estado de deformaciones,
= ∙′
Con los valores que se calcularon para el estado de máxima cuantía:
= 0.003∙17.6253 17.625 = 0.00248 ⇒ ó .
Por lo que se debe agregar:
= = . ∴ 7.04 ó ó = 40 El análisis antes obtenido es muy útil para cálculos rápidos. Sin embargo si se solicita verificar una viga dada ciertas cuantías en compresión y tracción se debe entrar a utilizar las ecuaciones que se verán a continuación. Verificación de resultados: Al igual que el equilibrio analizado para la viga simplemente armada, se generan las siguientes ecuaciones:
= + = ∙ 2∙+ ∙
.1 .2
Al igual que el acero en tracción, el acero en compresión debe analizarse para el caso en que fluye o en que no. (Para el cálculo de la fuerza )
Entonces, los resultados obtenidos se tuvieron qué:
= 18.95+7.04 = 25.99 ′ = 0+7.04 = 7.04 =0.9
Se supone (acero en tracción fluyendo) Se supone acero en compresión fluyendo
Entonces:
Tutorial
79 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. De la ecuación 1:
∙ =0.85∙′∙∙ ∙+ ∙′ Despejando C y remplazando se obtiene:
= . Verificación de deformaciones (para ver si los supuestos fueron bien hechos)
= ∙′ =0.002489 →. = ∙ =0.005 →.
De la ecuación 2 se obtiene:
=0.85∙′∙∙ ∙∙ 2∙+ ∙′∙ ⇔ =44.445 ⇒ =∙ = Valor que se requería.
5.2.3. Programación en Visual Basic como código
DECLARACIÓN DE VARIABLES GLOBALES Dim H As Double Dim B As Double Dim Fpc As Double Dim Fy As Double Dim E As Double Dim B1 As Double Dim r As Double 'recubrimiento inferior Dim c As Double Dim c_max_SA As Double Dim e_cu As Double Dim d As Double Dim Mn_max_SA As Double Dim As_max_SA As Double Dim es As Double Dim As1 As Double Dim Asp As Double
Tutorial
80 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Dim As1_extra As Double Dim Asp_extra As Double Dim esp As Double Dim rp As Double 'recubrimiento inferior
MACRO PRINCIPAL: Sub Viga_simplementeA() Dim Mu_max_SA As Double 'Máximo momento que se puede cubrir con viga SA,'para obtener una deformación es mayor al 5 por mil. Dim Mu As Double 'Ingreso de datos. B = 25 'cm. H = 50 'cm. Fpc = 250 'kgf/cm2. Fy = 4200 'kgf/cm2. E = 50 'kgf/cm2. r = 3 'cm. rp = 3 'cm. Mu = 40 'ton-m. e_cu = 0.003 'deformación última del hormigón. '' d = H - r B1 = beta(Fpc) 'B1 tomará el valor que toma Beta en la función beta con valor de entrada Fpc. Call resistenciaMaxSA 'Se llama a la macro que calculará la resistencia máxima admisible para Viga 'simplemente armada (supuesto: es = 0.005). If Mu * 10 ^ 5 < 0.9 * Mn_max_SA Then 'Calcula el área requerida sólo en el caso en que se pueda 'obtener una deformación última del acero mayor a 0.005. As_req = raiz(0.85 * Fpc * B1 ^ 2 * B * 0.5, -0.85 * Fpc * B1 * B * d, (Mu * 10 ^ 5) / 0.9) MsgBox "La viga NO requiere ser doblemente armada. Se cubre con: " & Round(As_req, 2) & " [cm2] con una deformación de es = " & Round(es, 4) ''la función Round(variable, decimal a redondear) es redondear. Else ' en el caso que no, se calcula los aceros extra a agregar con el momento par As1_extra = (Mu * 10 ^ 5 / 0.9 - Mn_max_SA) / (Fy * (d - rp)) esp = e_cu * (c_max_SA - rp) / c_max_SA If esp < Fy / E Then Asp_extra = Fy * As1_extra / (E * esp) Else Asp_extra = As1_extra End If MsgBox "La viga SI requiere ser doblemente armada, con acero inferior : " & Round(As_max_SA, 2) + Round(As1_extra, 2) & " [cm2]" & " Acero superior: " & Round(Asp_extra, 2) & " [cm2]" Tutorial
81 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
End If End Sub
FUNCIONES Y MACROS SECUNDARIAS Private Function beta(x As Double) 'x es el valor de entrada a la función '(en este caso x = Fpc). 'ACI318S-08 Cap 10.2.7.3 If x <= 280 Then beta = 0.85 Else If (0.85 - (0.2) / 280 * (x - 280)) < 0.65 Then beta = 0.65 Else beta = 0.85 - (0.2) / 280 * (x - 280) End If End If End Function Sub resistenciaMaxSA() c_max_SA = e_cu * d / (0.005 + e_cu) Mn_max_SA = 0.85 * Fpc * B1 * c_max_SA * B * (d - B1 * c_max_SA / 2) ''Resistencia máxima 'admisible Viga simplemente armada al 0.005. As_max_SA = 0.85 * Fpc * B1 * c_max_SA * B / Fy 'Centímetros cuadrados de acero en tracción'para obtener una deformación del 0.005. End Sub Private Function raiz(aa As Double, bb As Double, cc As Double) 'Se buscará el valor de c que cumple con el equilibrio de la sección cuando se tiene un 'momento nominal requerido = Mu/0.9. '1.- ALTERNATIVA SOLUCIÓN ECUACIÓN CUADRÁTICA Dim x1 As Double 'primera raiz Dim x2 As Double 'segunda raiz x1 = (-bb + Sqr(bb ^ 2 - 4 * aa * cc)) / (2 * aa) x2 = (-bb - Sqr(bb ^ 2 - 4 * aa * cc)) / (2 * aa) 'el criterio para escoger el valor correcto del eje neutro será el que esté más cerca del 'centro de la viga. Dim dis1 As Double Dim dis2 As Double If x1 > 0 And x2 > 0 Then dist1 = Abs(H / 2 - x1) dist2 = Abs(H / 2 - x2) If dist1 < dist2 Then c = x1 Else c = x2 Tutorial
82 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. End If Else c = Application.WorksheetFunction.Max(x1, x2) End If ' Con el valor del eje neutro encontrado se procede a calcular el área requerida raiz = (0.85 * Fpc * B1 * c * B / Fy) es = e_cu * (d - c) / c '2.- ALTERNATIVA POR NEWTON RHAPSON 'Se buscará el eje neutro con el algoritmo de Newton Rhapson 'Dim dif_acep As Double 'Dim incremento As Double 'dif_acep = 0.01 'Valor admisible para terminar la iteración del método 'paso = 0.001 'Paso de la iteración 'c_o = 0 'comeienzo 'Dim encontrado As Boolean 'encontrado = False 'variable que al ser verdadera se terminará la iteración 'Do While encontrado = False 'c_1 = c_o + paso 'c_1 = c_o - (c_o ^ 2 * aa + c_o * bb + cc) / (2 * c_o * aa + bb) 'Formulación de Newton Rhapson ' If c_1 - c_o < dif_acep Then 'Verificación para ver si el método converge ' encontrado = True ' End If ' 'c_o = c_o + paso 'Loop 'c = c_o '' End Function
EL código al correrlo mostraría por pantalla:
Tutorial
83 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.2.4. Interacción Excel - Visual Basic Para trabajar Excel apoyado por Visual Basic, una vez que el código ya está realizado, basta referenciar que la entrada de datos sea por medio de celdas de Excel, de modo que: El ingreso de datos y resultados en la planilla sea así:
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..24
Entonces el antiguo ingreso de datos debe ser modificado por: 'Ingreso de datos. B = Range("c3") 'cm. H = Cells(4, 3) 'cm. cells(fila,columna) Fpc = Cells(5, 3) 'kgf/cm2. Fy = Cells(6, 3) 'kgf/cm2. E = Cells(7, 3) 'kgf/cm2. r = Cells(8, 3) 'cm. rp = Cells(9, 3) 'cm. Mu = Cells(10, 3) 'ton-m. e_cu = Range("c11") 'deformación última del hormigón.
Notar que se observan dos formas de referencias, mediante Range o mediante Cells, ambas son válidas. Sin embargo para códigos más complejos es más útil trabajar con Cells debido a que se puede hacer un barrido en sus filas y en sus columnas mediante valor numérico. La propiedad Range sirve para asignar un rango, por ejemplo si se quisiera eliminar los datos ingresados, mediante código, habría que ocupar Range(cells(3,3),cells(10,3)).ClearContents. Ahora para que se muestren los resultados en las filas de la columna H, habría que agregar al código, en la parte que aparecer:
Tutorial
84 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. MsgBox "La viga NO requiere ser doblemente armada. Se cubre con: " & Round(As_req, 2) & " [cm2] con una deformación de es = " & Round(es, 4)
Cells(5,8) = "NO" Cells(6,8) = Round(As_req, 2) & " [cm2]" Cells(7,8) = "-" Cells(8, 8) = Round(es, 4) Cells(9, 8) = "-" Análogamente agregar para el caso en que requiera ser doblemente armada:
Cells(5,8) = "SI" Cells(6,8) = Round(As_max_SA, 2) + Round(As1_extra, 2) & " [cm2]" Cells(7,8) = Round(Asp_extra, 2) & " [cm2]" Cells(8, 8) = 0.005 Cells(9, 8) = Round(esp, 4) Notas:
El uso de "&" es para concatenar el valor numérico a un texto, en este ejemplo es para que pegue en la celda la cuantía y la unidad. Al asignarle a VB algo entre doble comillas, lo asigna como texto (igual que en Excel) o String. El MsgBox ya no sería necesario dado que se está mostrando el resultado en las celdas asignadas.
5.3. Diagrama de Interacción carga axial – momento
,
Las columnas son elementos estructurales que están sometidos a esfuerzos principalmente de compresión y también de flexión. El comportamiento del elemento está dominado por las fuerzas de compresión que actúan sobre él, condicionando su resistencia a flexión. Para el diseño se emplea un enfoque de análisis a flexo-compresión (carga axial y de momento flector). El análisis es similar al hecho en vigas, con la diferencia que ahora el equilibrio se realiza con la presencia de carga axial. La inclusión de la carga axial se traduce en agregar una incógnita al problema, cosa que matemáticamente no tendría solución, es por esto que para los elementos de flexo-compresión la solución de asocia a un par . Para efectos prácticos, esto se entiende como que para una columna sometida a un esfuerzo axial dado, podrá resistir un momento nominal que dependerá de la carga axial.
,
Ahora bien, ¿qué cargas axiales se considerará?, En estricto rigor se deben considerar todas las combinaciones a las cuales se espera esté sometido el elemento. Para efectos prácticos, uno puede hacer un barrio desde la carga axial máxima y la carga axial mínima que resiste la columna de modo de tener todas las posibles combinaciones de resistencias , del elemento. A la representación gráfica de esto es lo que se conoce como el diagrama de interacción carga axial - momento, y este es fundamental para el diseño.
,
,
Tutorial
85 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
El diagrama de interacción obtenido será el de resistencia nominal. El código estipula que éste debe ser minorado por un factor que se explicará al final de este apartado.
Para la elaboración del diagrama de interacción se debe resolver el equilibrio en la sección sometida a un momento flector y una carga axial en el instante en que falla el elemento . La falla se produce por el aplastamiento del hormigón . El siguiente esquema muestra el estado tensional y de deformación en la sección al momento de estado último.
=0.003
,
De la figura anterior se observan lo siguiente:
Las fuerzas sobre la sección: o Una carga de compresión y una de flexión. En la figura se representan como .
,
Las fueras de reacción de la sección: o Compresión del hormigón: magnitud calculada según rectángulo equivalente del código ACI. Que es una aproximación fidedigna para el estado último del concreto. o Fuerzas del refuerzo: estas pueden ser en tracción o en compresión y dependen del estado de deformaciones de la sección transversal.
Centroide plástico : corresponde al punto de la sección que al cargarlo, la deformación axial de toda la sección es uniforme. La carga axial externa se debe aplicar en este punto debido a que así no genera un momento.
Al es un centroide (en este caso de esfuerzos), se obtiene al igual que cualquier centroide, por ejemplo geométrico. La fórmula es:
Tutorial
86 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
= ∑∑∙ Y con respecto a la Imagen anterior:
∙ ∙+∙ ∙+.∙′∙∙∙/ = ∙ +∙ +.∙′∙∙ Medido desde arriba hacia abajo. Este centroide podría ser más preciso si para el esfuerzo en compresión se restaran las áreas que utilizan los aceros, sin embargo la diferencia es despreciable. Entendiéndolo conceptualmente es lógico que para la sección de la imagen anterior, el centroide plástico esté más abajo de la mitad, debido a que existe mayor refuerzo en la sección inferior. Del mismo modo para una sección de refuerzo simétrico el centroide plástico caerá en la mitad.
Nota: para efectos de este apunte, cuando se hable de refuerzo inferior, es solamente referido a la disposición de la imagen, que correspondería al área de acero Análogo para refuerzo superior Se menciona esto debido a que al ser columnas (elementos verticales) es absurdo hablar de refuerzo inferior o superior.
.
.
Las ecuaciones de equilibrio que rigen el sistema son:
=+ ó Donde,
=0.85∙′∙∙ = ∙ ∙ ó ∙ = ∙ ∙ ó ∙ Y por estados de deformación se sabe qué:
Y la ecuación de momento se tiene qué:
Siendo
Tutorial
= ∙ = ∙ ′
= ∙ 2∙+ ∙( ′)+ ∙( ) ó = .
87 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
,
Se tienen dos ecuaciones y dos incógnitas , por ende el sistema tiene solución. Basta implementar un algoritmo y se puede hacer el barrido completo. En un apartado posterior se implementará el algoritmo en VBa que incorpore lo aprendido en el tutorial.
5.4. Puntos característicos del diagrama de interacción carga axial - momento Punto de tracción pura
,
:
La capacidad última en tracción del elemento será cuando sólo están actuando las barras de refuerzo, y llevándolas a un estado último cuando estas fluyen.
Y por equilibrio se tiene:
= ∙′ +
Punto de flexión pura: Ocurre cuando la carga axial es igual a cero. es decir se está en presencia de flexión pura. Mismo equilibrio que se hace en vigas.
Tutorial
88 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Las ecuaciones de equilibrio en este caso son:
= + = ∙ 2∙+ ∙
.1 .2
Ajustando las fuerzas de los refuerzos de acero en función de su deformación. Siendo
=
.
5.4.3. Punto de balance en flexo compresión: Ocurre cuando el concreto llega a su deformación última en el mismo instante que el acero de refuerzo a su deformación de fluencia. Se obtiene por equilibrio al hacer.
Tutorial
89 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
En este caso se conoce la deformación del refuerzo en tracción inferior obtiene el valor del eje neutro de la compatibilidad de deformaciones:
=
= ∙ =
Luego con el valor del eje neutro, se obtiene la deformación del acero superior
, por ende se
= ∙ −
.Y
con esto se puede obtener el valor de la carga axial y momento que generan ese estado de deformación. (utilizando la ecuación 1 y 2).
5.4.4. punto de
=.
Ocurre cuando la deformación del refuerzo en tracción es del 4 por mil. punto útil para efectos de la normativa. (factores de minoración). Se calcula del mismo modo que el punto de balance, solamente cambia el valor de la deformación.
= ∙ =0.004 Luego con el valor del eje neutro, se obtiene la deformación del acero superior
= ∙ −
.Y
con esto se puede obtener el valor de la carga axial y momento que generan ese estado de deformación. (utilizando la ecuación 1 y 2).
5.4.5. Punto de
=.
:
Ocurre cuando la deformación del refuerzo en tracción es del 5 por mil. punto útil para efectos de la normativa. (factores de minoración). Se calcula del mismo modo que el punto de balance, solamente cambia el valor de la deformación.
Tutorial
90 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
= ∙ =0.005 Luego con el valor del eje neutro, se obtiene la deformación del acero superior
= ∙ −
.Y
con esto se puede obtener el valor de la carga axial y momento que generan ese estado de deformación. (utilizando la ecuación 1 y 2).
5.4.6. Punto de compresión pura
,
:
Máxima compresión que soporta la columna sometida sólo a una carga axial.
Y por equilibrio se tiene:
=.∙′ ∙ + ∙′ + ∙′ +
Donde es el área de concreto igual a . Es decir el esfuerzo máximo en el concreto sumado al esfuerzo cuando las barras en compresión están fluyendo. (recordar que el factor de 0.85 propone el ACI para el rectángulo equivalente de esfuerzos en el concreto cuando se tiene una deformación última.
Nota: la expresión anterior es válida para cuando la carga se aplica sobre el , por que osino hubiese un pequeño momento y el punto de compresión no caería sobre el eje de las ordenadas. Cabe mencionar que ACI tomando en consideración esto último restringe la compresión máxima, por el hecho de existir pequeñas excentricidades.
Tutorial
91 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.5. Diagrama de Interacción P-M de diseño
31808 á
Al igual como se hace en elementos en flexión, el código impone factores que reducen la resistencia nominal de la sección a modo seguridad donde se debe velar por cumplir:
, ≤ , , , Donde
corresponde a las solicitaciones mayoradas que actúan sobre el elemento, es la resistencia nominal de la sección (DI antes calculado), y corresponde al factor de reducción de resistencia que apunta a prevenir el tipo de falla frágil (al igual que en elementos en flexión). La forma en que el código (ACI) prevee la falla frágil es asignándole mayor factor a los estados últimos que tienen menor ductilidad y uno menor a los con mayor. Por ende el factor dependerá de la deformación del refuerzo en tracción, que al igual que en vigas, se tendrá un factor de para deformaciones bajo el 2 por mil (sección controlada por compresión), para secciones con deformación del refuerzo en tracción superior al 5 por mil (sección controlada por tensión). Y una transición lineal desde un régimen a otro. Esto se especifica en la sección .
0.65
=0.9
=
9.3.2.2 31808
En la misma sección se especifica que se puede utilizar de forma alternativa una reducción que depende de la carga axial, que será la que se implementará y explicará en este apunte. Consiste que el factor se incrementará linealmente desde en la medida que disminuye desde ó , el que sea menor, hasta cero.
0.1∙∙
= 0.65 = 0.9
Es decir, como se tendrá el diagrama de interacción de resistencia nominal
0.1∙∙ 0.65∙
,,
se calculará:
Y a partir del valor más pequeño de los dos, se reducirá según corresponda para obtener la curva de diseño . Según la siguiente recta:
,
= 0.9 0.10.∙25∙ ó0.0.6655∙ ∙
Por otro lado, se especifica en el código que para los elementos sometidos flexión y carga axial, la carga axial máxima debe ser:
á =∙0.8∙0.85+∗ + Que equivalente a:
á = ∙. ∙ ó En el ejemplo se puede ver la aplicación de la minoración. Se escogió esta forma alternativa debido a que no se almacenó la deformación del acero en la rutina de Vba, sino las cargas axiales.
Tutorial
92 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.6. Ejemplo diagrama de interacción carga axial - momento Se obtendrá el diagrama de interacción
, , y
,
:
de la siguiente columna:
Se tienen los siguientes datos y parámetros a consideras:
=2.1∙10 ⁄ =4200 ⁄ ′ =250 ⁄ =40 =60 =5 ′=5 = 425 = 19.63 ′ = 225 = 9.82
Con el refuerzo provisto se obtiene una cuantía de:
+ = ∙ ∙100=1.23 % 318 08ó 21.6.3.1
Que está dentro de lo permitido por que limita la cuantía de refuerzo longitudinal en elementos a flexo - compresión como mínimo 1% y máximo 6%. Sin embargo, como recomendación, no superar el 3-4%. Observación: en este caso, al tener un refuerzo asimétrico (más acero inferior que superior), se tendrá diferentes valores dependiendo del sentido en que se analice. Se calculará en este caso cuando la flexión genera que el refuerzo inferior se tracciona. (lado derecho del diagrama de interacción).
Tutorial
93 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.6.1. Cálculo del centroide plástico: Calculado desde la parte superior se tiene:
∙ ∙+∙ ∙+.∙′∙∙∙/ = ∙ +∙ +.∙′∙∙ 605+0.85∙250∙40∙60∙ 60/2 = 9.82∙4200∙5+19.63∙4200∙ 9.82∙4200+19.63∙4200+0.85∙250∙40∙60 = . También respecto a la reducción del diagrama de integración se utiliza el valor de:
.∙∙ = 0.1 ∙250∙40∙60 = .∙ =128.18 á 0.1∙∙ 60
Por ende se reducirá utilizando el valor de
que es el menor valor
.
También se utilizará el valor máximo de carga axial admisible:
á =0.8∙ ó = 0.8 ∙627.44 = . ,
En base a lo expuesto, se procede a calcular los puntos característicos del diagrama de interacción y su correspondiente reducción para diseño:
5.6.2. Tracción Pura:
= ∙′ +=4200∙19.63+9.82 = . =
Para diseño:
=.⟹ , = 0.9∙127.7,0 = . , 5.6.3. Flexión Pura:
= + = ∙ 2∙+ ∙
.1 .2
Asumiendo que en el estado último el refuerzo inferior está en fluencia y el superior en estado lineal
Tutorial
<
. Se tiene:
94 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
=∙ =19.63∙4200=. ′ = ∙∙ =9.82∙2.1∙10 ∙ =.∙ = ∙ ′ ′ =.∙.∙
Siendo,
Se obtiene,
Y la fuerza en compresión del hormigón es:
=0.85∙ ∙ ∙∙=0.85∙250∙0.85∙∙40=.∙ / Donde,
= 0.85 31008 ó 10.2.7.3,
Por ecuación 1 (equilibrio de fuerzas) se tiene:
82.47=7.25∙+20616.7∙0.003∙ 5
Despejando se obtiene:
= .
Con lo que se obtiene:
8.1235 = . ⟹ = ∙ ′ =0.003∙ 8.123 558.123 = . ⟹ = ∙ = 0. 0 03∙ 8.123
Con lo que se verifica que los supuestos fueron bien hechos. Ahora, de la ecuación 2 se obtiene:
=7.25∙8.123∙55 0.85∙8.2 123+20616.7∙0.003∙ 8.1235 ∙555 8. 1 23 = . = ó . Para diseño:
=.⟹ , = 0,0.9∙42.14 = ,.
Tutorial
95 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
5.6.4. Punto de
=.
:
Al conocer el estado de deformación del acero inferior, se obtiene c.
55 = 0.005 = ∙ = . ⟹ 0. 0 03∙
Se despeja y se obtiene:
= . 20.635 =0.00227⟹ = ∙ ′ =0.003∙ 20.63
Y por estado de deformación:
Las fuerzas a considerar son:
=∙ =19.63∙4200=. ′ = ∙ =9.82∙4200=. =0.85∙ ∙ ∙∙=0.85∙250∙0.85∙23.57∙40=.
Entonces por equilibrio,
=+ ó = 149.02+41.23 82.47= . Y la ecuación de momento se tiene qué:
= ∙ 2∙+ ∙( ′)+ ∙( ) ó 63+41.23∙31.635+ 82.47∙5531.63 =. ∙31.63 0.85∙20. 2 = . Para diseño:
=. > , = 0.65∙107.78 ,0.65∙64.32 ⟹ = . ⟹= . ,.
Según el criterio de diseño utilizado depende del valor de la carga axial. Como
NOTA: según criterio por deformación el factor en este caso sería 0.9.
5.6.5. Punto de
=.
:
Su procedimiento de cálculo es análogo al punto anterior, con la diferencia que la deformación del acero inferior es en este caso
= 0.004.
Tutorial
96 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
55 = 0.004 = ∙ = . ⟹ 0. 0 03∙
Se despeja y se obtiene:
= . 23.575 =0.00236⟹ = ∙ ′ =0.003∙ 23.57
Y por estado de deformación:
Las fuerzas a considerar son:
=∙ =19.63∙4200=. ′ = ∙ =9.82∙4200=. =0.85∙ ∙ ∙∙=0.85∙250∙0.85∙23.57∙40=.
Entonces por equilibrio,
=+ ó = 170.3 +41.23 82.47= . Y la ecuación de momento se tiene qué:
= ∙ 2∙+ ∙( ′)+ ∙( ) ó 57+41.23∙ 31.635+ 82.47∙5531.63 =. ∙31.63 0.85∙23. 2 = . Para diseño:
=. > ,,. ⟹ = . ⟹= . = 0.65∙129.07 ,0.65∙67.06
Según el criterio de diseño utilizado depende del valor de la carga axial. Como
NOTA: según criterio por deformación el factor en este caso sería distinto de
0.65
.
5.6.6. Punto de balance en flexo compresión: Su procedimiento de cálculo es análogo a los puntos anteriores, con la diferencia que la deformación del acero inferior es en este caso
= . 55 = 4200 = ∙ = ⟹0.003∙ 2.1∙10
Se despeja y se obtiene:
Tutorial
97 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
= =0.0025⟹
Con lo que se obtiene:
Las fuerzas a considerar son:
= . ′ =. =.
Entonces por equilibrio,
= . = . Para diseño:
=. > , 0.65∙197.19 ,0.65∙72.22 ⟹ = . ⟹= . = , .
Según el criterio de diseño utilizado depende del valor de la carga axial. Como
5.6.7. Punto de compresión Pura:
=.∙′ ∙ + ∙′ + =0.85∙250∙ (40∙60 9.82+19.63)+4200∙9.82+19.63 = . = Para diseño:
Según el criterio de diseño utilizado depende del valor de la carga axial. La carga axial máxima fue calculada previamente:
á = . ⟹ = . ⟹ , = 0.65∙501.95 ,0 = . , 5.6.8. Resumen de los puntos característicos:
ó Tutorial
123.7 0 111.33 0.00 98
- Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
ó . . ó ó
0 107.78 129.07 197.19 627.44
42.14 64.32 67.06 72.22 0
0.00 70.06 83.90 128.17 326.27
37.93 41.81 43.59 46.94 0.00
En la siguiente gráfica se observan los puntos característicos:
Puntos Característicos del Diagrama de Integración. ] n o t [ L A I X A A G R A C
700 600 500 400 300 200 100 0 -100 0
10
20
30
40
50
60
70
80
-200 MOMENTO [ton-m]
De los resultados obtenidos se desprende, entre otras cosas, que a mayor carga axial menor capacidad de deformación (ductilidad) presenta la sección. Esto se puede observar en un diagrama de carga axial - curvatura, que se presentará en el apartado siguiente.
5.7. Elaboración de una rutina en Visual Basic de Excel que calcule un diagrama de Interacción carga axial - momento. La siguiente rutina desarrolla un diagrama de interacción características:
,
donde se tienen las siguientes
Ingreso de datos mediante código. Desarrollo matemático en VBa. Sólo se utiliza la hoja de Excel para votar resultados y graficarlos. Realiza un diagrama de interacción en ambos sentidos (positivo y negativo).
El objetivo de la rutina es que se familiaricen sobre el uso de diferentes herramientas que se presentaron a lo largo del tutorial. Como se verá la comprobación se hizo mediante el software Etabs y los resultados difieren en un error despreciable.
Tutorial
99 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Algunos comentarios:
/0.85
En el código constantemente se habla se Positivo y Negativo, se refiere a los sentidos de análisis según la siguiente convención:
La siguiente imagen muestra el rango de valores graficados:
Tutorial
0.75∙′
Se grafican 150 puntos por sentidos variando el eje neutro desde hasta . Estos valores se escogieron para evitar problemas de excentricidad. Es decir, para valores donde el eje neutro es muy grande o muy pequeño, los resultados obtenidos no tienen sentido. Por ejemplo un eje neutro de dos, en la columna del ejemplo anterior, se obtiene una carga axial de tracción y un momento negativo, cosa que deja de tener sentido (por el momento negativo). Se podría haber implementado un algoritmo que busque el valor en que el momento es cero, y graficar hasta ahí, pero sencillamente consideré que es absolutamente innecesario, y que sólo complicaría el código.
100 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Diagrama de Interacción P-N Negativo
Positivo
800 600
] n o t [ l a i x a a g r a C
400 200 0
-70
-20
30
80
-200 Momento [ton - m]
Observación: el código se encuentra comentado y sigue la lógica de cómo se explicó en este apunte. Se recomienda que para su estudio se copie y pegue en VBa, porque por temas de espacio queda poco legible. El diagrama obtenido del ejercicio anterior es:
Diagrama de Interacción P-M 700 600 500 400
] n o t [ l a i x a a g r a C
300 200 100 0 -80
-60
-40
-20
0
20
40
60
80
-100 -200 Momento [ton-m] Ilustración 25: Diagrama de interacción (P-M) de la columna en estudio. El exterior diagrama Nominal y el interior de diseño.
El código es el siguiente:
Tutorial
101 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 'DEFINICIÓN DE VARIABLES Dim B As Double 'ancho columna Dim H As Double 'alto columna Dim dr As Double 'recubrimiento Dim fy As Double 'esfuerzo de fluencia del acero Dim E As Double 'módulo elástico del acero Dim fpc As Double 'resistencia especificada a compresión del hormigón f'c Dim ecu As Double 'deformación última del hormigón Dim As1 As Double 'área de acero del refuerzo inferior As Dim Asp As Double 'área de acero del refuero superior As' Dim Pi As Double 'constante pi Dim d As Double 'H-r Dim cp1 As Double 'centroide plástico positivo Dim cp2 As Double 'centroide plástico negativo Dim b1 As Double 'beta 1. factor rectángulo equivalente Dim matriz_Pn1_Pn2_Mn1_Mn2_Curv() As Double ' matriz de 5 filas, que se le irán agregando columnas 'las filas son: Pn1,Pn2, Mn1, Mn2, Curvatura 1/m. Dim aux As Double 'contador de datos 'INGRESO DE DATOS Sub Ingreso_de_Datos() B = 40 'cm H = 60 'cm dr = 5 'cm fy = 4200 'kgf/cm2 E = 2.1 * 10 ^ 6 'kgf/cm2 fpc = 250 'kgf/cm2 ecu = 0.003 Pi = 3.14159265358979 As1 = 19.6349540849362 'cm2 Asp = 19.6349540849362/2 'cm2 d = H - dr 'CALCULO DE BETA If fpc <= 280 Then b1 = 0.85 Else b1 = beta(fpc) End If '' cp1=(0.85*fpc*B*0.5*H^2+As1*fy*d+Asp*fy*dr)/(0.85*fpc*B*H+(Asp+As1)*fy)'c p positivo cp2=(0.85*fpc*B*0.5*H^2+Asp*fy*d+As1*fy*dr)/(0.85*fpc*B*H+(As1+Asp)*fy)'c p negativo Call Diagrama_de_Interaccion End Sub Sub Diagrama_de_Interaccion() Dim c As Double 'distancia al eje neutro, medida desde arriba [cm] Dim es As Double 'deformación unitaria del refuerzo inferior Dim esp As Double 'deformación unitaria del refuerzo superior aux = 1 ' COMPRESIÓN PURA
Tutorial
102 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. ReDim Preserve matriz_Pn1_Pn2_Mn1_Mn2_Curv(1 To 5,1 To aux)'se agrega una columna 'el primer dato será compresión pura... por ende se recorrerá el diagrama de arriba hacia abajo. matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,aux)=(0.85*fpc*(H*B-As1Asp)+fy*(As1+Asp))/1000 matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,aux)=(0.85*fpc*(H*B-As1Asp)+fy*(As1+Asp))/1000 matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,aux) = 0 matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,aux) = 0 matriz_Pn1_Pn2_Mn1_Mn2_Curv(5,aux) = 0 For c=H/0.85 To 0.75*dr Step -(H/0.85-0.75*dr)/150 'el paso es solo para generar 150 puntos es = ecu*(d-c)/c 'por ley de navier esp = ecu*(c-dr)/c 'por ley de navier aux = aux + 1 ' nueva columna de datos ReDim Preserve matriz_Pn1_Pn2_Mn1_Mn2_Curv(1 'redimensiona un vector
To
5,
1
To
aux)
If Abs(es)<=fy/E Then 'diferentes casos en función de la deformación del acero. If Abs(esp)<=fy/E Then matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,aux)=(Asp*E*esp+b1*0.85*fpc*c*BAs1*E*es)/1000'Pn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,aux)=(As1*E*esp+b1*0.85*fpc*c*BAsp*E*es)/1000'Pn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,aux)=(Asp*E*esp*(cp1dr)+0.85*fpc*b1*c*B*(cp1-b1*c/2)+As1*E*es*(d-cp1))/100000'Mn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,aux)=-(As1*E*esp*(cp2dr)+0.85*fpc*b1*c*B*(cp2-b1*c/2)+Asp*E*es*(d-cp2))/100000'Mn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(5,aux)=ecu/c*100 Else matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,aux)=(Asp*fy+b1*0.85*fpc*c*BAs1*E*es)/1000'Pn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,aux)=(As1*fy+b1*0.85*fpc*c*BAsp*E*es)/1000'Pn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,aux)=(Asp*fy*(cp1dr)+0.85*fpc*b1*c*B*(cp1-b1*c/2)+As1*E*es*(d-cp1))/100000'Mn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,aux)=-(As1*fy*(cp2dr)+0.85*fpc*b1*c*B*(cp2-b1*c/2)+Asp*E*es*(d-cp2))/100000'Mn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(5,aux)=ecu/c*100 End If Else If Abs(esp)<=fy/E Then matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,aux)=(Asp*E*esp+b1*0.85*fpc*c*BAs1*fy)/1000'Pn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,aux)=(As1*E*esp+b1*0.85*fpc*c*BAsp*fy)/1000'Pn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,aux)=(Asp*E*esp*(cp1dr)+0.85*fpc*b1*c*B*(cp1-b1*c/2)+As1*fy*(d-cp1))/100000'Mn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,aux)=-(As1*E*esp*(cp2dr)+0.85*fpc*b1*c*B*(cp2-b1*c/2)+Asp*fy*(d-cp2))/100000'Mn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(5,aux)=ecu/c*100 Else
Tutorial
103 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. If c < dr Then matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,aux)=(-Asp*fy+b1*0.85*fpc*c*BAs1*fy)/1000'Pn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,aux)=(-As1*fy+b1*0.85*fpc*c*BAsp*fy)/1000'Pn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,aux)=(-Asp*fy*(cp1dr)+0.85*fpc*b1*c*B*(cp1-(b1*c)/2)+As1*fy*(d-cp1))/100000'Mn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,aux)=-(-As1*fy*(cp2dr)+0.85*fpc*b1*c*B*(cp2-(b1*c)/2)+Asp*fy*(d-cp2))/100000'Mn negativo Else If c > d Then matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,aux)=(Asp*fy+b1*0.85*fpc*c*B+As1*fy)/1000'P n positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,aux)=(As1*fy+b1*0.85*fpc*c*B+Asp*fy)/1000'P n negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,aux)=(Asp*fy*(cp1dr)+0.85*fpc*b1*c*B*(cp1-(b1*c)/2)-As1*fy*(d-cp1))/100000'Mn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,aux)=-(As1*fy*(cp2dr)+0.85*fpc*b1*c*B*(cp2-(b1*c)/2)-Asp*fy*(d-cp2))/100000'Mn negativo Else matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,aux)=(Asp*fy+b1*0.85*fpc*c*BAs1*fy)/1000'Pn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,aux)=(As1*fy+b1*0.85*fpc*c*BAsp*fy)/1000'Pn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,aux)=(Asp*fy*(cp1dr)+0.85*fpc*b1*c*B*(cp1-(b1*c)/2)+As1*fy*(d-cp1))/100000'Mn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,aux)=-(As1*fy*(cp2dr)+0.85*fpc*b1*c*B*(cp2-(b1*c)/2)+Asp*fy*(d-cp2))/100000'Mn negativo End If End If matriz_Pn1_Pn2_Mn1_Mn2_Curv(5,aux)=ecu/c*100 End If End If Next c aux = aux + 1 'TRACCIÓN PURA 'el último dato es tracción pura ReDim Preserve matriz_Pn1_Pn2_Mn1_Mn2_Curv(1 To 5, 1 To aux) matriz_Pn1_Pn2_Mn1_Mn2_Curv(1, aux) = -fy*(As1+Asp)/1000'Pn positivo matriz_Pn1_Pn2_Mn1_Mn2_Curv(2, aux) = -fy *(As1+Asp)/1000'Pn negativo matriz_Pn1_Pn2_Mn1_Mn2_Curv(3, aux) = 0 matriz_Pn1_Pn2_Mn1_Mn2_Curv(4, aux) = 0 matriz_Pn1_Pn2_Mn1_Mn2_Curv(5, aux) = 0 'se pegan los resultados para poder graficarlos. Range(Cells(2,1),Cells(aux+1,5)).Value Application.WorksheetFunction.Transpose(matriz_Pn1_Pn2_Mn1_Mn2_Curv) Call Minoración End Sub Sub Minoración() Dim phi As Double 'factor de reducción de resistencia
Tutorial
104 - Ignacio Mayorga / Ignacio Ruiz.
=
Hormigón Armado I, UTFSM Santiago. Dim k As Double Dim matriz_Pd1_Pd2_Md1_Md2() As Double 'matriz de 4 filas que contendrá n columnas. ' las filas son Carga axial positiva y negativa, momento positivo y momento negativo todas de diseño. Dim CeroPuntoUno As Double 'Valor desde cual comienza a aumentar de 0.65 hasta 0.9 el factor Dim Pc As Double 'compresión Pura Dim Pb As Double 'carga axial de balance Pc = matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,1) 'carga axial de compresión Pb = Punto_Balance()/1000 ' se llama a la función Punto_Balance 'se ocupa una función de excel, se escoge el menor de los dos, según permite ACI CeroPuntoUno = WorksheetFunction.Min(0.1*fpc*B*H/1000,0.65*Pb) For k = 1 To UBound(matriz_Pn1_Pn2_Mn1_Mn2_Curv, 2) ReDim Preserve matriz_Pd1_Pd2_Md1_Md2(1 To 4, 1 To k) If matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,k)>CeroPuntoUno/0.65 Then If matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,k)>0.8*Pc Then matriz_Pd1_Pd2_Md1_Md2(1,k)=Pc*0.8*0.65 Else matriz_Pd1_Pd2_Md1_Md2(1,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,k)*0.65 End If matriz_Pd1_Pd2_Md1_Md2(3,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,k)*0.65 Else If matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,k)>= 0Then phi=0.9(0.25*0.65/CeroPuntoUno)*matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,k) matriz_Pd1_Pd2_Md1_Md2(1,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,k)*phi matriz_Pd1_Pd2_Md1_Md2(3,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,k)*phi Else phi = 0.9 matriz_Pd1_Pd2_Md1_Md2(1,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(1,k)*phi matriz_Pd1_Pd2_Md1_Md2(3, k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(3,k)*phi End If End If If matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,k)>CeroPuntoUno/0.65 Then If matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,k)>0.8*Pc Then matriz_Pd1_Pd2_Md1_Md2(2,k)=Pc*0.8*0.65 Else matriz_Pd1_Pd2_Md1_Md2(2,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,k)*0.65 End If matriz_Pd1_Pd2_Md1_Md2(4,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,k)*0.65 Else If matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,k)>=0 Then phi=0.9(0.25*0.65/CeroPuntoUno)*matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,k)
Tutorial
105 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
matriz_Pd1_Pd2_Md1_Md2(2,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,k)*phi matriz_Pd1_Pd2_Md1_Md2(4,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,k)*phi Else phi = 0.9 matriz_Pd1_Pd2_Md1_Md2(2,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(2,k)*phi matriz_Pd1_Pd2_Md1_Md2(4,k)=matriz_Pn1_Pn2_Mn1_Mn2_Curv(4,k)*phi End If End If Next k Range(Cells(2,6),Cells(aux+1,9)).Value Application.WorksheetFunction.Transpose(matriz_Pd1_Pd2_Md1_Md2) End Sub Private Function beta(x As Double) If (0.85-(0.2)/280*(x-280))<0.65 Then beta = 0.65 Else beta = 0.85-(0.2)/280*(x - 280) End If End Function Public Function Punto_Balance() c = ecu*d/(fy/E + ecu) esp = ecu * (c - dr) / c If Abs(esp)<=fy/E Then Punto_Balance = b1*0.85*fpc*c*B-fy*As1 + Asp*E*esp Else Punto_Balance = b1*0.85*fpc*c*B - fy*As1 + Asp*fy End If End Function Sub títulos() 'Rotula las columnas de datos. Cells(1,1)="Pn positivo" Cells(1,2)="Pn negativo" Cells(1,3)="Mn positivo" Cells(1,4)="Mn negativo" Cells(1,5)="Curvatura última" Cells(1,6)="Pd positivo" Cells(1,7)="Pd negativo" Cells(1,8)="Md positivo" Cells(1,9)="Md negativo" End Sub
=
5.8. Diagrama Momento Curvatura con carga axial El diagrama de momento curvatura representa gráficamente el estado de deformación que tiene la sección a medida que se va aumentando su carga a flexión. Este nos sirve principalmente para conocer el nivel de ductilidad que tiene la sección, de modo de poder asegurar que al momento de la falla se produzca según el criterio que deseamos (evitar falla frágil).
Tutorial
106 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. En un apartado anterior se obtuvo el diagrama momento curvatura de una viga (sin carga axial), en esta ocasión se realiza lo mismo pero considerando la carga axial. Las ecuaciones que se presentan a continuación, están en respuesta del equilibrio interno de la sección que se representa en la siguiente imagen:
=+ ó = ∙ +̅+ ∙′ + ∙() ó Donde,
= ∙ ó . = ∙
Se debe considerar cómo varía la deformación del hormigón siguiente relación:
Y,
̅
, a medida que varía Con la
corresponde al centroide del esfuerzo en compresión del hormigón, calculado como:
∙∙ ∫ ̅ = ∫ ∙
Este medido desde el eje neutro hacia arriba.
EJEMPLO:
Tutorial
107 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Se trabajará con la siguiente columna (misma del diagrama de interacción P-M, ejemplo anterior). Y considerando una carga axial de .
=91.125
41.5 41.5 0.002 0.0059 0.0035 0.0044 0.0055 0.0094 0.0139 20 1.13
(separación del estribo) (área del estribo)
:
Esto considerando un refuerzo transversal
7.5 2.01
(separación del estribo) (área del estribo)
Se obtiene mediante una rutina en Visual Basic (ver más adelante) se obtiene el siguiente diagrama:
Momento Curvatura. Elemento Flexo-compresión
45 40 35
] m - 30 t [ 25 o t n e 20 m o 15 M
10 5 0 0
0,1
0,2
0,3 0,4 Curvatura [1/m]
0,5
0,6
Ilustración 26: diagrama momento - curvatura con carga axial de 91.13 [ton].
Tutorial
108 - Ignacio Mayorga / Ignacio Ruiz.
0,7
Hormigón Armado I, UTFSM Santiago. Se graficó hasta la falla en compresión del hormigón que estipula el modelo utilizado.
5.8.1. Código en Visual Basic: 6. Sub momento_curvatura_axial() 7. 'Declaración de Variables 8. Dim fpc As Double 'Resistencia cilíndrica del hormigón 9. Dim eo As Double 10. Dim euu As Double 11. Dim e50u As Double 12. Dim e50h As Double 13. Dim e50c As Double 14. Dim e20c As Double 15. Dim rho As Double 'Cuantía de acero confinamiento 16. Dim Bc As Double 'Ancho Núcleo Confinado 17. Dim Hc As Double 18. Dim B As Double 19. Dim H As Double 'Alto Núcleo Confinado 20. Dim Sh As Double 'Separación del refuerzo transversal 21. Dim Ae As Double 'Área transversal del estribo (de una rama) 22. Dim ec As Double 23. Dim as1 As Double 24. Dim asp As Double 25. Dim r As Double 26. Dim rp As Double 27. Dim Fy As Double 28. Dim E As Double 29. Dim d As Double 30. 31. '' 32. Dim cc As Double 33. Dim N As Double 34. Dim Cs As Double 35. Dim Ts As Double 36. 37. 38. 'Valores que son constantes 39. fpc = 300 40. B = 45 41. H = 45 42. Bc = 41.5 43. Hc = 41.5 44. Sh = 7.5 45. eo = 0.002 46. 'Ae = 1.13097335529233 47. Ae = 2.0096 48. r = 3 49. rp = 3 50. Fy = 4200 51. E = 2.1 * 10 ^ 6 52. as1 = 14.7262155637022 53. asp = 14.7262155637022 54. cp = 45 / 2 55. '' 56. 57. d = H - r
Tutorial
109 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 58. e50u = (0.21 + 0.002 * fpc) / (fpc - 70) 59. euu = 1.6 * e50u - 0.6 * eo 60. rho = 2 * Ae * (Bc + Hc) / (Bc * Hc * Sh) 61. e50h = 0.75 * rho * Sqr(Bc / Sh) 62. e50c = e50u + e50h 63. e20c = 1.6 * e50c - 0.6 * eo 64. 65. MsgBox e50c 66. 67. 68. Dim aa As Double 69. Dim bb As Double 70. Dim ccc As Double 71. 72. 'ecm = 0.0052 73. Call borrar 74. N = 91125 75. 76. Dim ec_kd_es_esp_M_Cur() As Double 77. Dim contador As Integer 78. 79. For ecm = 0.0002 To e20c Step 0.0002 80. 81. 'I.ANTES DE eo 82. If ecm < eo Then 83. 84. aa = fpc * B * (ecm / eo - ecm ^ 2 / (3 * eo ^ 2)) 'término que acompaña a kd^2. 85. 'CASO 1 Acero superior en inferior fluyendo 86. Cs1 = Fy * asp 87. Ts1 = Fy * as1 88. kd1 = (N - Cs + Ts) / (fpc * B * (ecm / eo - ecm ^ 2 / (3 * eo ^ 2))) 89. 'MsgBox kd1 90. 91. If ecm * (kd1 - rp) / kd1 > Fy / E And ecm * (d - kd1) / kd1 > Fy / E Then 92. kd = kd1 93. Cs = Cs1 94. Ts = Ts1 95. End If 96. 97. 'CASO 2 Acero superior en inferior rango lineal. 98. bb = -1 * (N - ecm * E * (asp + as1)) 99. ccc = -1 * ecm * E * (d * as1 - rp * asp) 100. kd2 = raiz(aa, bb, ccc) 101. 'MsgBox kd2 102. 103. If ecm * (kd2 - rp) / kd2 < Fy / E And ecm * (d - kd2) / kd2 < Fy / E Then 104. kd = kd2 105. Cs = E * asp * ecm * (kd2 - rp) / kd2 106. Ts = E * as1 * ecm * (d - kd2) / kd2 107. End If 108. 109. 'CASO 3 Acero superior en rango lineal e inferior fluyendo. 110. bb = -1 * (N - ecm * E * asp + Fy * as1)
Tutorial
110 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 111. ccc = -1 * ecm * E * rp * asp 112. kd3 = raiz(aa, bb, ccc) 113. 'MsgBox kd3 114. 115. If ecm * (kd3 - rp) / kd3 < Fy / E And ecm * (d - kd3) / kd3 > Fy / E Then 116. kd = kd3 117. Cs = E * asp * ecm * (kd3 - rp) / kd3 118. Ts = as1 * Fy 119. End If 120. 121. 'CASO 4 Acero superior fluyendo e inferior en rango lineal. 122. bb = -1 * (N - ecm * E * as1 - Fy * asp) 123. ccc = -1 * ecm * E * d * as1 124. kd4 = raiz(aa, bb, ccc) 125. 'MsgBox kd4 126. 127. If ecm * (kd4 - rp) / kd4 > Fy / E And ecm * (d - kd4) / kd4 < Fy / E Then 128. kd = kd4 129. Cs = asp * Fy 130. Ts = E * as1 * ecm * (d - kd4) / kd4 131. End If 132. 133. 'MsgBox "El Kd encontrado (menor a e0) es: " & kd 134. 'MsgBox "cc: " & cc 135. 136. ybarra = (2 * ecm * kd ^ 2 / (3 * eo) - ecm ^ 2 * kd ^ 2 / (4 * eo ^ 2)) / (ecm * kd / eo - ecm ^ 2 * kd / (3 * eo ^ 2)) 137. cc = fpc * B * (ecm * kd / eo - ecm ^ 2 * kd / (3 * eo ^ 2)) 138. 139. M = (cc * (cp - kd + ybarra) + Cs * (cp - rp) + Ts * (d cp)) * 10 ^ -5 140. curv = ecm / kd 141. 'MsgBox M 142. 143. Else 144. 'II.después DE eo 145. aa = fpc * B * (1 - eo / (3 * ecm) - ecm / (4 * (e50c eo)) + eo ^ 2 / (4 * ecm * (e50c - eo))) 146. 'CASO 1 147. Cs1 = Fy * asp 148. Ts1 = Fy * as1 149. kd1 = (N - Cs + Ts) / (fpc * B * (1 - eo / (3 * ecm) - ecm / (4 * (e50c - eo)) + eo ^ 2 / (4 * ecm * (e50c - eo)))) 150. 'MsgBox kd1 151. If ecm * (kd1 - rp) / kd1 > Fy / E And ecm * (d - kd1) / kd1 > Fy / E Then 152. kd = kd1 153. 'MsgBox "kd1" 154. Cs = Cs1 155. Ts = Ts1 156. End If 157. 158. 'CASO 2 159. bb = -1 * (N - ecm * E * (asp + as1))
Tutorial
111 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 160. ccc = -1 * ecm * E * (d * as1 - rp * asp) 161. kd2 = raiz(aa, bb, ccc) 162. 'MsgBox kd2 163. If ecm * (kd2 - rp) / kd2 < Fy / E And ecm * (d - kd2) / kd2 < Fy / E Then 164. kd = kd2 165. 'MsgBox "kd2" 166. Cs = E * asp * ecm * (kd2 - rp) / kd2 167. Ts = E * as1 * ecm * (d - kd2) / kd2 168. End If 169. 170. 'CASO 3 171. bb = -1 * (N - ecm * E * asp + Fy * as1) 172. ccc = -1 * ecm * E * rp * asp 173. kd3 = raiz(aa, bb, ccc) 174. 'MsgBox kd3 175. If ecm * (kd3 - rp) / kd3 < Fy / E And ecm * (d - kd3) / kd3 > Fy / E Then 176. kd = kd3 177. 'MsgBox "kd3" 178. Cs = E * asp * ecm * (kd3 - rp) / kd3 179. Ts = as1 * Fy 180. End If 181. 182. 'CASO 4 183. bb = -1 * (N - ecm * E * as1 - Fy * asp) 184. ccc = -1 * ecm * E * d * as1 185. kd4 = raiz(aa, bb, ccc) 186. 'MsgBox kd4 187. If ecm * (kd4 - rp) / kd4 > Fy / E And ecm * (d - kd4) / kd4 < Fy / E Then 188. kd = "kd4" 189. 'MsgBox kd4 190. Cs = asp * Fy 191. Ts = E * as1 * ecm * (d - kd4) / kd4 192. End If 193. 194. 'MsgBox "El Kd encontrado (mayor a eo) es: " & kd 195. 196. ybarra = ((5 / 12) * (eo * kd / ecm) ^ 2 + kd ^ 2 / 2 - ecm * kd ^ 2 / (6 * (e50c - eo)) + eo * kd ^ 2 / (4 * (e50c - eo)) - (1 / 2) * (eo * kd / ecm) ^ 2 - eo ^ 3 * kd ^ 2 / (12 * ecm ^ 2 * (e50c eo))) / (kd * (1 - eo / (3 * ecm) - ecm / (4 * (e50c - eo)) + eo ^ 2 / (4 * ecm * (e50c - eo)))) 197. cc = fpc * B * kd * (1 - eo / (3 * ecm) - ecm / (4 * (e50c - eo)) + eo ^ 2 / (4 * ecm * (e50c - eo))) 198. M = (cc * (cp - kd + ybarra) + Cs * (cp - rp) + Ts * (d cp)) * 10 ^ -5 199. curv = ecm / kd 200. 'MsgBox M 201. 202. End If 203. 204. contador = contador + 1 205. ReDim Preserve ec_kd_es_esp_M_Cur(1 To 6, 1 To contador) 206. 207. ec_kd_es_esp_M_Cur(1, contador) = ecm
Tutorial
112 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. 208. ec_kd_es_esp_M_Cur(2, contador) = kd 209. ec_kd_es_esp_M_Cur(3, contador) = ecm * (d - kd) / kd 210. ec_kd_es_esp_M_Cur(4, contador) = ecm * (kd - rp) / kd 211. ec_kd_es_esp_M_Cur(5, contador) = M 212. ec_kd_es_esp_M_Cur(6, contador) = curv * 100 213. 214. Next 215. 216. 217. Range(Cells(3, 1), Cells(2 + contador, 6)) = WorksheetFunction.Transpose(ec_kd_es_esp_M_Cur) 218. 219. 220. 'MsgBox UBound(ec_kd_es_esp_M_Cur, 2) 221. End Sub 222. 223. 224. Private Function raiz(aa As Double, bb As Double, cc As Double) 225. 'Se buscará el valor de c que cumple con el equilibrio de la sección cuando se tiene un 226. 'momento nominal requerido = Mu/0.9. 227. '1.- ALTERNATIVA SOLUCIÓN ECUACIÓN CUADRÁTICA 228. Dim x1 As Double 'primera raiz 229. Dim x2 As Double 'segunda raiz 230. x1 = (-bb + Sqr(bb ^ 2 - 4 * aa * cc)) / (2 * aa) 231. x2 = (-bb - Sqr(bb ^ 2 - 4 * aa * cc)) / (2 * aa) 232. 'MsgBox "x1: " & x1 & " x2: " & x2 233. 234. 'el criterio para escoger el valor correcto del eje neutro será el que esté más cerca del 235. 'centro de la viga. 236. Dim dis1 As Double 237. Dim dis2 As Double 238. If x1 > 0 And x2 > 0 Then 239. dist1 = Abs(H / 2 - x1) 240. dist2 = Abs(H / 2 - x2) 241. If dist1 < dist2 Then 242. c = x1 243. Else 244. c = x2 245. End If 246. Else 247. c = Application.WorksheetFunction.Max(x1, x2) 248. End If 249. ' Con el valor del eje neutro encontrado se procede a calcular el área requerida 250. raiz = c 251. End Function 252. Sub borrar() 253. Dim i As Integer 254. Do While Cells(3 + i, 1) <> "" 255. i = i + 1 256. Loop 257. Range(Cells(3, 1), Cells(3 + i, 6)).ClearContents 258. End Sub
Tutorial
113 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
258.1.
Gráfica de Kent & Park para distintas cuantías de confinamiento
En el siguiente ejemplo se verá cómo implementar un código en Visual Basic que permite graficar curvas del comportamiento esfuerzo - deformación del hormigón sometido a carga en compresión. Para diferentes cuantías de refuerzo de confinamiento ( .
í
Se utilizará el modelo de Kent & Park para el comportamiento del hormigón, de modo de considerar un aumento en la ductilidad aportado por el confinamiento. Los parámetros que rigen la curva son:
Se mostrarán los resultados mediante la siguiente interfaz:
Tutorial
114 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago.
Ilustración ¡Error! Utilice la pestaña Inicio para aplicar 0 al texto que desea que aparezca aquí..27: Planilla de visualización
El objetivo de la Macro es:
Para las áreas trasversales de los estribos que se tienen en las celdas bajo la celda "B9" ( ). Calcular la gráfica correspondiente.
Que los resultados del esfuerzo en compresión para una deformación dada se muestren a continuación de los datos de la última cuantía calculada. Trabajar con varias "Sub rutinas" de modo de entender cómo interactuan entre sí.
258.1.1.
Código y comentarios:
Dim Gráfico As Excel.Chart 'Esta variable se declara acá ya que se utiliza en dos rutinas Sub Generar_gráficos() Dim j As Integer Dim i As Integer Dim a As Double j = 0 i = 0 'Declaración de Variables Dim fpc As Double 'Resistencia cilíndrica del hormigón Dim eo As Double Dim euu As Double Dim e50u As Double Dim e50h As Double Dim e50c As Double
Tutorial
115 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Dim e20c As Double Dim rho As Double 'Cuantía de acero confinamiento Dim Bc As Double 'Ancho Núcleo Confinado Dim Hc As Double 'Alto Núcleo Confinado Dim Sh As Double 'Separación del refuerzo transversal Dim Ae As Double 'Área transversal del estribo (de una rama) Dim ec As Double '' 'Valores que son constantes fpc = Range("c4") Bc = Cells(5, 3) Hc = Cells(6, 3) Sh = Cells(7, 3) eo = 0.002 e50u = (0.21 + 0.002 * fpc) / (fpc - 70) euu = 1.6 * e50u - 0.6 * eo '' ' Call borrar 'Se ejecuta la sub rutina Borrar. Y continúa el código. Cells(23, 3) = "ec" 'Se escribe ec en range("c23") ActiveSheet.ChartObjects(1).Delete 'Borrar gráfico, esto se hace debido a que la macro le agrega series de datos al gráfico_ 'si no se borrara el gráfico, la capacidad de veces que se podría ejecutar la macro sería finita, dado que Excel trabaja_ 'con cierta cantidad máxima de series de datos para los gráficos. Call Crear_gráfico 'Se llama a la sub rutina llamada Crear_gráfico. Esta se ejecuta y continúa con el código. Do While Cells(10 + j, 2) <> "" 'Hacer mientras no se tope con una celda vacía bajo range("B9"). Empieza con Do while_ 'y termina con Loop. El uso de "" significa vacio. Ae = Cells(10 + j, 2) rho = 2 * Ae * (Bc + Hc) / (Bc * Hc * Sh) e50h = 0.75 * rho * Sqr(Bc / Sh) e50c = e50u + e50h e20c = 1.6 * e50c - 0.6 * eo Cells(23, 4 + j) = "fc(" & Ae & " cm2)" 'Escribe en la respectiva columna el esfuerzo en función del área utilizada. Paso = 0.0001 'Paso que se utilizará para el barrido de ec i = 0 'importante definirlo afuera del siguiente while, dado que como para cada área se hará lo mismo, por ende_ ' este contador debe reiniciar el dónde se pegarán los resultados. ec = 0 'análogo a la explicación anterior. Para cada área se debe comenzar con ec=o Do While ec <= e20c 'Hacer mientras ec sea menor igual que e20c If ec <= eo Then 'condición de la curva utilizar
Tutorial
116 - Ignacio Mayorga / Ignacio Ruiz.
Hormigón Armado I, UTFSM Santiago. Cells(24 + i, 4 + j) = fpc * (2 * (ec / eo) - (ec / eo) ^ 2) 'Pega el esfuerzo obtenido Else Cells(24 + i, 4 + j) = fpc * (1 - (ec - eo) / (2 * (e50c - eo))) 'Rama descendente H. confinado End If Cells(24 + i, 3) = ec ' pega la deformación i = i + 1 ' para pegar el siguiuente dato una celda más abajo ec = ec + Paso 'aumento de ec Loop 'Fin del segundo while j = j + 1 ' siguiente columna para pasar a la siguiente área Gráfico.SeriesCollection.NewSeries 'Agrega una serie de datos al char llamado Gráfico Gráfico.SeriesCollection(j).XValues = Range(Cells(24, 3), Cells(23 + i, 3)) 'Agrega las deformaciones como variable x Gráfico.SeriesCollection(j).Values = Range(Cells(24, 3 + j), Cells(23 + i, 3 + j)) 'Agrega los esfuerzos como variable y Loop 'Fin del primer while. End Sub Sub Crear_gráfico() Set Gráfico = ActiveSheet.ChartObjects.Add(Left:=300, Width:=450, Top:=10, Height:=300).Chart 'Crear un gráfico y se le asigna el nombre Gráfico. 'Left = ubicación desde izquierda a derecha. Width = Ancho del gráfico. Top = ubicación de arriba a abajo, Height = altura del gráfico. Gráfico.ChartType = xlXYScatterLinesNoMarkers 'Formato de gráfico (con título, con leyendas, etc) Gráfico.ApplyLayout (1) 'Formato de gráfico (Lineas recatas con o sin marcadores, etc) Gráfico.Legend.Clear 'Borrar leyendas Gráfico.ChartTitle.Text = "Kent & Park" 'Título del gráfico End Sub Sub borrar() Dim j As Integer Dim i As Integer Do While Cells(23 + i, 3) <> "" ' Para saber hasta qué fila borrar i = i + 1 Loop Do While Cells(23, 3 + j) <> "" 'Para saber hasta que columna borrar j = i + 1 Loop Range(Cells(23, 3), Cells(23 + i, 3 + j)).ClearContents 'Borra el rango End Sub
Tutorial
117 - Ignacio Mayorga / Ignacio Ruiz.